LINUX

Cómo configurar LEMP Stack en Docker

En este tutorial, configuraremos una pila LEMP dentro de una ventana acoplable. Podemos extraer y configurar fácilmente la imagen LEMP dentro de una ventana acoplable en un par de minutos. Pero para una mejor comprensión de la pila, configuraremos cada una de las imágenes NGINX, MySQL, PHP / PHPMyAdmin una por una. Una vez que comprenda la idea central de la pila LEMP en una ventana acoplable, puede intentar configurar la pila en una ventana acoplable como una sola imagen.

Para instalar / configurar LEMP en una ventana acoplable, primero debemos instalar la ventana acoplable y la ventana acoplable compose. Ejecute el siguiente comando para instalar estos dos.

root@demohost:~# apt-get install docker docker-compose

Iniciar el servicio de Docker

root@demohost:~# service docker start

Configuración de carpeta

Usaremos la siguiente estructura de carpetas para nuestra pila LEMP.

  1. Cree un directorio raíz con el nombre LEMP-Docker y un solo archivo docker-compose.yml dentro de él
  2. Para los registros de NGINX, cree un directorio con el nombre «registros» dentro de LEMP-Docker y cree dos archivos nginx-access.log y nginx-error.log dentro del directorio de registros.
  3. Para el archivo de configuración NGINX, cree un directorio con el nombre «sitios disponibles» dentro de LEMP-Docker y cree un archivo de configuración predeterminado.
  4. Por fin, para sus archivos PHP, cree un directorio con el nombre public_html dentro de LEMP-Docker. Colocaremos archivos PHP en este directorio en una etapa posterior.

Entonces, nuestra estructura de directorio se parece a la siguiente:

LEMP-Docker /
├── docker-compose.yml
├── registros
│ ├── nginx-access.log
│ └── nginx-error.log
├── public_html
│ └── index.php
└── sitios disponibles
└── predeterminado

Creemos rápidamente la estructura de directorios y los archivos anteriores.

root@demohost:~# cd ~
root@demohost:~# mkdir LEMP-Docker
root@demohost:~# cd LEMP-Docker/
root@demohost:~/LEMP-Docker# mkdir logs
root@demohost:~/LEMP-Docker# touch logs/nginx-access.log logs/nginx-error.log
root@demohost:~/LEMP-Docker# mkdir sites-available
root@demohost:~/LEMP-Docker# touch sites-available/default
root@demohost:~/LEMP-Docker# mkdir public_html
root@demohost:~/LEMP-Docker# touch docker-compose.yml

A continuación, editaremos la configuración predeterminada de NGINX «default» y agregaremos lo siguiente. En la directiva server_name, coloque la dirección IP de la ventana acoplable. Para encontrarlo use el comando $ ifconfig y busque la línea inet addr: en la fila docker *

root@demohost:~/LEMP-Docker# vi sites-available/default

server {
listen  80;
# this path MUST be exactly as docker-compose.fpm.volumes,
# even if it doesn't exists in this dock.
root /usr/share/nginx/html;
index index.html;
server_name 172.17.0.1;
location / {
try_files $uri /index.html$is_args$args;
}
}

Instalar NGINX

Para configurar el contenedor Nginx, agregaremos lo siguiente al archivo docker-compose.yml

root@demohost:~/LEMP-Docker# vi docker-compose.yml
nginx:
image: tutum/nginx
ports:
- "80:80"
volumes:
- ./sites-available/default:/etc/nginx/sites-available/default
- ./sites-available/default:/etc/nginx/sites-enabled/default

- ./logs/nginx-error.log:/var/log/nginx/error.log
- ./logs/nginx-access.log:/var/log/nginx/access.log

El docker-compose.yml anterior extraerá la imagen NGINX de tutum / nginx y el puerto proxy 80 del contenedor al puerto 80 del host de la ventana acoplable. Luego, montaremos el archivo de configuración NGINX predeterminado desde el directorio nginx / default a las carpetas disponibles y habilitadas para sitios del contenedor nginx. De manera similar, vincularemos los registros / *. Registros del host de la ventana acoplable a los registros dentro del contenedor.

Ahora, desde el CWD, ejecute el siguiente comando para extraer y crear el contenedor NGINX.

root@demohost:~/LEMP-Docker# docker-compose up -d
Pulling nginx (tutum/nginx:latest)...
latest: Pulling from tutum/nginx
faecf96fd5ab: Pull complete
995977506e98: Pull complete
-------------------------
-------------------------
Digest: sha256:69a727916ab40de88f66407fb0115e35b759d7c6088852d901208479bec47429
Status: Downloaded newer image for tutum/nginx:latest
-------------------------

Para comprobar que el contenedor NGINX está realmente creado, ejecute el siguiente comando.

root@demohost:~/LEMP-Docker# docker ps

Para crear un túnel en el contenedor NGINX y obtener un shell bash, use el siguiente comando.

root@demohost:~/LEMP-Docker# docker exec -i -t 75088fe8fe60 bash

Ahora encuentre los procesos NGINX

root@75088fe8fe60:/# ps -aux | grep NGINX

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.6  85892  6572 ?        Ss   07:13   0:00 nginx: master process /usr/sbin/nginx
www-data     6  0.0  0.3  86212  3428 ?        S    07:13   0:00 nginx: worker process
www-data     7  0.0  0.3  86212  3428 ?        S    07:13   0:00 nginx: worker process
www-data     8  0.0  0.3  86212  3428 ?        S    07:13   0:00 nginx: worker process
www-data     9  0.0  0.3  86212  3428 ?        S    07:13   0:00 nginx: worker process

Salir del shell bash del contenedor NGINX

root@75088fe8fe60:/#exit

Finalmente abra su navegador favorito, apúntelo a http: // . será recibido con la página de bienvenida de NGINX como se muestra a continuación.

Página de inicio de NGINX

Deténgase y retire el recipiente por el momento.

root@demohost:~/LEMP-Docker# docker stop 75088fe8fe60
root@demohost:~/LEMP-Docker# docker rm 75088fe8fe60

Instalar PHP / FPM

Para que PHP funcione con nginx, necesitamos PHP con el módulo FPM habilitado. Por lo tanto, editaremos docker-compose.yml y seleccionaremos la imagen php: fpm especificando puertos para FPM, que es 9000 y montaremos el directorio public_html del host de docker en el directorio / usr / share / nginx / html del contenedor PHP-FPM

phpfpm:
image: php:fpm
ports:
- "9000:9000"
volumes:
- ./public_html:/usr/share/nginx/html

Iniciaremos los contenedores en segundo plano y los dejaremos ejecutándose con el siguiente comando.

root@demohost:~/LEMP-Docker# docker-compose up -d

Pulling phpfpm (php:fpm)...
fpm: Pulling from library/php
75a822cd7888: Pull complete
e4d8a4e038be: Pull complete
-----------------------------
-----------------------------
Digest: sha256:01d1d6345bc30f206fb048c5f1afa882f17f54f275ffe7fd5a83524d8294bc79
Status: Downloaded newer image for php:fpm
-----------------------------

Verifique el contenedor en ejecución con el siguiente comando, php-fpm se está ejecutando en el puerto 9000 y está asignado al puerto 9000 del host de la ventana acoplable.

root@demohost:~/LEMP-Docker# docker ps -a

Cree un túnel en el contenedor PHP-FPM y para obtener un shell bash, use el siguiente comando.

root@demohost:~/LEMP-Docker# docker exec -i -t 841f20b8e7e3 bash

Verifique los procesos dentro del contenedor con el siguiente comando.

root@95dec1e1eb47:/var/www/html# ps -aux

Una vez que estemos seguros de que el contenedor PHP-FPM se está ejecutando, modificaremos el archivo de configuración NGINX predeterminado para que pueda procesar los archivos PHP. Agregue la siguiente sección en el archivo sites-available / default after location / {} sección.

location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass 172.17.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Entonces, nuestro archivo de configuración predeterminado de NGINX final se ve así:

Configuración predeterminada de NGINX

A continuación, cree un archivo index.php dentro de public_html y agregue lo siguiente y reinicie la ventana acoplable PHP-FPM.

root@demohost:~/public_html# vi index.php

<?php
echo phpinfo();
?>

Reinicie el contenedor php-fpm.

root@demohost:~/public_html# docker restart lempdocker_phpfpm_1

Apunte su navegador a http: // /index.php, se mostrará la página phpinfo

NGINX PHPINFO

Instalar MySQL / PhpMyAdmin

En el último paso, configuraremos el contenedor MySQL y PhpMyAdmin dentro del host de la ventana acoplable. Edite el archivo docker-compose.yml y agregue la siguiente sección

mysql:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: password

phpmyadmin:
image: corbinu/docker-phpmyadmin
restart: always
links:
- mysql:mysql
ports:
- 8183:80
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: password

En la sección mysql, buscaremos la imagen mariadb y pasaremos una variable de entorno llamada MYSQL_ROOT_PASSWORD a las imágenes. La imagen tomará este valor como contraseña cuando construya el contenedor MySQL. En la sección phpmyadmin, obtenga la imagen de corbinu / docker-phpmyadmin y vincule este contenedor con la base de datos mysql del contenedor mysql. El puerto no 8183 del host de la ventana acoplable será un proxy del puerto 80 del contenedor (NGINX). Establezca el entorno del nombre de usuario de phpmyadmin como root y la contraseña como ‘contraseña’.

Inicie los contenedores en segundo plano y déjelos en ejecución con el siguiente comando. No olvide detener los contenedores en ejecución antes de ejecutar el siguiente comando.

root@demohost:~/LEMP-Docker# docker-compose up -d
-------------------------
Pulling mysql (mariadb:latest)...
latest: Pulling from library/mariadb
75a822cd7888: Already exists
b8d5846e536a: Pull complete
------------------------
------------------------

Digest: sha256:0ce9f13b5c5d235397252570acd0286a0a03472a22b7f0384fce09e65c680d13
Status: Downloaded newer image for mariadb:latest
------------------------

Pulling phpmyadmin (corbinu/docker-phpmyadmin:latest)...
latest: Pulling from corbinu/docker-phpmyadmin
04c460fac791: Pull complete
0a0916b29f3e: Pull complete
b25f4e7a7766: Pull complete
-----------------------------
-----------------------------
44f124587a1d: Pull complete
Digest: sha256:8ba64f73a8f28f62c00c9515171361b9d5f7a0c6f6fa0aa4418839f9974d098d
Status: Downloaded newer image for corbinu/docker-phpmyadmin:latest
-----------------------------

Ahora enumere todos los contenedores en ejecución con el siguiente comando de Docker.

root@demohost:~/LEMP-Docker# docker ps -a

Cree un túnel en el contenedor MySQL y obtenga el shell mysql pasando el nombre de usuario y la contraseña

root@demohost:~/LEMP-Docker# docker exec -i -t f63eadc48545 mysql -u root -ppassword
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 3
Server version: 10.1.20-MariaDB-1~jessie mariadb.org binary distribution
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]>
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

Para obtener la página de inicio de sesión de phpmyadmin, dirija su navegador a http: // : 8183 / Escriba el nombre de usuario como root y la contraseña como contraseña, será redirigido a la página de inicio de phpmyadmin.

LEMP

Intentemos ahora comprender rápidamente el flujo dentro de la pila. La dirección IP de NGINX se establece en el host de la ventana acoplable y la configuración predeterminada establece la raíz web en / usr / share / nginx / html. Aparte de eso, la configuración también monta volúmenes desde el host de la ventana acoplable que incluye archivos de sites_available y el directorio de registro en el directorio / etc / nginx / sites-available y / var / log / nginx del sistema de archivos del contenedor en la sección volume: de docker-compose.yml. (Sección NGINX). El docker.compose.yml también configura NGINX para comprender PHP a través del módulo PHP-FPM y se define la ruta base para los archivos fuente PHP, que es el directorio public_html (sección PHP-FPM). MySQL usará su puerto predeterminado 3306 y estará vinculado al servidor NGINX para que la aplicación PHP sepa dónde establecer una conexión a la base de datos. Se puede acceder a phpmyadmin a través del puerto n. ° 8083 del host de la ventana acoplable que está asignado al puerto n. ° 80 del contenedor. El enlace entre MySQL y phpmyadmin se realiza en la sección de enlaces especificando el nombre de la base de datos como mysql (mysql:mysql).

Hemos instalado pila LEMP como contenedor uno a uno. El proceso lleva un poco de tiempo. Una vez que esté seguro de la configuración que acabamos de terminar, puede instalar Docker the stack desde una sola imagen. Revisa dockerhub para explorar todas las imágenes. Para hacer eso, use los siguientes comandos desde la terminal.

root@demohost:~ docker search LEMP

root@demohost:~ docker pull <IMAGE-Name>

y luego use el comando docker run pasando todos los parámetros / configuraciones que necesita, su pila LEMP dentro de un contenedor estará lista en unos minutos.

Conclusión

Ahora que hemos aprendido cómo contener NGINX, MySQL, PHP y sabemos cómo vincularlos y montar volúmenes desde el sistema de archivos del host al sistema de archivos del contenedor, ahora puede agregar un CMS de su elección como Joomla, Drupal o WordPress en el contenedor para ampliar la funcionalidad de la pila ampliando docker-compose.yml.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar