- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Docker y Docker Compose: despliegue moderno de aplicaciones con Wekan y GitLab detrás de Nginx
Introducción
En la administración de sistemas moderna, la virtualización ligera mediante contenedores se ha convertido en un estándar. En este contexto, Docker permite empaquetar aplicaciones junto con sus dependencias, garantizando portabilidad y consistencia entre entornos.
Para orquestar múltiples contenedores de forma sencilla, se utiliza Docker Compose, que permite definir toda la infraestructura en un único archivo YAML.
En esta práctica vamos a montar:
- Wekan (gestión de proyectos tipo Kanban)
- GitLab (repositorios Git y CI/CD)
- Nginx (proxy inverso)
- Todo ejecutado en contenedores
🧱 Arquitectura del laboratorio
La arquitectura será la siguiente:
- Nginx → punto de entrada (puerto 80/443)
- Wekan → aplicación Kanban
- GitLab → repositorios + CI/CD
- MongoDB → base de datos de Wekan
- PostgreSQL + Redis → backend de GitLab
📁 Estructura del proyecto
docker-lab/
│
├── docker-compose.yml
├── nginx/
│ └── default.conf
└── data/
⚙️ Paso 1: Instalación de Docker
En sistemas Linux:
sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker
sudo systemctl start docker
Verificar:
docker --version
docker compose version
🧩 Paso 2: docker-compose.yml
Creamos el archivo principal:
version: "3.8"
services:
nginx:
image: nginx:latest
container_name: nginx-proxy
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- wekan
- gitlab
wekan:
image: wekanteam/wekan
container_name: wekan
restart: always
environment:
- MONGO_URL=mongodb://mongo:27017/wekan
- ROOT_URL=http://localhost
depends_on:
- mongo
mongo:
image: mongo:6
container_name: mongo
restart: always
volumes:
- mongo_data:/data/db
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
hostname: gitlab.local
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost'
ports:
- "8080:80"
- "8443:443"
- "2222:22"
volumes:
- gitlab_config:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
volumes:
mongo_data:
gitlab_config:
gitlab_logs:
gitlab_data:
🌐 Paso 3: configuración de Nginx como proxy inverso
Archivo: nginx/default.conf
server {
listen 80;
server_name localhost;
location /wekan/ {
proxy_pass http://wekan:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /gitlab/ {
proxy_pass http://gitlab:80/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
🚀 Paso 4: levantar el entorno
Ejecutar:
docker compose up -d
Verificar contenedores:
docker ps
🌍 Acceso a servicios
Una vez iniciado:
- Wekan → http://localhost/wekan
- GitLab → http://localhost/gitlab
🧠 Cómo funciona esta arquitectura
🧩 Contenedores aislados
Cada servicio corre de forma independiente:
- Wekan no depende del sistema operativo
- GitLab tiene su propio stack interno
- MongoDB y PostgreSQL están encapsulados
🔁 Comunicación interna
Docker Compose crea una red interna donde:
-
wekanhabla conmongo -
gitlabgestiona sus servicios internos -
nginxactúa como punto de entrada
🌐 Nginx como reverse proxy
Nginx permite:
- Un único punto de acceso
- Redirección por rutas (/wekan, /gitlab)
- Posibilidad de añadir HTTPS
📊 Ventajas de esta solución
🚀 Portabilidad
Funciona igual en cualquier servidor con Docker.
🧱 Modularidad
Cada servicio puede actualizarse de forma independiente.
⚡ Despliegue rápido
Toda la infraestructura se levanta con un solo comando.
🔒 Aislamiento
Cada aplicación está contenida y aislada.
⚠️ Limitaciones
- GitLab consume muchos recursos (RAM alta recomendada)
- En producción se recomienda separar servicios
- HTTPS no está configurado en este ejemplo
- Requiere ajustes de DNS para entorno real
🛠️ Mejoras recomendadas
- Añadir SSL con Let’s Encrypt
- Separar bases de datos en hosts dedicados
- Usar Traefik en lugar de Nginx
- Implementar backups automáticos
- Añadir monitorización (Prometheus + Grafana)
🧾 Conclusión
El uso de Docker y Docker Compose permite construir entornos completos de desarrollo y producción de forma rápida, reproducible y escalable.
Esta práctica demuestra cómo montar un laboratorio funcional con:
- Wekan para gestión de tareas
- GitLab para repositorios y CI/CD
- Nginx como punto de entrada
Todo ello sin necesidad de instalaciones tradicionales complejas, sino mediante contenedores aislados y portables.
Es una arquitectura ideal para laboratorios, entornos DevOps y aprendizaje de infraestructura moderna.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios
Publicar un comentario