Agregar servidor MCP Docker al stack
All checks were successful
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Successful in 10s

- Agregado servicio mcp-docker con imagen docker:cli
- Configurado MCP Gateway en modo streaming (puerto 8080)
- Expuesto a través de Traefik sin autenticación Authentik
- Montado socket de Docker en modo solo lectura
- Agregada variable MCP_DOMAIN al .env.example
- Actualizado README con documentación del servicio
This commit is contained in:
2025-10-13 18:48:02 -06:00
parent c54e18a878
commit aa5ac70c7c
3 changed files with 47 additions and 0 deletions

View File

@@ -21,6 +21,9 @@ APP_NAME=mi-app
# Dominio donde se desplegará la aplicación # Dominio donde se desplegará la aplicación
APP_DOMAIN=miapp.ejemplo.com APP_DOMAIN=miapp.ejemplo.com
# Dominio para el servidor MCP Docker (sin autenticación)
MCP_DOMAIN=mcp.ejemplo.com
# =========================================== # ===========================================
# APPLICATION # APPLICATION
# =========================================== # ===========================================

View File

@@ -27,6 +27,21 @@ Este repositorio contiene la documentación del funcionamiento del sistema Nucle
- ✅ CI/CD con Gitea Actions - ✅ CI/CD con Gitea Actions
- ✅ Traefik para proxy reverso y SSL - ✅ Traefik para proxy reverso y SSL
- ✅ Claude Code hooks para monitoreo de Actions - ✅ Claude Code hooks para monitoreo de Actions
- ✅ MCP Server Docker para gestión de contenedores
## Servicios
### Aplicación Principal (`app`)
Aplicación Nuxt 4 con la documentación del sistema Nucleo, expuesta mediante Traefik con autenticación Authentik.
### MCP Docker Server (`mcp-docker`)
Servidor MCP oficial de Docker (`docker:cli`) que permite gestionar contenedores Docker mediante lenguaje natural. Este servicio:
- Usa el MCP Gateway en modo streaming (puerto 8080)
- Tiene acceso al socket de Docker del host (solo lectura)
- Se ejecuta en las redes `principal` y `traefik-network`
- **Expuesto públicamente a través de Traefik SIN autenticación Authentik**
- Accesible en el dominio configurado en `MCP_DOMAIN`
- Incluye soporte para WebSocket y streaming
## Desarrollo Local ## Desarrollo Local

View File

@@ -48,6 +48,35 @@ services:
- "traefik.http.middlewares.${APP_NAME}-cors.headers.accesscontrolmaxage=100" - "traefik.http.middlewares.${APP_NAME}-cors.headers.accesscontrolmaxage=100"
- "traefik.http.middlewares.${APP_NAME}-cors.headers.addvaryheader=true" - "traefik.http.middlewares.${APP_NAME}-cors.headers.addvaryheader=true"
mcp-docker:
image: docker:cli
container_name: ${APP_NAME}-mcp-docker
restart: unless-stopped
command: mcp gateway run --port 8080 --transport streaming
volumes:
# Montar el socket de Docker para acceso al daemon
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- principal
- traefik-network
labels:
# Traefik labels - Exposición sin autenticación
- "traefik.enable=true"
- "traefik.docker.network=traefik-network"
# Service
- "traefik.http.services.${APP_NAME}-mcp.loadbalancer.server.port=8080"
# Router sin autenticación
- "traefik.http.routers.${APP_NAME}-mcp.rule=Host(`${MCP_DOMAIN}`)"
- "traefik.http.routers.${APP_NAME}-mcp.entrypoints=websecure"
- "traefik.http.routers.${APP_NAME}-mcp.tls.certresolver=letsencrypt"
- "traefik.http.routers.${APP_NAME}-mcp.service=${APP_NAME}-mcp"
# Headers personalizados para WebSocket y streaming
- "traefik.http.middlewares.${APP_NAME}-mcp-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.routers.${APP_NAME}-mcp.middlewares=${APP_NAME}-mcp-headers"
networks: networks:
principal: principal:
external: true external: true