name: ${COMPOSE_PROJECT_NAME:-iop-dev} services: postgres: image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_USER: ${IOP_POSTGRES_USER:-iop} POSTGRES_PASSWORD: ${IOP_POSTGRES_PASSWORD:-iop_dev_password} POSTGRES_DB: ${IOP_POSTGRES_DB:-iop-control-plane-dev} ports: - "${IOP_POSTGRES_PORT:-5432}:5432" volumes: - control-plane-postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\""] interval: 10s timeout: 3s retries: 5 redis: image: redis:7-alpine restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] ports: - "${IOP_REDIS_PORT:-6379}:6379" volumes: - control-plane-redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 5 control-plane: build: context: .. dockerfile: iop/apps/control-plane/Dockerfile restart: unless-stopped environment: IOP_DATABASE_URL: "postgres://${IOP_POSTGRES_USER:-iop}:${IOP_POSTGRES_PASSWORD:-iop_dev_password}@postgres:5432/${IOP_POSTGRES_DB:-iop-control-plane-dev}?sslmode=disable" IOP_REDIS_URL: "redis://redis:6379/${IOP_REDIS_DB:-2}" IOP_REDIS_KEY_PREFIX: "${IOP_REDIS_KEY_PREFIX:-iop:control-plane:dev:}" ports: - "${IOP_CONTROL_PLANE_HTTP_PORT:-9080}:9080" - "${IOP_CONTROL_PLANE_WIRE_PORT:-19080}:19080" depends_on: postgres: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9080/healthz"] interval: 10s timeout: 3s retries: 5 web: build: context: .. dockerfile: iop/apps/portal/Dockerfile args: IOP_CONTROL_PLANE_HTTP_URL: "http://localhost:${IOP_CONTROL_PLANE_HTTP_PORT:-9080}" IOP_CONTROL_PLANE_WIRE_URL: "ws://localhost:${IOP_CONTROL_PLANE_WIRE_PORT:-19080}/portal" restart: unless-stopped ports: - "${IOP_WEB_PORT:-3000}:3000" depends_on: control-plane: condition: service_healthy volumes: control-plane-postgres: control-plane-redis: