Files
3cloud-backend/cloud/docker-compose.yml
JamesBhattarai b25c6cd24e Feat: Add cloud plane
- Plane with OIDC users, projects and VDCs with per-VDC roles, SSH key vault, Cloudflare exposure, TLS certificates, and a gateway that forwards allowlisted calls to core with the VDC as tenant_id.
- Also added docker compose for setups
2026-09-02 11:15:25 +05:45

139 lines
3.6 KiB
YAML

name: core
include:
- path: ../core/docker-compose.yml
services:
cloud-db:
image: mariadb:10.11
container_name: xcloudify-cloud-db
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: cloud
MYSQL_USER: cloud_user
MYSQL_PASSWORD: cloud_password
ports:
- "3307:3306"
volumes:
- cloud_db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
cloud-db-migrate:
build:
context: ..
dockerfile: cloud/Dockerfile
image: xcloudify-cloud
env_file: .env
command: python manage.py migrations:apply
depends_on:
cloud-db:
condition: service_healthy
cloud-redis:
image: redis:7-alpine
container_name: xcloudify-cloud-redis
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
cloud-celery-worker:
build:
context: ..
dockerfile: cloud/Dockerfile
image: xcloudify-cloud
container_name: xcloudify-cloud-celery-worker
env_file: .env
command: ["celery", "-A", "app.celery_app.celery", "worker", "--loglevel=info"]
depends_on:
cloud-db:
condition: service_healthy
cloud-db-migrate:
condition: service_completed_successfully
cloud-redis:
condition: service_healthy
api-server:
condition: service_healthy
cloud-celery-beat:
build:
context: ..
dockerfile: cloud/Dockerfile
image: xcloudify-cloud
container_name: xcloudify-cloud-celery-beat
env_file: .env
command: ["celery", "-A", "app.celery_app.celery", "beat", "--loglevel=info"]
depends_on:
cloud-db:
condition: service_healthy
cloud-db-migrate:
condition: service_completed_successfully
cloud-redis:
condition: service_healthy
cloud-api:
build:
context: ..
dockerfile: cloud/Dockerfile
image: xcloudify-cloud
container_name: xcloudify-cloud-api
env_file: .env
environment:
FLASK_APP: api_server.py
volumes:
- .:/app
- ../packages/pyshared:/packages/pyshared
working_dir: /app
command: >
sh -c "flask run --host=0.0.0.0 --port=5001 --debug"
ports:
- "5001:5001"
depends_on:
cloud-db:
condition: service_healthy
cloud-db-migrate:
condition: service_completed_successfully
cloud-redis:
condition: service_healthy
api-server:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5001/api/healthz"]
interval: 10s
timeout: 5s
retries: 5
oauth2-proxy:
image: quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
container_name: xcloudify-plane-oauth2-proxy
profiles: ["auth"]
command: ["--config=/oauth2-proxy.cfg"]
volumes:
- ./oauth2-proxy.cfg:/oauth2-proxy.cfg:ro
environment:
OAUTH2_PROXY_OIDC_ISSUER_URL: ${OIDC_ISSUER:-https://secuird.tech/}
OAUTH2_PROXY_CLIENT_ID: ${OAUTH2_PROXY_CLIENT_ID:-}
OAUTH2_PROXY_CLIENT_SECRET: ${OAUTH2_PROXY_CLIENT_SECRET:-}
OAUTH2_PROXY_COOKIE_SECRET: ${OAUTH2_PROXY_COOKIE_SECRET:-}
OAUTH2_PROXY_REDIRECT_URL: ${OAUTH2_PROXY_REDIRECT_URL:-http://localhost:8090/oauth2/callback}
OAUTH2_PROXY_COOKIE_SECURE: ${OAUTH2_PROXY_COOKIE_SECURE:-false}
OAUTH2_PROXY_UPSTREAMS: ${OAUTH2_PROXY_UPSTREAMS:-http://localhost:8080/}
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "8090:8090"
depends_on:
cloud-api:
condition: service_healthy
volumes:
cloud_db_data: