Nginx, PHP-FPM y MySQL en Docker Compose: compose.yaml, healthcheck y .env
Hola, bienvenido. Docker Compose describe en un solo archivo, compose.yaml, todos los contenedores de un proyecto y cómo se relacionan. Para una aplicación PHP son 3 servicios: PHP-FPM con nuestra imagen, Nginx delante para recibir las peticiones HTTP y MySQL para los datos, cada uno con sus puertos, sus variables y su orden de arranque. Con docker compose up -d se levantan los 3 a la vez.
En esta lección vamos a escribir ese compose.yaml para tasks, con la configuración de Nginx, el healthcheck de MySQL y las credenciales en un .env, y al terminar vamos a ver por fin la aplicación respondiendo con sus tareas.
Por qué Docker Compose
Con lo que vimos en la lección de comandos básicos podríamos levantar el stack a mano: un docker network create para que los contenedores se vean, un docker run para MySQL con 4 variables de entorno, otro para PHP con las suyas y otro para Nginx con su puerto y su configuración. Funciona, pero es una ristra de comandos larga que tienes que repetir igual cada vez, en el mismo orden y sin equivocarte en ninguna opción.
Compose convierte esa ristra en un archivo. Cada contenedor es un servicio con su configuración, y el comando docker compose lee el archivo y se encarga de crear la red, construir las imágenes y arrancar los contenedores en el orden correcto. Compose sigue aceptando el nombre antiguo, docker-compose.yml, pero el preferido es compose.yaml, que es el que usa Laravel Sail.
Vamos a ir por partes. Primero PHP y Nginx, para ver que se hablan, y después MySQL. Empezamos por la configuración de Nginx, en docker/nginx/default.conf:
Nginx escucha en el puerto 80 y busca los archivos en /var/www/html/public. Cualquier ruta que no sea un archivo que exista acaba en index.php, y todo lo que termina en .php se lo pasa a PHP-FPM por FastCGI. Fíjate en fastcgi_pass app:9000: app es el nombre del servicio de PHP que vamos a definir en Compose, y 9000 el puerto en el que escucha PHP-FPM, como vimos en la lección anterior. La línea de SCRIPT_FILENAME le dice a PHP-FPM qué archivo ejecutar, y hay que ponerla a mano porque el fastcgi_params que trae la imagen de Nginx no la incluye.
- 02PHP y Nginx en el compose.yaml
- 03MySQL con su healthcheck
- 04Las credenciales en el .env
- 05Levantar el stack y cargar el esquema
- 06Connection refused o Access denied
¿Ya lo habías pedido o entras desde otro dispositivo? Escribe el mismo email: recuperas tu acceso y tu avance.
Al entrar desde el enlace te apuntamos a los avisos de cursos gratuitos. Te das de baja cuando quieras.
¿Ya tienes cuenta? Entra