Com instal·lar Nginx, MariaDB 10, PHP 7 (pila LEMP) a 16.10/16.04


La pila LEMP és un acrònim que representa un grup de paquets (SO Linux, servidor web Nginx, base de dades MySQL\MariaDB i llenguatge de programació dinàmica del servidor PHP) que s'utilitzen per desplegar aplicacions web i pàgines web dinàmiques.

Aquest tutorial us guiarà sobre com instal·lar una pila LEMP amb suport MariaDB 10, PHP 7 i HTTP 2.0 per a Nginx a les edicions de servidor/escriptori Ubuntu 16.10 i Ubuntu 16.04.

  1. Instal·lació d'Ubuntu 16.04 Server Edition [les instruccions també funcionen a Ubuntu 16.10]

Pas 1: instal·leu el servidor web Nginx

1. Nginx és un servidor web modern i eficient en recursos que s'utilitza per mostrar pàgines web als visitants a Internet. Començarem instal·lant el servidor web Nginx des dels dipòsits oficials d'Ubuntu mitjançant la línia d'ordres apt.

$ sudo apt-get install nginx

2. A continuació, emet les ordres systemctl per confirmar si Nginx està iniciat i s'enllaça al port 80.

$ netstat -tlpn
$ sudo systemctl status nginx.service

Un cop tingueu la confirmació que el servidor s'ha iniciat, podeu obrir un navegador i navegar a l'adreça IP del vostre servidor o al registre DNS mitjançant el protocol HTTP per visitar la pàgina web predeterminada de Nginx.

http://IP-Address

Pas 2: habiliteu el protocol Nginx HTTP/2.0

3. El protocol HTTP/2.0 que es construeix de manera predeterminada a la darrera versió dels binaris Nginx a Ubuntu 16.04 només funciona juntament amb SSL i promet una gran millora de velocitat en la càrrega de pàgines web SSL web.

Per habilitar el protocol a Nginx a Ubuntu 16.04, primer aneu als fitxers de configuració dels llocs disponibles de Nginx i feu una còpia de seguretat del fitxer de configuració predeterminat emetent l'ordre següent.

$ cd /etc/nginx/sites-available/
$ sudo mv default default.backup

4. A continuació, amb un editor de text, creeu una pàgina predeterminada nova amb les instruccions següents:

server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;

        root /var/www/html;

        index index.html index.htm index.php;

        server_name 192.168.1.13;

        location / {
                try_files $uri $uri/ =404;
        }

        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_dhparam  /etc/nginx/ssl/dhparam.pem;
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 180m;
        resolver 8.8.8.8 8.8.4.4;
        add_header Strict-Transport-Security "max-age=31536000;
        #includeSubDomains" always;


        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

}

server {
       listen         80;
       listen    [::]:80;
       server_name    192.168.1.13;
       return         301 https://$server_name$request_uri;
}

El fragment de configuració anterior permet l'ús d'HTTP/2.0 afegint el paràmetre http2 a totes les directives d'escolta SSL.

A més, l'última part de l'extracte inclòs a la directiva del servidor s'utilitza per redirigir tot el trànsit que no sigui SSL a l'amfitrió predeterminat SSL/TLS. A més, substituïu la directiva server_name perquè coincideixi amb la vostra pròpia adreça IP o registre DNS (FQDN preferiblement).

5. Un cop hàgiu acabat d'editar el fitxer de configuració predeterminat de Nginx amb la configuració anterior, genereu i enumereu el fitxer i la clau del certificat SSL executant les ordres següents.

Ompliu el certificat amb la vostra configuració personalitzada i presteu atenció a la configuració del nom comú perquè coincideixi amb el vostre registre FQDN de DNS o l'adreça IP del vostre servidor que s'utilitzarà per accedir a la pàgina web.

$ sudo mkdir /etc/nginx/ssl
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
$ ls /etc/nginx/ssl/

6. A més, creeu un xifrat DH fort, que s'ha canviat al fitxer de configuració anterior a la línia d'instruccions ssl_dhparam, emetent l'ordre següent:

$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

7. Un cop creada la clau Diffie-Hellman, verifiqueu si el fitxer de configuració de Nginx està escrit correctament i el servidor web Nginx pot aplicar-lo i reinicieu el dimoni per reflectir els canvis executant les ordres següents.

$ sudo nginx -t
$ sudo systemctl restart nginx.service

8. Per provar si Nginx utilitza el protocol HTTP/2.0, emeteu l'ordre següent. La presència del protocol anunciat h2 confirma que Nginx s'ha configurat correctament per utilitzar el protocol HTTP/2.0. Tots els navegadors moderns actualitzats haurien de suportar aquest protocol de manera predeterminada.

$ openssl s_client -connect localhost:443 -nextprotoneg ''

Pas 3: instal·leu PHP 7 Interpreter

Nginx es pot utilitzar amb l'intèrpret de llenguatge de processament dinàmic PHP per generar contingut web dinàmic amb l'ajuda del gestor de processos FastCGI obtingut instal·lant el paquet binari php-fpm dels dipòsits oficials d'Ubuntu.

9. Per agafar PHP7.0 i els paquets addicionals que permetran que PHP es comuniqui amb el servidor web Nginx, emet l'ordre següent a la consola del servidor:

$ sudo apt install php7.0 php7.0-fpm 

10. Un cop l'intèrpret PHP7.0 s'hagi instal·lat correctament a la vostra màquina, inicieu i comproveu el dimoni php7.0-fpm emetent l'ordre següent:

$ sudo systemctl start php7.0-fpm
$ sudo systemctl status php7.0-fpm

11. El fitxer de configuració actual de Nginx ja està configurat per utilitzar el gestor de processos PHP FastCGI per tal de servidor de contingut dinàmic.

El bloc de servidor que permet a Nginx utilitzar l'intèrpret PHP es presenta a l'extracte següent, de manera que no calen més modificacions del fitxer de configuració predeterminat de Nginx.

location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

A continuació es mostra una captura de pantalla de les instruccions que necessiteu per descomentar i modificar el cas d'un fitxer de configuració predeterminat de Nginx original.

12. Per provar la relació del servidor web Nginx amb el gestor de processos PHP FastCGI, creeu un fitxer de configuració de prova PHP info.php emetent l'ordre següent i verifiqueu la configuració visitant aquest fitxer de configuració mitjançant l'adreça següent: http://IP_o domini/info.php.

$ sudo su -c 'echo "<?php phpinfo(); ?>" |tee /var/www/html/info.php'

Comproveu també si el servidor anuncia el protocol HTTP/2.0 localitzant la línia $_SERVER[‘SERVER_PROTOCOL’] al bloc de variables PHP, tal com es mostra a la captura de pantalla següent.

13. Per instal·lar mòduls PHP7.0 addicionals, utilitzeu l'ordre apt search php7.0 per trobar un mòdul PHP i instal·lar-lo.

A més, proveu d'instal·lar els següents mòduls PHP que us poden ser útils en cas que tingueu previst instal·lar WordPress o un altre CMS.

$ sudo apt install php7.0-mcrypt php7.0-mbstring

14. Per registrar els mòduls addicionals de PHP, només cal que reinicieu el dimoni PHP-FPM emetent l'ordre següent.

$ sudo systemctl restart php7.0-fpm.service

Pas 4: instal·leu la base de dades MariaDB

15. Finalment, per completar la nostra pila LEMP necessitem el component de base de dades MariaDB per emmagatzemar i gestionar les dades del lloc web.

Instal·leu el sistema de gestió de bases de dades MariaDB executant l'ordre següent i reinicieu el servei PHP-FPM per utilitzar el mòdul MySQL per accedir a la base de dades.

$ sudo apt install mariadb-server mariadb-client php7.0-mysql
$ sudo systemctl restart php7.0-fpm.service

16. Per assegurar la instal·lació de MariaDB, executeu l'script de seguretat proporcionat pel paquet binari dels dipòsits d'Ubuntu que us demanarà que configureu una contrasenya d'arrel, elimineu usuaris anònims, desactiveu l'inici de sessió d'arrel de forma remota i elimineu la base de dades de prova.

Executeu l'script emetent l'ordre següent i responeu totes les preguntes amb yes. Utilitzeu la captura de pantalla següent com a guia.

$ sudo mysql_secure_installation

17. Per configurar MariaDB perquè els usuaris normals puguin accedir a la base de dades sense privilegis sudo del sistema, aneu a la interfície de línia d'ordres de MySQL amb privilegis d'arrel i executeu les ordres següents a l'intèrpret MySQL:

$ sudo mysql 
MariaDB> use mysql;
MariaDB> update user set plugin=’‘ where User=’root’;
MariaDB> flush privileges;
MariaDB> exit

Finalment, inicieu sessió a la base de dades MariaDB i executeu una ordre arbitrària sense privilegis d'arrel executant l'ordre següent:

$ mysql -u root -p -e 'show databases'

Aixo es tot! Ara teniu una pila LEMP configurada al servidor Ubuntu 16.10 i Ubuntu 16.04 que us permet desplegar aplicacions web dinàmiques complexes que poden interactuar amb bases de dades.