services: api: build: dockerfile: "images/api.Dockerfile" context: "." image: "mcbench/api" ports: - "8000:8000" environment: CELERY_BROKER_URL: "redis://redis:6379/0" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" POSTGRES_DB: "mc-bench" POSTGRES_USER: "mc-bench-admin" POSTGRES_PASSWORD: "mc-bench" POSTGRES_SSLMODE: "disable" REDIS_USE_AUTH: "false" REDIS_HOST: "redis" REDIS_USE_SSL: "false" CORS_ALLOWED_ORIGIN: "http://localhost,http://localhost:5173,http://127.0.0.1,http://127.0.0.1:5173" GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID} GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET} SECRET_KEY: ${SECRET_KEY} GITHUB_EMAIL_SALT: ${GITHUB_EMAIL_SALT} ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-3} REFRESH_TOKEN_EXPIRE_MINUTES: ${REFRESH_TOKEN_EXPIRE_MINUTES:-60} AUTO_GRANT_ADMIN_ROLE: ${AUTO_GRANT_ADMIN_ROLE:-false} EXTERNAL_OBJECT_BUCKET: "mcbench-object-cdn-local" INTERNAL_OBJECT_BUCKET: "mcbench-backend-object-local" GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-default_value} GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-default_value} GOOGLE_REDIRECT_URI: ${GOOGLE_REDIRECT_URI:-default_value} HUMANIZE_LOGS: ${HUMANIZE_LOGS:-false} SHOW_VERBOSE_SQL: ${SHOW_VERBOSE_SQL:-false} LOG_LEVEL: ${LOG_LEVEL:-INFO} admin-api: build: dockerfile: "images/admin-api.Dockerfile" context: "." image: "mcbench/admin-api" ports: - "8001:8000" environment: CELERY_BROKER_URL: "redis://redis:6379/0" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" POSTGRES_DB: "mc-bench" POSTGRES_USER: "service-admin-api" # Use service account instead of admin POSTGRES_PASSWORD: "service-admin-api" POSTGRES_SSLMODE: "disable" REDIS_USE_AUTH: "false" REDIS_HOST: "redis" REDIS_USE_SSL: "false" CORS_ALLOWED_ORIGIN: "http://localhost,http://localhost:5173,http://127.0.0.1,http://127.0.0.1:5173" SECRET_KEY: ${SECRET_KEY} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} OPENAI_API_KEY: ${OPENAI_API_KEY} GOOGLE_API_KEY: ${GOOGLE_API_KEY} OPENROUTER_API_KEY: ${OPENROUTER_API_KEY} DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY} HUMANIZE_LOGS: ${HUMANIZE_LOGS:-false} SHOW_VERBOSE_SQL: ${SHOW_VERBOSE_SQL:-false} LOG_LEVEL: ${LOG_LEVEL:-INFO} worker: build: dockerfile: "images/worker.Dockerfile" context: "." image: "mcbench/worker" environment: CELERY_BROKER_URL: "redis://redis:6379/0" REDIS_USE_AUTH: "false" REDIS_HOST: "redis" REDIS_USE_SSL: "false" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" POSTGRES_DB: "mc-bench" POSTGRES_USER: "mc-bench-admin" POSTGRES_PASSWORD: "mc-bench" POSTGRES_SSLMODE: "disable" HUMANIZE_LOGS: ${HUMANIZE_LOGS:-false} SHOW_VERBOSE_SQL: ${SHOW_VERBOSE_SQL:-false} LOG_LEVEL: ${LOG_LEVEL:-INFO} WORKER_NAME: "worker-local@localhost" admin-worker: build: dockerfile: "images/admin-worker.Dockerfile" context: "." image: "mcbench/admin-worker" environment: CELERY_BROKER_URL: "redis://redis:6379/0" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" POSTGRES_DB: "mc-bench" POSTGRES_USER: "mc-bench-admin" POSTGRES_PASSWORD: "mc-bench" POSTGRES_SSLMODE: "disable" REDIS_USE_SSL: "false" INTERNAL_OBJECT_BUCKET: "mcbench-backend-object-local" OBJECT_STORE_DSN: "object:9000" OBJECT_STORE_ACCESS_KEY: "fake_key" OBJECT_STORE_SECRET_KEY: "fake_secret" OBJECT_STORE_SECURE: "False" EXTERNAL_OBJECT_BUCKET: "mcbench-object-cdn-local" ADMIN_API_URL: "http://admin-api:8000" HUMANIZE_LOGS: ${HUMANIZE_LOGS:-false} SHOW_VERBOSE_SQL: ${SHOW_VERBOSE_SQL:-false} LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_INTERVAL_COMMANDS: ${LOG_INTERVAL_COMMANDS:-50} WORKER_NAME: "admin-worker-local@localhost" # LLM Service API Keys ALIBABA_CLOUD_API_KEY: ${ALIBABA_CLOUD_API_KEY} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} OPENAI_API_KEY: ${OPENAI_API_KEY} OPENROUTER_API_KEY: ${OPENROUTER_API_KEY} GOOGLE_API_KEY: ${GOOGLE_API_KEY} DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY} XAI_API_KEY: ${XAI_API_KEY} MISTRAL_API_KEY: ${MISTRAL_API_KEY} REKA_API_KEY: ${REKA_API_KEY} ZHIPUAI_API_KEY: ${ZHIPUAI_API_KEY} render-worker: platform: linux/amd64 build: dockerfile: "images/render-worker.Dockerfile" context: "." image: "mcbench/render-worker" environment: CELERY_BROKER_URL: "redis://redis:6379/0" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" POSTGRES_DB: "mc-bench" POSTGRES_USER: "mc-bench-admin" POSTGRES_PASSWORD: "mc-bench" POSTGRES_SSLMODE: "disable" REDIS_USE_SSL: "false" INTERNAL_OBJECT_BUCKET: "mcbench-backend-object-local" OBJECT_STORE_DSN: "object:9000" OBJECT_STORE_ACCESS_KEY: "fake_key" OBJECT_STORE_SECRET_KEY: "fake_secret" OBJECT_STORE_SECURE: "False" EXTERNAL_OBJECT_BUCKET: "mcbench-object-cdn-local" ADMIN_API_URL: "http://admin-api:8000" FAST_RENDER: ${FAST_RENDER:-true} HUMANIZE_LOGS: ${HUMANIZE_LOGS:-false} SHOW_VERBOSE_SQL: ${SHOW_VERBOSE_SQL:-false} LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_INTERVAL_BLOCKS: ${LOG_INTERVAL_BLOCKS:-100} LOG_INTERVAL_MATERIALS: ${LOG_INTERVAL_MATERIALS:-10} WORKER_NAME: "render-worker-local@localhost" server-worker: build: dockerfile: "images/server-worker.Dockerfile" context: "." image: "mcbench/server-worker" environment: CELERY_BROKER_URL: "redis://redis:6379/0" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" POSTGRES_DB: "mc-bench" POSTGRES_USER: "mc-bench-admin" POSTGRES_PASSWORD: "mc-bench" POSTGRES_SSLMODE: "disable" REDIS_USE_SSL: "false" INTERNAL_OBJECT_BUCKET: "mcbench-backend-object-local" OBJECT_STORE_DSN: "object:9000" OBJECT_STORE_ACCESS_KEY: "fake_key" OBJECT_STORE_SECRET_KEY: "fake_secret" OBJECT_STORE_SECURE: "False" ADMIN_API_URL: "http://admin-api:8000" MINECRAFT_SERVER_IMAGE: ${MINECRAFT_SERVER_IMAGE} MINECRAFT_BUILDER_IMAGE: ${MINECRAFT_BUILDER_IMAGE} NUM_WORKERS: "1" NO_CLEANUP_SERVER_CONTAINER: ${NO_CLEANUP_SERVER_CONTAINER:-false} NO_CLEANUP_BUILDER_CONTAINER: ${NO_CLEANUP_BUILDER_CONTAINER:-false} NO_IMAGE_PULL: "true" EXPOSE_SERVER_PORTS: ${EXPOSE_SERVER_PORTS:-false} HUMANIZE_LOGS: ${HUMANIZE_LOGS:-false} BUILD_DELAY_MS: ${BUILD_DELAY_MS:-25} EXPORT_STRUCTURE_VIEWS: ${EXPORT_STRUCTURE_VIEWS:-true} SHOW_VERBOSE_SQL: ${SHOW_VERBOSE_SQL:-false} LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_INTERVAL_COMMANDS: ${LOG_INTERVAL_COMMANDS:-50} LOG_INTERVAL_EXPORT_PERCENT: ${LOG_INTERVAL_EXPORT_PERCENT:-10} WORKER_NAME: "server-worker-local@localhost" volumes: - /var/run/docker.sock:/var/run/docker.sock admin-flower: build: dockerfile: "images/admin-worker.Dockerfile" context: "." image: "mcbench/admin-worker" ports: - "5555:5555" environment: CELERY_BROKER_URL: "redis://redis:6379/0" FLOWER_UNAUTHENTICATED_API: "true" INTERNAL_OBJECT_BUCKET: "mcbench-backend-object-local" EXTERNAL_OBJECT_BUCKET: "mcbench-object-cdn-local" # Uncomment below to test flower github oauth # FLOWER_AUTH_PROVIDER: "flower.views.auth.GithubLoginHandler" # FLOWER_AUTH: "huntcsg@gmail.com" # FLOWER_OAUTH2_KEY: ${FLOWER_GITHUB_CLIENT_ID} # FLOWER_OAUTH2_SECRET: ${FLOWER_GITHUB_CLIENT_SECRET} # FLOWER_OAUTH2_REDIRECT_URI: "http://localhost:5555/login" command: ["celery", "-A", "mc_bench.apps.admin_worker", "flower"] scheduler: build: dockerfile: "images/admin-worker.Dockerfile" context: "." image: "mcbench/admin-worker" environment: CELERY_BROKER_URL: "redis://redis:6379/0" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" POSTGRES_DB: "mc-bench" POSTGRES_USER: "mc-bench-admin" POSTGRES_PASSWORD: "mc-bench" POSTGRES_SSLMODE: "disable" REDIS_USE_SSL: "false" REDIS_HOST: "redis" REDIS_USE_AUTH: "false" INTERNAL_OBJECT_BUCKET: "mcbench-backend-object-local" OBJECT_STORE_DSN: "object:9000" OBJECT_STORE_ACCESS_KEY: "fake_key" OBJECT_STORE_SECRET_KEY: "fake_secret" OBJECT_STORE_SECURE: "False" EXTERNAL_OBJECT_BUCKET: "mcbench-object-cdn-local" ADMIN_API_URL: "http://admin-api:8000" # Auth token creation variables SECRET_KEY: ${SECRET_KEY} ALGORITHM: "HS256" # Scheduler specific configs SCHEDULER_DEFAULT_MAX_TASKS: "10" SCHEDULER_INTERVAL: "5" # Queue-specific limits example: # SCHEDULER_MAX_TASKS_PROMPT: "5" # SCHEDULER_MAX_TASKS_RENDER: "2" HUMANIZE_LOGS: ${HUMANIZE_LOGS:-false} SHOW_VERBOSE_SQL: ${SHOW_VERBOSE_SQL:-false} LOG_LEVEL: ${LOG_LEVEL:-INFO} command: ["python", "-m", "mc_bench.apps.scheduler"] postgres: image: postgres:16 ports: - "5432:5432" environment: POSTGRES_DB: "mc-bench" POSTGRES_USER: "mc-bench-admin" POSTGRES_PASSWORD: "mc-bench" redis: image: redis:7 ports: - "6379:6379" object: image: minio/minio:latest ports: - "9000:9000" - "9001:9001" volumes: - minio-data:/data environment: MINIO_ROOT_USER: fake_key MINIO_ROOT_PASSWORD: fake_secret command: ["server", "/data", "--console-address", "0.0.0.0:9001"] volumes: minio-data: