Aceste 4 elemente folosite impreuna, vor forma un mix de stabilitate si performanta pe serverul dumneavoastra, mai ales datorita sistemului de operare FreeBSD care aduce un mare plus in alocarea resurselor necesare intr-un mod destul de subtil, incat sa nu se creeze o supra-incarcare a serverului.
Deci, sa incepem instalarea. Prima data va fi nevoie sa instalam pachetele necesare prin comanda:
sudo pkg install nginx mysql56-server php56 php56-mysql
Aceasta va instala Nginx ca webserver, serverul MySQL pentru managementul bazelor de date si limbajul de procesare PHP pentru continutul dinamic pe care il vom avea pe site/uri.
In continuare vom executa comanda rehash pentru a actualiza sistemul dupa noile modificari.
rehash
Pornirea serviciilor
Pentru aceasta avem nevoie de variabila rcvar, iar prin executarea comenzii
grep rcvar /usr/local/etc/rc.d/*
vom obtine un rezultat ca acesta:
/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable /usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable /usr/local/etc/rc.d/dbus:rcvar=dbus_enable /usr/local/etc/rc.d/mysql-server:rcvar=mysql_enable /usr/local/etc/rc.d/nginx:rcvar=nginx_enable /usr/local/etc/rc.d/php-fpm:rcvar=php_fpm_enable /usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable
In acest output vedem serviciile pe care le-am instalat, dar care inca nu sunt active. In continuare va trebui sa editam cateva fisiere, asa ca pentru comoditate va sfatuiesc sa folositi editorul nano, in loc de vi. Pentru a-l instala vom executa comanda:
sudo pkg install nano rehash
Apoi, vom edita fisierul /etc/rc.conf cu comanda:
sudo nano /etc/rc.conf
unde va trebui sa avem, in plus urmatoarele linii:
mysql_enable="YES" nginx_enable="YES" php_fpm_enable="YES"
Vom apasa CTRL X pentru salvarea fisierului.
In continuare, ne vom ocupa de serviciul PHP-FPM.
cd /usr/local/etc
Unde vom edita fisierul php-fpm.conf
sudo nano php-fpm.conf
Folosind CTRL W, vom cauta linia aceasta
listen = 127.0.0.1:9000
si o vom face sa arate asa
listen = /var/run/php-fpm.sock
pentru a putea sa folosim socket-uri. Dupa aceasta, vom cauta grupul de linii
;listen.owner = www ;listen.group = www ;listen.mode = 0660
si il vom decomenta, stergand punt si virgula din fata liniilor. Salvam si iesim.
In etapa urmatoare vom pune in uz fisierul de configuratie al PHP-ului, prin comanda
sudo cp php.ini-production php.ini
si il vom edita
sudo nano php.ini
.
Vom cauta linia ce contine
cgi.fix_pathinfo
, o vom decomenta, iar la final ii vom seta valoarea 0:
cgi.fix_pathinfo=0
. Salvam si iesim, iar mai apoi pornim serviciul PHP-FPM prin comanda
sudo service php-fpm start
Configurarea serverului MySQL
Pentru a incepe configurarea, trebuie mai intai sa pornim serverul prin comanda
sudo service mysql-server start
si sa incepem un proces de instalare/configurare a acesteia:
sudo mysql_secure_installation
. Vom intampina un mesaj de introducere a parolei pentru userul curent
Enter current password for root (enter for none):
, dar vom apasa enter pentru a trece peste acest pas. Apoi, vom intampina mesajul
Set root password? [Y/n]
, vom apasa Y si enter pentru confirmare si ne vom alege o parola administrativa pentru serverul MySQL.
Ultimul pas este acela de a porni serverul, iar comanda necesara este
sudo service mysql-server restart
Dupa ce serverul a pornit, ne putem concentra asupra configurarii serverului web.
Primul pas este pornirea acestuia
sudo service nginx start
. In continuare, ne vom duce in folderul /usr/local/etc/nginx, prin comanda
cd /usr/local/etc/nginx
, unde vom modifica fisierul nginx.conf.
sudo nano nginx.conf
Vom decomenta directiva user, de la inceputul fisierului si o vom seta cu valoarea www, deoarece instanta PHP-FPM cauta aceasta configurare.
Linia va arata asa:
user www;
Apoi, va trebui sa setam worker_processes cu numarul de CPU-uri pe care le are serverul. Pentru a afla acest numar vom tasta comanda
sysctl hw.ncpu
in linia de comanda. Pentru mine rezultatul este 4, asa ca linia va arata asa:
worker_processes 4;
In continuare, vom seta fisierul cu log-uri, prin directiva
error_log /var/log/nginx/error.log info;
In blocul http, vom seta log-urile de acces, prin linia corespunzatoare:
access_log /var/log/nginx/access.log;
In block-ul server, vom modifica server_name cu domeniul nostru sau cu adresa IP a serverului nostru. Putem face ca serverul sa raspunda si la host-ul www, prin adaugarea acestuia dupa domeniul principal. De exemplu:
server { listen 80; server_name silviustroe.com www.silviustroe.com; . . .
Vom configura directivele root si index din block-ul server. Radacina noastra va fi /usr/local/www/silviustroe.com si directiva index ar trebui sa serveasca index.php inainte de a se uita dupa fisierele index.html sau index.htm
In directiva de locatie va trebui configurata directiva try_files pentru a servi fisierele catre utilizatori sau pentru a returna erori 404 in cazul negasirii lor.
server { . . . root /usr/local/www/silviustroe.com; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } . . .
In continuare vom folosi socket-ul configurat mai devreme in php-fpm.conf. Va trebui sa setam SCRIPT_FILENAME pentru ca PHP-ul sa stie ce sa execute.
server { . . . location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; }
Toate puse la un loc, ar trebui sa arate cam asa:
user www; worker_processes 4; error_log /var/log/nginx/error.log info; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; keepalive_timeout 65; server { listen 80; server_name silviustroe.com www.silviustroe.com; root /usr/local/www/silviustroe.com; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/local/www/nginx-dist; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } } }
Salvam si inchidem fisierul, dupa ce am terminat. In continuare, vom crea folderele si fisierele necesare pastrarii de log-uri
sudo mkdir -p /var/log/nginx sudo touch /var/log/nginx/access.log sudo touch /var/log/nginx/error.log
si vom crea din nou directoarele, fara legaturi:
sudo rm /usr/local/www/nginx sudo mkdir /usr/local/www/nginx
Pentru a ne testa serverul, vom copia un fisier html in directorul radacina.
sudo cp /usr/local/www/nginx-dist/index.html /usr/local/www/silviustroe.com
dar si un fisier php, pentru a vedea daca totul functioneaza cum trebuie:
sudo nano /usr/local/www/nginx/info.php
unde vom introduce
<?php phpinfo(); ?>
.
Salvam si iesim. Pentru a vedea daca avem erori de configuratie, introducem comanda
sudo nginx -t
unde vom primi ca output
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Vom restarta serverul:
sudo service nginx restart
si vom testa rezultatele.
Accesam http://silviustroe.com, respectiv host-ul sau IP-ul setat de dumneavoastra, iar rezultatul ar trebui sa arate cam asa:
Apoi vom accesa http://silviustroe.com/info.php unde vom avea pagina
Deoarece contine informatii senzitive, vom sterge fisierul info.php
sudo rm /usr/local/www/silviustroe.com/info.php
In concluzie, trebuie sa aveti acum un server complet functional, ruland Nginx care poate procesa continut dinamic PHP si poate folosi MySQL pentru a stoca informatii.
Configuratia prezentata poate fi folosita ca o baza pentru o varietate a altor configuratii si aplicatii web.