Instalar Linux, Nginx, MySQL, PHP (LEMP) en Debian 8
Introducción
El paquete de software de LEMP es un grupo de software que se puede utilizar para servir páginas web dinámicas y aplicaciones web. Este es un acrónimo que describe un sistema operativo Linux, con un servidor web Nginx. Los datos del backend se almacenan en la base de datos MySQL y el procesamiento dinámico es manejado por PHP.
En este tutorial te ayudara a instalar el paquete LEMP en un servidor Debian utilizando los paquetes proporcionados por el sistema operativo.
Prerrequisistos
Para completar este tutorial, necesitará:
- Un servidor Debian 8 con un usuario no root con privilegios de
sudo
. Puede configurar un usuario con estos privilegios en nuestra guía Configuración inicial del servidor con Debian 8 .
Paso 1: Instale el Servidor Web de Nginx
Con el fin de mostrar páginas web a nuestros visitantes del sitio, vamos a emplear Nginx, un servidor web moderno y eficiente.
Todo el software que usaremos para este procedimiento vendrá directamente de los repositorios de paquetes predeterminados de Debian. Esto significa que podemos usar la suite de administración de paquetes apt
para completar la instalación.
Puesto que es la primera vez que usamos apt
para esta sesión, debemos comenzar actualizando nuestro índice de paquetes local. Entonces podemos instalar el servidor:
- sudo apt-get update
- sudo apt-get install nginx
En Debian 8, Nginx está configurado para comenzar a ejecutarse después de la instalación.
Si tiene el Firewall ufw
ejecución, tendrá que permitir conexiones a Nginx. Debe activar el perfil más restrictivo que permita el tráfico que desee. Dado que aún no hemos configurado SSL para nuestro servidor, en esta guía sólo tendremos
que permitir el tráfico en el puerto 80
.
Puede habilitarlo escribiendo:
- sudo ufw allow 'Nginx HTTP'
Puede verificar el cambio escribiendo:
- sudo ufw status
Debe ver el tráfico HTTP permitido en la salida mostrada:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Ahora, compruebe si el servidor está funcionando accediendo al nombre de dominio de su servidor oa la dirección IP pública en su navegador web. Si no tiene un nombre de dominio apuntado en su servidor y no sabe la dirección IP pública de su servidor, puede encontrarlo escribiendo uno de los siguientes en su terminal:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Esto imprimirá algunas direcciones IP. Puede probar cada uno de ellos a su vez en su navegador web.
Como alternativa, puede comprobar qué dirección IP es accesible según se ve desde otras ubicaciones en Internet:
- curl -4 icanhazip.com
Escriba una de las direcciones que recibe en su navegador web. Debería llevarlo a la página de destino predeterminada de Nginx:
http://server_domain_or_IP
Si ve la página anterior, ha instalado Nginx correctamente.
Paso 2: Instalar MySQL para Administrar los Datos del Sitio
Ahora que tenemos un servidor web, necesitamos instalar MySQL, un sistema de gestión de bases de datos, para almacenar y gestionar los datos de nuestro sitio.
Puede instalarlo fácilmente escribiendo:
- sudo apt-get install mysql-server
Se le pedirá que proporcione una contraseña root (administrativa) para usarla dentro del sistema MySQL, y deberá confirmar esa contraseña.
El software de base de datos MySQL ya está instalado, pero su configuración aún no está completa.
Para asegurar la instalación, podemos ejecutar un Script de seguridad sencillo que nos preguntará si queremos modificar algunos valores predeterminados inseguros. Comience el script escribiendo:
- sudo mysql_secure_installation
Se le pedirá que introduzca la contraseña que estableció para la cuenta root de MySQL. A continuación, se le preguntará si desea cambiar esa contraseña. Si está satisfecho con su contraseña actual, ingrese N
para "no" en
el indicador:
Using existing password for root.
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] n
... skipping.
Para el resto de las preguntas que el Script pide, debe presionar "Y"
, seguido de la tecla ENTER
en cada solicitud. Esto eliminará algunos usuarios anónimos y la base de datos de prueba, inhabilitará los inicios de sesión de
root remotos y cargará estas nuevas reglas para que MySQL respete inmediatamente los cambios que haya realizado.
En este punto, su sistema de base de datos está ahora configurado y protegido. Vamos a configurar PHP.
Paso 3: Instalar PHP para Procesamiento
Ahora tenemos Nginx instalado para servir a nuestras páginas y MySQL instalado para almacenar y administrar nuestros datos. Sin embargo, todavía no tenemos nada que pueda generar contenido dinámico. Ahí es donde entra PHP.
Dado que Nginx no contiene procesamiento PHP nativo como otros servidores web, tendremos que instalar fpm
, que significa "fastCGI process manager". Le diremos a Nginx que pase las solicitudes de PHP a este software para su procesamiento.
También instalaremos un paquete auxiliar adicional que permitirá a PHP comunicarse con nuestro backend de base de datos MySQL. La instalación incorporará los archivos de núcleo de PHP necesarios para que funcione.
Estos paquetes no están disponibles en los repositorios predeterminados debido a los problemas de licencia, por lo que tendremos que modificar las fuentes del repositorio para extraerlos.
Abra /etc/apt/sources.list
en su editor de texto:
- sudo nano /etc/apt/sources.list
Luego, para cada fuente, agregue los contrib
y non-free
a cada fuente. Su archivo debe tener el siguiente aspecto después de realizar los cambios:
...
deb http://mirrors.digitalocean.com/debian jessie main contrib non-free
deb-src http://mirrors.digitalocean.com/debian jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
# jessie-updates, previously known as 'volatile'
deb http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free
deb-src http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free
Guarde y salga del archivo. A continuación, actualice sus fuentes:
- sudo apt-get update
A continuación, instale los módulos php5-fpm
y php5-mysql
:
- sudo apt-get install php5-fpm php5-mysql
Ahora tenemos nuestros componentes de PHP instalados, pero necesitamos realizar un ligero cambio de configuración para hacer nuestra configuración más segura.
Abra el archivo de configuración php-fpm
principal con privilegios de root:
- sudo nano /etc/php5/fpm/php.ini
Busque en el archivo el parámetro que establece cgi.fix_pathinfo
. Esto se comentará con un punto y coma (;) y se establecerá en "1" de forma predeterminada.
Este es un entorno extremadamente inseguro porque le dice a PHP que intente ejecutar el archivo más cercano que pueda encontrar si no se puede encontrar el archivo PHP solicitado. Esto básicamente permitiría a los usuarios elaborar solicitudes de PHP de una manera que les permitiera ejecutar scripts que no se les debería permitir ejecutar.
Cambiamos estas dos condiciones descomentando la línea y estableciéndola en "0" como esto:
cgi.fix_pathinfo=0
Guarde y cierre el archivo cuando haya terminado.
Ahora, solo necesitamos reiniciar nuestro procesador PHP escribiendo:
- sudo systemctl restart php5-fpm
Esto implementará el cambio que hicimos.
Paso 4: Configure Nginx para Usar el Procesador PHP
Ahora, tenemos todos los componentes necesarios instalados. El único cambio de configuración que todavía necesitamos es decirle a Nginx que use nuestro procesador PHP para contenido dinámico.
Hacemos esto en el nivel del bloque del servidor (los bloques del servidor son similares a los anfitriones virtuales de Apache). Abra el archivo de configuración del bloque de servidor Nginx predeterminado escribiendo:
- sudo nano /etc/nginx/sites-available/default
Actualmente, con los comentarios eliminados, el archivo de bloque de servidor predeterminado de Nginx tiene este aspecto:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Necesitamos realizar algunos cambios en este archivo para nuestro sitio.
- En primer lugar, necesitamos agregar
index.php
como el primer valor de nuestra directiva deindex
para que los archivos denominadosindex.php
se sirvan, si están disponibles, cuando se solicita un directorio. - Podemos modificar la directiva
server_name
para apuntar al nombre de dominio de nuestro servidor oa la dirección IP pública. - Para el procesamiento real de PHP, solo necesitamos descomentar un segmento del archivo que maneja las solicitudes de PHP. Este será el bloque de
location ~\.php$
, el fragmentofastcgi-php.conf
incluido y el socket asociado aphp-fpm
. - También descomentaremos el bloque de ubicación que trata con archivos
.htaccess
. Nginx no procesa estos archivos. Si alguno de estos archivos sucede para encontrar su camino en la root del documento, no deben ser servidos a los visitantes.
Los cambios que necesitas hacer están en rojo en el siguiente texto:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name your_server_ip;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Cuando haya realizado los cambios anteriores, puede guardar y cerrar el archivo.
Pruebe su archivo de configuración de errores de sintaxis escribiendo:
- sudo nginx -t
Si se informa de algún error, vuelva a revisar su archivo antes de continuar.
Cuando esté listo, vuelva a cargar Nginx para realizar los cambios necesarios:
- sudo systemctl reload nginx
Paso 5: Crear un archivo PHP para Probar la Configuración
Su paquete de LEMP debe estar completamente configurado. Podemos probarlo para validar que Nginx puede entregar correctamente archivos .php
a nuestro procesador PHP.
Podemos hacerlo creando un archivo PHP de prueba en nuestra root del documento. Abra un nuevo archivo llamado info.php
dentro de la root del documento en el editor de texto:
- sudo nano /var/www/html/info.php
Escriba o pegue las siguientes líneas en el nuevo archivo. Este es un código PHP válido que devolverá información sobre nuestro servidor:
<?php
phpinfo();
?>
Cuando haya finalizado, guarde y cierre el archivo.
Ahora, puede visitar esta página en su navegador de Internet visitando el nombre de dominio de su servidor o la dirección IP pública seguida por /info.php
:
http://server_domain_or_IP/info.php
Usted debe ver una página web que ha sido generada por PHP con información sobre su servidor:
Si ve una página similar a esta, ha configurado el procesamiento de PHP con Nginx correctamente.
Después de verificar que Nginx procesa la página correctamente, lo mejor es quitar el archivo que creó, ya que de hecho puede dar a los usuarios no autorizados algunas sugerencias sobre su configuración que pueden ayudarles a intentar entrar.
Por ahora, elimine el archivo escribiendo:
- sudo rm /var/www/html/info.php
Siempre puede regenerar este archivo si lo necesita más tarde.
Conclusión
Ahora debería tener un paquete LEMP configurado en su servidor Debian. A continuación podrá trabajar en páginas web dinámicas.
Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian