Cómo añadir un servicio al entorno local
Guía para desarrolladores: variables en el secret, servicio en Docker Compose y publicación HTTPS vía Nginx o Caddy (el proxy/gateway — no confundir con n8n ni otros backends).
Resumen en 6 pasos
- Editar
~/devdocker/secrets/dev-enviroment.local.yaml(variables + ruta proxy). - Editar
~/devdocker/compose/docker-compose.yml(definición del servicio). - Opcional: crear
~/devdocker/pipelines/mi-servicio.Jenkinsfilepara deploy con Jenkins. bash scripts/devdocker.sh sync— copia compose a/home/usrdocker/composey regenera Nginx/Caddy.bash scripts/devdocker.sh secret— sube el secret a Jenkins.bash scripts/devdocker.sh registerydeploydel job proxy + tu servicio.
/home/usrdocker/compose/docker-compose.yml en el host:
devdocker sync sobrescribe desde ~/devdocker/compose/. El origen es siempre el repo local.
1. Secret — dev-enviroment.local.yaml
Archivo local (no commitear). Plantilla: secrets/dev-enviroment.example.yaml.
cp ~/devdocker/secrets/dev-enviroment.example.yaml \ ~/devdocker/secrets/dev-enviroment.local.yaml
Variables de tu servicio
Añade un bloque con prefijo claro. Jenkins las lee en el pipeline y Compose las expande con ${VAR}.
# --- Mi API (job mi-api) --- MI_API_IMAGE: "mi-api:dev" MI_API_APP_PORT: "3000" MI_API_PUBLIC_HOST: "localhost"
Jenkinsfile típico:
env.MI_API_IMAGE = "${yaml.MI_API_IMAGE ?: 'mi-api:dev'}"
env.MI_API_APP_PORT = "${yaml.MI_API_APP_PORT ?: '3000'}"
Rutas del proxy (Nginx / Caddy)
El gateway es el job proxy (Nginx) o proxy-caddy (Caddy). Las rutas se definen en PROXY_ROUTES:
PROXY_GATEWAY_DOMAIN: "localhost"
PROXY_ENGINE: "nginx" # o caddy
PROXY_ROUTES:
- subdomain: n8n
upstream: n8n:5678
enabled: true
- subdomain: mi-api
upstream: mi_api:3000
enabled: true
| Campo | Significado |
|---|---|
subdomain | Host público: mi-api.localhost (con dominio base localhost) |
upstream | nombre_servicio:puerto_interno en la red Docker (no el puerto publicado en el host) |
enabled | false para desactivar sin borrar la entrada |
devdocker sync ejecuta scripts/render-proxy-conf.py y escribe
/home/usrdocker/compose/proxy/nginx/conf.d/default.conf y el Caddyfile.
No edites esos archivos a mano salvo depuración puntual.
2. Compose — compose/docker-compose.yml
Añade el servicio en ~/devdocker/compose/docker-compose.yml (plantilla del proyecto).
mi-api:
image: ${MI_API_IMAGE:-mi-api:dev}
container_name: mi_api
restart: unless-stopped
ports:
- "${MI_API_APP_PORT:-3000}:3000"
environment:
APP_ENV: develop
networks:
- shared_network
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:3000/health"]
interval: 20s
timeout: 5s
retries: 5
| Regla | Por qué |
|---|---|
Red shared_network | Misma red que el proxy y el resto de servicios |
container_name estable | Facilita logs y referencias en upstream |
Upstream = mi_api:3000 | Nombre del servicio compose + puerto interno del contenedor |
| Puerto host opcional | Para acceso directo localhost:3000; el proxy usa la red interna |
Servicios sin HTTP (Oracle :1521, Postgres, etc.) no van en PROXY_ROUTES: se exponen por puerto TCP en compose.
3. Proxy Nginx / Caddy — qué se genera
Con PROXY_GATEWAY_DOMAIN: localhost y la ruta anterior:
- URL:
https://mi-api.localhost/ - Health del proxy:
https://localhost/nginx-health(Nginx) o/proxy-health(Caddy) - Certificados:
/home/usrdocker/compose/proxy/certs/(localhost.crtpor defecto)
4. Pipeline Jenkins (recomendado)
Copia un job existente, p. ej. pipelines/portainer.Jenkinsfile → pipelines/mi-api.Jenkinsfile.
bash scripts/devdocker.sh register bash scripts/devdocker.sh deploy mi-api bash scripts/devdocker.sh deploy proxy # o proxy-caddy — aplica rutas nuevas
Sin pipeline: tras sync, en el host:
cd /home/usrdocker/compose docker compose up -d mi-api docker compose up -d --force-recreate nginx-proxy
5. Comandos de verificación
cd ~/devdocker bash scripts/devdocker.sh sync bash scripts/devdocker.sh secret bash scripts/devdocker.sh deploy proxy bash scripts/devdocker.sh verify curl -sk https://mi-api.localhost/health docker ps
Ejemplo real: Oracle DB (sin proxy HTTP)
| Capa | Qué hacer |
|---|---|
| Secret | ORACLE_DB_ENABLED: "true", ORACLE_DB_PASSWORD, … |
| Compose | Servicio db-oracle (ya en plantilla) |
| Proxy | No aplica (puerto 1521 TCP) |
| Deploy | bash scripts/devdocker.sh deploy db-oracle |
Checklist rápido
| ✓ | Comprobación |
|---|---|
| ☐ | Variables en dev-enviroment.local.yaml |
| ☐ | Servicio en compose/docker-compose.yml + red shared_network |
| ☐ | Entrada en PROXY_ROUTES si es HTTP/HTTPS |
| ☐ | sync + secret + deploy |
| ☐ | URL https://<subdominio>.localhost/ responde |
Actualizar plantillas del proyecto: bash scripts/devdocker.sh update (baja el último devdocker.tar.gz).
Para apps de producto (ControlParking, etc.) ver Apps.