Búsqueda de sitios web

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 le guiará sobre cómo instalar una pila LEMP con soporte MariaDB 10, PHP 7 y HTTP 2.0 para Nginx. en las ediciones de servidor/escritorio Ubuntu 16.10 y Ubuntu 16.04.

Requisitos

  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 de 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 netstat y systemctl para confirmar si Nginx está iniciado y se vincula 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 construye 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 gran mejora en la velocidad de carga de páginas web SSL.

Para habilitar el protocolo en Nginx en Ubuntu 16.04, primero navegue hasta 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, usando 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 SSL.

Además, la última parte del extracto incluido en la directiva del servidor se utiliza para redirigir todo el tráfico que no sea 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 (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 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 seguro, que se modificó en el archivo de configuración anterior en la línea de instrucciones 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 utilizar con el intérprete del 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, ejecute 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 correctamente en su máquina, inicie y verifique el demonio php7.0-fpm emitiendo lo siguiente dominio:

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 servir contenido dinámico.

El bloque del servidor que permite a Nginx usar el intérprete 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 en 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 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['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, utilice el comando apt search php7.0 para buscar un módulo PHP e instalarlo.

Además, intente instalar los siguientes módulos PHP que pueden resultar útiles en caso de que planee 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 bases 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 proteger la instalación de MariaDB, ejecute el script de seguridad proporcionado por el paquete binario de los repositorios de Ubuntu que le pedirá que establezca una contraseña de root, elimine los usuarios anónimos, deshabilite el inicio de sesión de root 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 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 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.