Cómo instalar Nginx, MariaDB 10, PHP 7 (pila LEMP) en 16.10 / 16.04


La pila LEMP es un acrónimo que representa un grupo de paquetes (sistema operativo Linux, servidor web Nginx, base de datos MySQL \ MariaDB y lenguaje de programación dinámica del lado del servidor PHP) que se utilizan para implementar aplicaciones web dinámicas y páginas web.

Este tutorial lo guiará sobre cómo instalar una pila LEMP con MariaDB 10 , PHP 7 y HTTP 2.0 Soporte para Nginx en Ubuntu 16.10 y Ubuntu 16.04 servidor/ediciones de escritorio.

  1. Installation of Ubuntu 16.04 Server Edition [instructions also works on Ubuntu 16.10]

Paso 1: Instalar el servidor web Nginx

1. Nginx es un servidor web moderno y eficiente en recursos que se utiliza para mostrar páginas web a los visitantes en Internet. Comenzaremos instalando el servidor web Nginx desde los repositorios oficiales de Ubuntu usando la línea de comandos apt.

$ sudo apt-get install nginx

2. A continuación, emita los comandos netstat y systemctl para confirmar si Nginx se inicia y se enlaza en el puerto 80 .

$ netstat -tlpn
$ sudo systemctl status nginx.service

Una vez que tenga la confirmación de que el servidor está iniciado, puede abrir un navegador y navegar a la dirección IP de su servidor o al registro DNS utilizando el protocolo HTTP para visitar la página web predeterminada de Nginx.

http://IP-Address

Paso 2: Habilitar el protocolo HTTP / 2.0 de Nginx

3. El protocolo HTTP/2.0 que se crea de forma predeterminada en la última versión de los binarios de Nginx en Ubuntu 16.04 funciona solo junto con SSL y Promete una enorme mejora de velocidad en la carga de páginas web SSL.

Para habilitar el protocolo en Nginx en Ubuntu 16.04 , primero navegue a los archivos de configuración de los sitios disponibles de Nginx y haga una copia de seguridad del archivo de configuración predeterminado emitiendo el siguiente comando.

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

4. Luego, con un editor de texto, crea una nueva página predeterminada con las siguientes instrucciones:

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 fragmento de configuración anterior permite el uso de HTTP/2.0 agregando el parámetro http2 a todas las directivas de escucha de SSL.

Además, la última parte del extracto incluido en la directiva del servidor se utiliza para redirigir todo el tráfico no SSL al host predeterminado SSL/TLS. Además, reemplace la directiva nombre_servidor para que coincida con su propia dirección IP o registro DNS (preferiblemente FQDN).

5. Una vez que haya terminado de editar el archivo de configuración predeterminado de Nginx con la configuración anterior, genere y enumere la clave y el archivo de certificado SSL ejecutando los comandos siguientes.

Rellene el certificado con su propia configuración personalizada y preste atención a la configuración de Nombre común para que coincida con su registro de FQDN de DNS o la dirección IP de su servidor que se utilizará para acceder 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. También, cree una fuerte DH cypher , que se modificó en el archivo de configuración anterior en la línea de instrucciones de ssl_dhparam , emitiendo el siguiente comando:

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

7. Una vez que se haya creado la clave Diffie-Hellman , verifique si el archivo de configuración de Nginx está correctamente escrito y puede ser aplicado por el servidor web de Nginx y reinicie el demonio para reflejar los cambios ejecutando los siguientes comandos.

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

8. Para comprobar si Nginx usa el protocolo HTTP/2.0 , ejecute el siguiente comando. La presencia del protocolo anunciado h2 confirma que Nginx se ha configurado correctamente para usar el protocolo HTTP/2.0. Todos los navegadores modernos y modernos deben admitir este protocolo de forma predeterminada.

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

Paso 3: Instalar el intérprete PHP 7

Nginx se puede utilizar con el intérprete de lenguaje de procesamiento dinámico de PHP para generar contenido web dinámico con la ayuda del administrador de procesos FastCGI obtenido al instalar el paquete binario php-fpm desde los repositorios oficiales de Ubuntu.

9. Para capturar PHP7.0 y los paquetes adicionales que permitirán que PHP se comunique con el servidor web Nginx, ejecute el siguiente comando en la consola del servidor:

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

10. Una vez que el intérprete PHP7.0 se haya instalado correctamente en su máquina, inicie y verifique el daemon php7.0-fpm emitiendo lo siguiente mando:

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

11. El archivo de configuración actual de Nginx ya está configurado para usar el administrador de procesos PHP FastCGI para poder enviar contenido dinámico.

El bloque del servidor que permite a Nginx utilizar el intérprete de PHP se presenta en el extracto a continuación, por lo que no se requieren más modificaciones del archivo de configuración predeterminado de Nginx.

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

A continuación se muestra una captura de pantalla de las instrucciones que necesita para descomentar y modificar el caso de un archivo de configuración predeterminado original de Nginx.

12. Para probar la relación del servidor web Nginx con el administrador de procesos de PHP FastCGI, cree un archivo de configuración de prueba PHP info.php emitiendo el siguiente comando y verifique la configuración visitando este archivo de configuración usando la siguiente dirección: http:/IP_or domain/info.php .

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

También verifique si el servidor anuncia el protocolo HTTP/2.0 ubicando la línea [‘SERVER_PROTOCOL’] en el bloque de variables de PHP como se ilustra en la captura de pantalla a continuación.

13. Para instalar módulos PHP7.0 adicionales, utilice el comando apt search php7.0 para encontrar un módulo PHP e instalarlo.

Además, intente instalar los siguientes módulos PHP que pueden ser útiles en caso de que esté planeando instalar WordPress u otro CMS.

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

14. Para registrar los módulos adicionales de PHP, simplemente reinicie el daemon PHP-FPM emitiendo el siguiente comando.

$ sudo systemctl restart php7.0-fpm.service

Paso 4: Instalar la base de datos MariaDB

15. Finalmente, para completar nuestra pila LEMP necesitamos el componente de base de datos MariaDB para almacenar y administrar los datos del sitio web.

Instale el sistema de administración de base de datos MariaDB ejecutando el siguiente comando y reinicie el servicio PHP-FPM para usar el módulo MySQL para acceder a la base de datos.

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

16. Para asegurar la instalación de MariaDB, ejecute el script de seguridad proporcionado por el paquete binario desde los repositorios de Ubuntu, que le pedirá que establezca una contraseña de root, elimine usuarios anónimos, desactive el inicio de sesión de forma remota y elimine la base de datos de prueba.

Ejecute el script emitiendo el siguiente comando y responda todas las preguntas con yes . Utilice la captura de pantalla de abajo como una guía.

$ sudo mysql_secure_installation

17. Para configurar MariaDB de modo que los usuarios normales puedan acceder a la base de datos sin los privilegios del sistema sudo , vaya a la interfaz de la línea de comandos de MySQL con privilegios de raíz y ejecute los siguientes comandos en el intérprete de MySQL:

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

Finalmente, inicie sesión en la base de datos MariaDB y ejecute un comando arbitrario sin privilegios de root ejecutando el siguiente comando:

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

¡Que todos! Ahora tiene una pila LEMP configurada en Ubuntu 16.10 y Ubuntu 16.04 que le permite implementar aplicaciones web dinámicas complejas que pueden interactuar con bases de datos.