Crear un Docker Compose con PHP + Nginx + MySQL (MariaDB) + Nginx Proxy Manager (para certificados SSL https)

Tiempo de lectura: 3 minutos

En este tutorial, te mostraré cómo crear un archivo docker-compose.yml para configurar un entorno de desarrollo local completo con PHP, NGINX, MariaDB, Nginx Proxy Manager para SSL y PhpMyAdmin.

Comenzando

Lo primero que debemos hacer es crear un directorio en nuestra máquina y crear un archivo docker-compose.yml dentro de él. Para ello, puedes utilizar tu editor de texto favorito. En este tutorial, usaremos nano como ejemplo:

mkdir my-app
cd my-app
nano docker-compose.yml

Configurando el archivo docker-compose.yml

Una vez dentro del archivo docker-compose.yml, comenzamos configurando nuestra red:

version: '3.9'

networks:
  app-network:
    driver: bridge

En este caso, estamos utilizando la versión 3.9 de Docker Compose. Luego, creamos una red con el nombre app-network. Esta red se utilizará para conectar todos los contenedores que crearemos más adelante.

A continuación, creamos los servicios que necesitamos. En este ejemplo, creamos cuatro servicios: php, nginx, db, y nginx-proxy-manager.

services:

  php:
    image: php:7.4-cli
    networks:
      - app-network

  nginx:
    image: nginx
    #ports:
      #- "80:80"
      #- "443:443"
    depends_on:
      - php
    volumes:
      - ./webdata:/usr/share/nginx/html
    networks:
      - app-network

  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: example
      MYSQL_USER: example
      MYSQL_PASSWORD: example
    networks:
      - app-network

  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - app-network

PHP

El servicio php se encarga de ejecutar nuestro código PHP. En este ejemplo, usamos una imagen personalizada que creamos anteriormente y la especificamos en la clave build. Además, especificamos la red a la que debe conectarse el servicio.

NGINX

El servicio nginx se encarga de ejecutar el servidor web NGINX y de manejar las solicitudes HTTP y HTTPS. También especificamos los puertos 80 y 443 para que el servicio sea accesible desde el host. Además, usamos la clave depends_on para asegurarnos de que el servicio php se inicie antes de que se inicie el servicio nginx. Esto es necesario porque el servidor web NGINX necesita el módulo php-fpm para procesar las solicitudes PHP.

MariaDB

El servicio db se encarga de ejecutar el servidor de base de datos MariaDB. En este ejemplo, estamos utilizando la imagen oficial de MariaDB. También especificamos las variables de entorno necesarias para crear una base de datos y un usuario de prueba.

Nginx Proxy Manager

El servicio nginx-proxy-manager se encarga de manejar los certificados SSL para nuestro sitio web y redirigir el tráfico HTTPS a nuestro servidor NGINX. Utilizamos la imagen oficial de Nginx Proxy Manager y especificamos los puertos 81, `

443 y 81 para que el servicio sea accesible desde el host. Además, especificamos un volumen para que la configuración de Nginx Proxy Manager se almacene en nuestra máquina local.

Ejecutando el archivo docker-compose.yml

Una vez que hayamos terminado de configurar nuestro archivo docker-compose.yml, podemos iniciar nuestros servicios con el siguiente comando:

docker-compose up -d

Este comando inicia los servicios definidos en nuestro archivo docker-compose.yml en modo detach (en segundo plano). Después de ejecutar este comando, podemos ver los contenedores que se han creado con el siguiente comando:

docker ps

Accediendo a nuestros servicios

Después de ejecutar el comando docker-compose up -d, podemos acceder a nuestros servicios de la siguiente manera:

Servidor web

Podemos acceder a nuestro servidor web NGINX ingresando la dirección http://localhost o https://localhost en nuestro navegador web.

Nginx Proxy Manager

Podemos acceder a Nginx Proxy Manager ingresando la dirección http://localhost:81 en nuestro navegador web. Aquí podemos configurar los certificados SSL y las redirecciones para nuestro sitio web.

Conclusión

En este tutorial, hemos creado un archivo docker-compose.yml para configurar un entorno de desarrollo local completo con PHP, NGINX, MariaDB, Nginx Proxy Manager para SSL y PhpMyAdmin. También hemos explicado cómo funciona cada servicio y cómo ejecutar nuestro archivo docker-compose.yml. Ahora puedes usar este archivo como plantilla para crear tus propios proyectos con Docker Compose.

Aquí te explico cómo configurar Nginx Proxy Manager por separado:
Certificados SSL (let’s encrypt) en Docker usando Nginx Proxy Manager

No te pierdas más tutoriales docker https://devcodelight.com/category/docker/

2 comentarios en «Crear un Docker Compose con PHP + Nginx + MySQL (MariaDB) + Nginx Proxy Manager (para certificados SSL https)»

Deja un comentario