Agregar servidor MCP Docker al stack
- 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:
@@ -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
|
||||||
# ===========================================
|
# ===========================================
|
||||||
|
|||||||
15
README.md
15
README.md
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user