Instalación de Nginx con Docker Compose en un VPS con Debian/Ubuntu
Historial de cambios
| Versión | Fecha | Comentario | Autor |
|---|---|---|---|
| 1.0 | 03/02/2025 | Primera edición. Marco Teórico y Cheat Sheet. | Jes |
Introducción
Docker Compose es una herramienta que simplifica la orquestación de contenedores, permitiendo definir y gestionar servicios multi-contenedor mediante un archivo YAML. Combinado con Nginx —un servidor web y proxy inverso eficiente—, ofrece una solución robusta para desplegar aplicaciones web de forma reproducible y aislada. Este artículo explica cómo implementar Nginx en un VPS con Debian/Ubuntu usando Docker Compose, incluyendo ejemplos prácticos y configuraciones avanzadas.
1. Marco Teórico
1. Docker Compose:
Permite definir servicios, redes y volúmenes en un archivo docker-compose.yml, facilitando la gestión de aplicaciones en contenedores. Sus ventajas incluyen:
- Reproducible: Configuración declarativa del entorno.
- Aislamiento: Servicios independientes con recursos dedicados.
- Portabilidad: Funciona en cualquier sistema con Docker instalado.
2. Imagen Oficial de Nginx:
Disponible en Docker Hub, incluye:
- Soporte para contenido estático (HTML, CSS, JS).
- Personalización de configuración mediante montajes de volúmenes.
- Sustitución de variables de entorno en tiempo de ejecución (vía
envsubst).
1.3 Casos de Uso Comunes:
- Hosting de contenido estático.
- Proxy inverso para aplicaciones.
- Balanceo de carga.
2. Estructura del Proyecto
3. Configuración Base (Solo una vez)
3.1. Crear red y volúmenes compartidos
3.2. nginx/docker-compose.yml
3.3. Iniciar Nginx + Certbot
4. Agregar un Proyecto (Ejemplo: Odoo)
4.1 Archivos de configuración
Archivo odoo.tudominio.com.conf.
Archivo docker-compose.odoo.yaml.
4.2 Generar Certificado SSL para Odoo
4.3 Iniciar Odoo
5. Comandos Clave para Mantenimiento
| Comando | Descripción |
|---|---|
docker exec nginx nginx -t |
Verificar sintaxis de Nginx |
docker exec nginx nginx -s reload |
Recargar configuración sin downtime |
docker compose -f nginx/docker-compose.yml run --rm certbot renew |
Renovar certificados manualmente |
docker volume ls |
Listar volúmenes |
docker network inspect nginx_net |
Verificar conectividad entre servicios |
6. Solución de Problemas Comunes
6.1. Error: network nginx_net declared as external, but not found
6.2. Certbot no genera certificados
Verifica que:
- El dominio apunta al servidor correcto.
- Los puertos 80 y 443 están abiertos en el firewall.
6.3. Odoo no se conecta a PostgreSQL
Ejecuta:
Si falla, revisa que ambos servicios estén en la misma red (nginx_net).
Nota Final: Esta estructura permite escalar a N proyectos sin modificar la configuración base de Nginx. Cada proyecto vive en su propia carpeta con su propio docker-compose.yml, conectándose a través de la red compartida.
7. Usos
- Desplegando Cockpit detras Nginx Reverse Proxy
- Implementación de Nextcloud para la Gestión de Notas y archivos.