Files
gureametsabilagun/docker-compose.yml
Josep Piguillem 68783ca0b7 MCP remoto: servidor Streamable HTTP como servicio del compose
- mcp/http.js: MCP por HTTP (sin estado). Cada petición lleva la contraseña de aplicación
  del propio usuario (Basic o Bearer); se valida contra WordPress (caché 5 min), exige
  permiso de edición y no se guarda. Límite por IP, /healthz, IP real reenviada a WordPress.
- Herramientas comunes en mcp/src/tools.js (local y remoto); en remoto las fotos van por
  URL o base64 (sin acceso a archivos del servidor).
- Dockerfile del MCP y servicio «mcp» en docker-compose.yml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 11:25:42 +02:00

107 lines
3.9 KiB
YAML

# Gure Ametsa Bi Lagun — WordPress para Dokploy (Docker Compose)
#
# En Dokploy: crea un servicio "Compose", apunta a este repositorio,
# define las variables de .env.example en la pestaña "Environment" y
# añade el dominio en "Domains" (servicio: wordpress, puerto: 80).
services:
wordpress:
build: .
image: gure-ametsa-wordpress:latest
restart: unless-stopped
init: true
depends_on:
db:
condition: service_healthy
expose:
- "80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: ${DB_NAME:-wordpress}
WORDPRESS_DB_USER: ${DB_USER:-wordpress}
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD:?Define DB_PASSWORD}
WORDPRESS_TABLE_PREFIX: ${DB_TABLE_PREFIX:-ga_}
WP_URL: ${WP_URL:?Define WP_URL (p. ej. https://gureametsabilagun.eus)}
WP_TITLE: ${WP_TITLE:-Gure Ametsa Bi Lagun}
WP_ADMIN_USER: ${WP_ADMIN_USER:-admin}
WP_ADMIN_PASSWORD: ${WP_ADMIN_PASSWORD:?Define WP_ADMIN_PASSWORD}
WP_ADMIN_EMAIL: ${WP_ADMIN_EMAIL:?Define WP_ADMIN_EMAIL}
GA_CONTACT_EMAIL: ${GA_CONTACT_EMAIL:-hola@gureametsabilagun.org}
SEED_DEMO_ANIMALS: ${SEED_DEMO_ANIMALS:-false}
API_DOCS_PUBLIC: ${API_DOCS_PUBLIC:-false}
SMTP_HOST: ${SMTP_HOST:-}
SMTP_PORT: ${SMTP_PORT:-587}
SMTP_ENCRYPTION: ${SMTP_ENCRYPTION:-tls}
SMTP_USER: ${SMTP_USER:-}
SMTP_PASSWORD: ${SMTP_PASSWORD:-}
SMTP_FROM: ${SMTP_FROM:-}
WORDPRESS_CONFIG_EXTRA: |
if ( getenv('WP_URL') ) {
define( 'WP_HOME', rtrim( getenv('WP_URL'), '/' ) );
define( 'WP_SITEURL', rtrim( getenv('WP_URL'), '/' ) );
}
define( 'FS_METHOD', 'direct' );
define( 'DISALLOW_FILE_EDIT', true );
define( 'WP_POST_REVISIONS', 10 );
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
// Correo por SMTP (plugin WP Mail SMTP) si se definen las variables SMTP_*
if ( getenv('SMTP_HOST') ) {
define( 'WPMS_ON', true );
define( 'WPMS_MAILER', 'smtp' );
define( 'WPMS_SMTP_HOST', getenv('SMTP_HOST') );
define( 'WPMS_SMTP_PORT', (int) ( getenv('SMTP_PORT') ?: 587 ) );
define( 'WPMS_SSL', getenv('SMTP_ENCRYPTION') === 'none' ? '' : ( getenv('SMTP_ENCRYPTION') ?: 'tls' ) );
define( 'WPMS_SMTP_AUTH', true );
define( 'WPMS_SMTP_AUTOTLS', true );
define( 'WPMS_SMTP_USER', getenv('SMTP_USER') );
define( 'WPMS_SMTP_PASS', getenv('SMTP_PASSWORD') );
define( 'WPMS_MAIL_FROM', getenv('SMTP_FROM') ?: getenv('SMTP_USER') );
define( 'WPMS_MAIL_FROM_FORCE', true );
define( 'WPMS_MAIL_FROM_NAME', 'Gure Ametsa Bi Lagun' );
define( 'WPMS_MAIL_FROM_NAME_FORCE', true );
}
volumes:
- wp_data:/var/www/html
healthcheck:
test: ["CMD-SHELL", "curl -fsS -o /dev/null -H 'X-Forwarded-Proto: https' http://localhost/wp-includes/images/blank.gif || exit 1"]
interval: 30s
timeout: 5s
retries: 5
start_period: 60s
# Servidor MCP remoto para el asistente del equipo (ver mcp/README.md).
# En Dokploy: añade un dominio (p. ej. mcp.tudominio) → servicio mcp, puerto 3000.
mcp:
build: ./mcp
image: gure-ametsa-mcp:latest
restart: unless-stopped
depends_on:
- wordpress
expose:
- "3000"
environment:
BILAGUN_URL: http://wordpress
BILAGUN_PUBLIC_URL: ${WP_URL}
RATE_LIMIT: ${MCP_RATE_LIMIT:-120}
db:
image: mariadb:11.4
restart: unless-stopped
environment:
MARIADB_DATABASE: ${DB_NAME:-wordpress}
MARIADB_USER: ${DB_USER:-wordpress}
MARIADB_PASSWORD: ${DB_PASSWORD:?Define DB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:?Define DB_ROOT_PASSWORD}
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
volumes:
wp_data:
db_data: