version: '3.8' # Production deployment with Nginx reverse proxy and SSL support services: geoguessr-mcp: # Option 1: Build locally build: context: . dockerfile: Dockerfile # Option 2: Use pre-built image from Docker Hub (recommended for VPS) # Uncomment the line below and comment out the build section above # image: ${DOCKER_USERNAME:-yourusername}/geoguessr-mcp:${IMAGE_TAG:-latest} container_name: geoguessr-mcp-server restart: unless-stopped expose: - "8000" environment: - GEOGUESSR_NCFA_COOKIE=${GEOGUESSR_NCFA_COOKIE:-} - MCP_TRANSPORT=streamable-http - MCP_HOST=0.0.0.0 - MCP_PORT=8000 - MONITORING_ENABLED=true - MONITORING_INTERVAL_HOURS=24 - SCHEMA_CACHE_DIR=/app/data/schemas - LOG_LEVEL=INFO volumes: - geoguessr-schemas:/app/data/schemas healthcheck: test: [ "CMD", "curl", "-f", "http://localhost:8000/health" ] interval: 30s timeout: 10s retries: 3 start_period: 15s logging: driver: "json-file" options: max-size: "10m" max-file: "5" networks: - internal nginx: image: nginx:alpine container_name: geoguessr-mcp-nginx restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro - ./nginx/logs:/var/log/nginx depends_on: geoguessr-mcp: condition: service_healthy networks: - internal - external logging: driver: "json-file" options: max-size: "5m" max-file: "3" volumes: geoguessr-schemas: name: geoguessr-mcp-schemas-prod networks: internal: name: geoguessr-internal internal: true external: name: geoguessr-external