CREATEIT SOFTWARE
Symfony Armenian Community

By Createit.am

Nginx+PHP-FPM Կամ Ինչպես Ստանալ Արագագործ PHP Սերվեր


ՙԷս վերջերս զգացի որ նույնիսկ լավ փորցառու PHP ծրագրաորողներ կան ովքեր ուղղակի օգտագորժում են պատրաստի հոստինգներ, որոնք որոշ դեպքերում լինում են ավելի թանկ ու ոչ արդյունավետ, քան այն հոստինգները որոնք տրամադրում են վիրտուալ օպերացիոն համակարգեր նույնիսկ 1 տարի անվճար օգտագործելու հնարավորությամբ: Օրինակ՝ Amazon AWS (aws.amazon.com) գրանցվելու դեպքում դուք կստանաք 1GB RAM, 30GB SSD, 1 Core Inter Xeon պարամետրերով վիրտուալ տարածք 1 տարի անվճար փորցաշրջանով Նմանատիպ վիրտուալ տարածքում հնարավորություն ունեք տեղադրելու օրնակ Ubuntu Server 12.04 և օգտագործել այն որպես լուրջ ծրագրաորողի << հաքով >> սերվեր:

Էս փոստը օգտակար կլինի նաև էն ծրագրաորողնեին ովքեր իմ նման սիրում են նոր էքսպերեմենտներ անել, արագագործ լուծումներ փնտրելու ճանապարհին:

Առաջին Հերթին Nginx

Nginx_ը ներկայումս եղած նմանատիպ սերվերային ծրագրերից ամենաարագն է, որը որ օգտագործվում է գրեթե բոլոր նորմալ նախագծված սերվերային համակարգերում: Ներառյալ Google, Facebook, Yahoo, Dropbox և այլն…

Ubuntu օպերացիոն համակարգի վրա տեղադրելու համար բավական է տերմինալի միջոցով իրականացնել հետևյալ հրամանը:

sudo apt-get install nginx -y

Այդ հրամանից հետո դուք կունենաք արդեն աշխատող Nginx սերվերը, բայց այն պետք է նաև կարգավորել կախված մեր օգտագործման կարիքներից: Կոնֆիգուրացիոն ֆայլը բացելու համար ես ուղղակի կօգտագործեմ vi հրամանը, որը հնարաորություն կտա փոփոխել ֆայլը հենց տերմինալի մեջ: Խորհուրդ է տրվում չօգտագործել գրաֆիկական տեքստային ռեդակտոր, զուտ սովորելու նկատառումներով:

cd /etc/nginx
sudo cp nginx.conf nginx.conf.backup (Պահում ենք հիմնական ֆայլը, որ շատ բան չփչացնենք:) )
sudo vi nginx.conf

Այս ամեն ինչից հետո կտեսնեք Nginx ծրագրի կոնֆիգուրացիոն ֆայլը, որը արդեն փոփոխած տարբերակով կլինի այսպես (եթե հավես չունք համեմատելու ուղղակի արեք copy/paste  )

user www-data;
 
# As a thumb rule: One per CPU. If you are serving a large amount
# of static files, which requires blocking disk reads, you may want
# to increase this from the number of cpu_cores available on your
# system.
#
# The maximum number of connections for Nginx is calculated by:
# max_clients = worker_processes * worker_connections
worker_processes 1;
 
# Maximum file descriptors that can be opened per process
# This should be > worker_connections
worker_rlimit_nofile 8192;
 
events {
    # When you need > 8000 * cpu_cores connections, you start optimizing
    # your OS, and this is probably the point at where you hire people
    # who are smarter than you, this is *a lot* of requests.
    worker_connections 8000;
}
 
error_log /var/log/nginx/error.log;
 
pid /var/run/nginx.pid;
 
http {
    charset utf-8;
 
    # Set the mime-types via the mime.types external file
    include mime.types;
 
    # And the fallback mime-type
    default_type application/octet-stream;
 
    # Click tracking!
    access_log /var/log/nginx/access.log;
 
    # Hide nginx version
    server_tokens off;
 
    # ~2 seconds is often enough for HTML/CSS, but connections in
    # Nginx are cheap, so generally it's safe to increase it
    keepalive_timeout 20;
 
    # You usually want to serve static files with Nginx
    sendfile on;
 
    tcp_nopush on; # off may be better for Comet/long-poll stuff
    tcp_nodelay off; # on may be better for Comet/long-poll stuff
 
    server_name_in_redirect off;
    types_hash_max_size 2048;
 
    gzip on;
    gzip_http_version 1.0;
    gzip_comp_level 5;
    gzip_min_length 512;
    gzip_buffers 4 8k;
    gzip_proxied any;
    gzip_types
        # text/html is always compressed by HttpGzipModule
        text/css
        text/plain
        text/x-component
        application/javascript
        application/json
        application/xml
        application/xhtml+xml
        application/x-font-ttf
        application/x-font-opentype
        application/vnd.ms-fontobject
        image/svg+xml
        image/x-icon;
 
    # This should be turned on if you are going to have pre-compressed copies (.gz) of
    # static files available. If not it should be left off as it will cause extra I/O
    # for the check. It would be better to enable this in a location {} block for
    # a specific directory:
    # gzip_static on;
 
    gzip_disable "msie6";
    gzip_vary on;
 
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Բայց հիմնականում այս սկզբնական էտապում ոչմի բանի ձեռք տալու կարք չի լինում ու ձեզ մոտ բացված կոնֆիգուրացիոն ֆայլը շատ չի տարբերվի այս գրվածից:

Ավելացնում ենք վեբ կայքին վերաբերվող կարգավորումները:

sudo cp sites-available/default sites-available/default.backup
sudo vi sites-available/default

server {
    listen 80 default; ## listen for ipv4; this line is default and implied
    listen [::]:80 default ipv6only=on; ## listen for ipv6
 
    # Make site accessible from http://localhost/ or server IP-address
    server_name localhost;
    server_name_in_redirect off;
 
    charset utf-8;
 
    access_log /usr/share/nginx/access.log;
    error_log /usr/share/nginx/error.log;
 
    root /usr/share/nginx/www;
    index index.php index.html index.htm;
 
    location / {
        # First attempt to serve request as file, then
        # as directory, then trigger 404
        try_files $uri $uri/ =404;
    }
}

Փոփոխությունները հաստատոլու համար անում ենք հետեվյալը

sudo service nginx reload

Հիմա արդեն կարող եք տեսնել Nginx սերվերի ստանդարտ էջը բրոուզերում ուղղակի հավաքելով ձեր սերվերի IP հասցեն կամ դոմեյնը, կամ էլ եթե այս ամենը անում էիք լոկալ ուղղակի հավաքեք http://localhost :

Անցանք Բազային – MySQL

MySQL բազաների ծրագիրը հուսով եմ ներկայացման կարիք չունի  Linux կարծրատիպերը կոտրելու համար ասեմ որ MySQL ծրագիրն էլ է հնարավոր ունենալ ընդհամենը 1 տող հրամանով:

sudo apt-get install mysql-server mysql-client -y

ու քանի որ մենք այս ամենը անում ենք որ սովորենք թե ինչպես սերվերային համակարգ ստանանք ուրեմն պետքե անենք այն ավելի պաշտպանված, իրականացնելով ու հետեվելով այս հրամանաի հրահանգներին

sudo mysql_secure_installation

Հիմնական իմաստը այս հրամանի MySQL root ծածկագրի նշելն է:

Հասանք – PHP

Օգտագործելով Linux_ի ամենազորությունը ուղղակի իրականացնենք այս հրամանը և ստանանք PHPի համար անհրաժեշտ ամեն ինչ:

sudo apt-get install php5-fpm php5-cli php5-mysql -y

Ծրագրերը ունենալուց հետո պետք է կոնֆիգուրացնել այն: Որպես պայմանավորվածություն php-fpm ծրագիրը և php_ն ունենում են իրենց առանձին php.ini կոնֆիգուրացիոն ֆայլերը: Ես ավելի հարմար եմ գտնում որ 2ի համար լինի 1 ֆայլ, քանի որ ինչոր փոփոխության դեպում չեմ ցանկանա 2 տեղ փոփոխեմ, եթե ցանկանում էք դուք էլ 1 տեղ փոփոխեք ուրեմն արեք հետևյալը:

cd /etc/php5/cli
sudo mv php.ini php.ini.backup
sudo ln -s ../fpm/php.ini

Այս ամեն ինչից հետո ժամանակն է նորից կոնֆիգուրացնել Nginx սերվերը php-fpm սերվերային ծրագրի հետ կոմունիկացիա ստեղծելու համար:

sudo vi /etc/nginx/sites-available/default

# pass the PHP scripts to FPM socket
location ~ \.php$ {
    try_files $uri =404;
 
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
     
    fastcgi_pass php;
 
    fastcgi_index index.php;
 
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT /usr/share/nginx/www;
 
    # send bad requests to 404
    fastcgi_intercept_errors on;
 
    include fastcgi_params;
}

Փոփոխենք նաև php-fpm ծրագրի ցանցային կոմունիկացիան Linux_ի սոկետային ֆայլով, որը արագության տեսանկյունից բավականին արագ է քան սովորական TCP կոմունիկացիան:

cd /etc/php5/fpm/pool.d
sudo vi www.conf

Փոխեք այս տողը
listen = 127.0.0.1:9000
Սրան…
listen = /tmp/php5-fpm.sock
Պահպանեք փոփոխությունը և վերբեռնենք ծրագրերը, հաստատոլու համար բոլոր փոփոխությունները:

sudo service nginx restart
sudo service php5-fpm restart

Փորձենք Թե Ինչ Ստացվեց

Ստեղծենք ֆայլ մեր կայքերի գլխավոր դիրեկտորիայում

vi /usr/share/nginx/www/index.php


Պահպանելով այս ֆայլը և ուղղակի բրոզերում հավաքելով ձեր դոմեյնը կամ սերվերի IP հասցեն կտեսնեք սիրուն էջ php ծրագրի մասին մանրամասն ինֆորմացիայով:

Պարունակությունը շատ սկզբնական պատկերացում կազմելու համար է, եթե ցանկանաք գրեք և մեծ հաճույքով կշարունակեմ նմանատիպ թեմաների վերլուծությունը ավելի մանրամասն:

Մեկնաբանություններ (0)

Առայժմ մեկնաբանություններ չկան

Symfony.AM (c) 2016

tigran[@]symfony.am