services: op-db: image: postgres:18.3-alpine restart: always volumes: - op-db-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} logging: driver: "json-file" options: max-size: "10m" max-file: "3" op-kv: image: redis:8.6.2-alpine restart: always volumes: - op-kv-data:/data command: ["redis-server", "--maxmemory-policy", "noeviction"] healthcheck: test: ["CMD-SHELL", "redis-cli ping"] interval: 10s timeout: 5s retries: 5 logging: driver: "json-file" options: max-size: "10m" max-file: "3" op-ch: image: clickhouse/clickhouse-server:26.3.2.3 restart: always environment: - CLICKHOUSE_DEFAULT_PASSWORD=${CLICKHOUSE_PASSWORD:-clickhouse} volumes: - op-ch-data:/var/lib/clickhouse - op-ch-logs:/var/log/clickhouse-server - ./self-hosting/clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/op-config.xml:ro - ./self-hosting/clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/op-user-config.xml:ro - ./self-hosting/clickhouse/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro healthcheck: test: ["CMD-SHELL", "clickhouse-client --query 'SELECT 1'"] interval: 10s timeout: 5s retries: 5 ulimits: nofile: soft: 262144 hard: 262144 logging: driver: "json-file" options: max-size: "10m" max-file: "3" op-api: image: git.zias.be/zias/openpanel-api:latest restart: always ports: - "3001:3000" command: > sh -c " echo 'Running migrations...' CI=true pnpm -r run migrate:deploy pnpm start " healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/healthcheck || exit 1"] interval: 10s timeout: 5s retries: 5 depends_on: op-db: condition: service_healthy op-ch: condition: service_healthy op-kv: condition: service_healthy env_file: - .env.prod logging: driver: "json-file" options: max-size: "50m" max-file: "3" op-dashboard: image: git.zias.be/zias/openpanel-dashboard:latest restart: always ports: - "3000:3000" depends_on: op-api: condition: service_healthy env_file: - .env.prod healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/api/healthcheck || exit 1"] interval: 10s timeout: 5s retries: 5 logging: driver: "json-file" options: max-size: "20m" max-file: "3" op-worker: image: git.zias.be/zias/openpanel-worker:latest restart: always depends_on: op-api: condition: service_healthy env_file: - .env.prod healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/healthcheck || exit 1"] interval: 10s timeout: 5s retries: 5 logging: driver: "json-file" options: max-size: "30m" max-file: "3" volumes: op-db-data: driver: local op-kv-data: driver: local op-ch-data: driver: local op-ch-logs: driver: local