docker-compose.yml
Rama main · réplica de lectura del repositorio original.
# Local development / smoke-test of the production image
#
# Usage:
# docker compose up --build
# docker compose down -v
#
# App: http://localhost:8090
# PocketBase admin: http://localhost:8090/_/
# AI API: http://localhost:3001/api/health
services:
app:
build:
context: .
dockerfile: Dockerfile
args:
VITE_AI_API_URL: http://localhost:3001
VITE_VAPID_PUBLIC_KEY: ${VITE_VAPID_PUBLIC_KEY:-}
container_name: calistenia-app
restart: unless-stopped
ports:
- "8090:8090"
environment:
# PB hooks need these to call the AI API for push notifications
- AI_API_URL=http://ai-api:3001
- INTERNAL_API_KEY=${INTERNAL_API_KEY:-}
volumes:
- ./pb_data_local:/app/pb_data
ai-api:
build:
context: .
dockerfile: mcp-server/Dockerfile
container_name: calistenia-ai-api
restart: unless-stopped
ports:
- "3001:3001"
environment:
# At least one provider key is required
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
- GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY:-}
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
# PocketBase URL (internal Docker network)
- POCKETBASE_URL=http://app:8090
# Optional: set preferred provider and model overrides
- DEFAULT_AI_PROVIDER=${DEFAULT_AI_PROVIDER:-}
- DEFAULT_MODEL_FREE=${DEFAULT_MODEL_FREE:-}
- DEFAULT_MODEL_PRO=${DEFAULT_MODEL_PRO:-}
# Optional: rate limit tuning
- RATE_LIMIT_WINDOW_MS=${RATE_LIMIT_WINDOW_MS:-60000}
- RATE_LIMIT_MAX=${RATE_LIMIT_MAX:-10}
# MCP OAuth public origin — must be this server's public URL so OAuth
# discovery metadata (issuer / authorize / token / protected-resource)
# resolves for remote clients like Claude Desktop Connectors.
# Set the real value in Dokploy env vars (prod) or .env (local).
# Falls back to localhost for a bare `docker compose up`.
- SERVER_URL=${SERVER_URL:-http://localhost:3001}
# Push notifications (VAPID + internal auth)
- VITE_VAPID_PUBLIC_KEY=${VITE_VAPID_PUBLIC_KEY:-}
- VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY:-}
- INTERNAL_API_KEY=${INTERNAL_API_KEY:-}
depends_on:
- app