Cómo instalar Nginx, MariaDB 10, PHP 7 (LEMP Stack) 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 y páginas web dinámicas.

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

  1. Instalación de Ubuntu 16.04 Server Edition [las instrucciones también funcionan en Ubuntu 16.10]

Paso 1: Instale 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 comando apt.

$ sudo apt-get install nginx

2. A continuación, ejecute los comandos 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: Habilite el protocolo Nginx HTTP/2.0

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 en conjunto con SSL y promete una gran mejora en la velocidad de 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, cree 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 usa para redirigir todo el tráfico que no es SSL al host predeterminado SSL/TLS. Además, reemplace la directiva server_name para que coincida con su propia dirección IP o registro DNS (FQDN preferiblemente).

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

Complete 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 DNS FQDN 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. Además, cree un cifrado DH fuerte, que se cambió en el archivo de configuración anterior en la línea de instrucción 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á escrito correctamente y puede ser aplicado por el servidor web Nginx y reinicie el demonio para reflejar los cambios ejecutando los siguientes comandos.

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

8. Para probar si Nginx usa el protocolo HTTP/2.0, emita el siguiente comando. La presencia del protocolo anunciado h2 confirma que Nginx se ha configurado correctamente para utilizar el protocolo HTTP/2.0. Todos los navegadores modernos y actualizados deberían admitir este protocolo de forma predeterminada.

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

Paso 3: Instale el intérprete de PHP 7

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

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

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

10. Una vez que el intérprete PHP7.0 se haya instalado con éxito en su máquina, inicie y verifique el demonio php7.0-fpm emitiendo el siguiente comando:

$ 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 servidor de contenido dinámico.

El bloque de servidor que permite a Nginx usar el intérprete de PHP se presenta en el siguiente extracto, 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 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 utilizando la siguiente dirección: http:// IP_or dominio/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 localizando la línea $_SERVER [‘SERVER_PROTOCOL’] en el bloque de Variables PHP como se ilustra en la siguiente captura de pantalla.

13. Para instalar módulos PHP7.0 adicionales, use 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 resultar ú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 demonio PHP-FPM emitiendo el siguiente comando.

$ sudo systemctl restart php7.0-fpm.service

Paso 4: Instale 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 provisto por el paquete binario desde los repositorios de Ubuntu que le pedirá establecer una contraseña de root, eliminar usuarios anónimos, deshabilitar el inicio de sesión de root de forma remota y eliminar la base de datos de prueba.

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

$ sudo mysql_secure_installation

17. Para configurar MariaDB para que los usuarios normales puedan acceder a la base de datos sin privilegios de sudo del sistema, vaya a la interfaz de línea de comandos de MySQL con privilegios de root 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 el servidor Ubuntu 16.10 y Ubuntu 16.04 que le permite implementar aplicaciones web dinámicas complejas que pueden interactuar con bases de datos.