services: # Main OpenCodeHub application app: build: context: . dockerfile: Dockerfile container_name: opencodehub restart: unless-stopped ports: - "4321:4321" # Web interface - "2222:2222" # SSH Git environment: - NODE_ENV=production - DATABASE_URL=postgresql://opencodehub:opencodehub@postgres:5432/opencodehub - DATABASE_TYPE=postgres - REDIS_URL=redis://redis:6379 - JWT_SECRET=${JWT_SECRET:-change-this-in-production} - SSH_HOST_KEY_PATH=/data/ssh/host_key - SERVER_URL=http://localhost:4321 - STORAGE_TYPE=local - STORAGE_PATH=/data/storage - REPOS_PATH=/data/repos volumes: - repos-data:/data/repos - storage-data:/data/storage - ssh-data:/data/ssh - cache-data:/data/cache depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - opencodehub-network healthcheck: test: [ "CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4321/api/health", ] interval: 30s timeout: 10s retries: 3 start_period: 10s # PostgreSQL database postgres: image: docker.io/library/postgres:16-alpine container_name: opencodehub-postgres restart: unless-stopped environment: POSTGRES_USER: opencodehub POSTGRES_PASSWORD: opencodehub POSTGRES_DB: opencodehub volumes: - postgres-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - opencodehub-network healthcheck: test: ["CMD-SHELL", "pg_isready -U opencodehub -d opencodehub"] interval: 10s timeout: 5s retries: 5 # Redis for caching and sessions redis: image: docker.io/library/redis:7-alpine container_name: opencodehub-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - redis-data:/data ports: - "6379:6379" networks: - opencodehub-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # Pipeline runner (for CI/CD jobs) runner: build: context: . dockerfile: Dockerfile.runner container_name: opencodehub-runner restart: unless-stopped privileged: true # Required for Docker-in-Docker environment: - RUNNER_TOKEN=${RUNNER_TOKEN:-} - SERVER_URL=http://app:4321 - DOCKER_HOST=unix:///var/run/docker.sock volumes: - /var/run/docker.sock:/var/run/docker.sock - runner-work:/work - runner-cache:/cache depends_on: - app networks: - opencodehub-network # MinIO for S3-compatible object storage (optional) minio: image: minio/minio:latest container_name: opencodehub-minio restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - minio-data:/data ports: - "9000:9000" - "9001:9001" networks: - opencodehub-network healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 30s timeout: 10s retries: 3 profiles: - with-minio volumes: repos-data: driver: local storage-data: driver: local ssh-data: driver: local cache-data: driver: local postgres-data: driver: local redis-data: driver: local runner-work: driver: local runner-cache: driver: local minio-data: driver: local networks: opencodehub-network: driver: bridge