services: postgres: image: postgres:16-alpine container_name: yakpanel-postgres restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} ports: - "${POSTGRES_PORT}:5432" volumes: - yakpanel_postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 10 redis: image: redis:7-alpine container_name: yakpanel-redis restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] ports: - "${REDIS_PORT}:6379" volumes: - yakpanel_redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 10 nats: image: nats:2.10-alpine container_name: yakpanel-nats restart: unless-stopped command: ["-js"] ports: - "${NATS_PORT}:4222" - "${NATS_MONITOR_PORT}:8222" minio: image: minio/minio:latest container_name: yakpanel-minio restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} ports: - "${MINIO_PORT}:9000" - "${MINIO_CONSOLE_PORT}:9001" volumes: - yakpanel_minio_data:/data api: image: php:8.3-cli-alpine container_name: yakpanel-api restart: unless-stopped working_dir: /var/www/panel-api command: ["php", "-S", "0.0.0.0:8080", "-t", "public"] volumes: - ./panel-api:/var/www/panel-api ports: - "${API_PORT}:8080" depends_on: postgres: condition: service_healthy redis: condition: service_healthy db-migrate: condition: service_completed_successfully agent-gateway: image: golang:1.23-alpine container_name: yakpanel-agent-gateway restart: unless-stopped working_dir: /src command: ["sh", "-lc", "go run ./cmd/agent-gateway"] volumes: - ./control-plane-go:/src depends_on: redis: condition: service_healthy db-migrate: image: postgres:16-alpine container_name: yakpanel-db-migrate restart: "no" working_dir: /workspace environment: PGPASSWORD: ${POSTGRES_PASSWORD} command: [ "sh", "-lc", "psql -h postgres -U ${POSTGRES_USER} -d ${POSTGRES_DB} -f architecture/2026/02-core-schema.sql && psql -h postgres -U ${POSTGRES_USER} -d ${POSTGRES_DB} -f architecture/2026/11-identity-core-schema.sql && psql -h postgres -U ${POSTGRES_USER} -d ${POSTGRES_DB} -f architecture/2026/14-server-plane-schema-additions.sql && psql -h postgres -U ${POSTGRES_USER} -d ${POSTGRES_DB} -f architecture/2026/18-saas-hardening-schema.sql" ] volumes: - ./:/workspace depends_on: postgres: condition: service_healthy volumes: yakpanel_postgres_data: yakpanel_redis_data: yakpanel_minio_data: