services: boocode: build: . container_name: boocode restart: unless-stopped ports: - "100.114.205.53:9500:3000" env_file: .env environment: DATABASE_URL: postgres://boocode:${POSTGRES_PASSWORD}@boocode_db:5432/boocode volumes: # Read-only mount for legacy/existing project add-existing flow. - /opt:/opt:ro # Writable mount only for the create-new-project bootstrap target. # Host must `mkdir -p /opt/projects` before container start. - /opt/projects:/opt/projects:rw depends_on: - boocode_db networks: - boocode_net boocode_db: image: postgres:16-alpine container_name: boocode_db restart: unless-stopped environment: POSTGRES_USER: boocode POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: boocode ports: - "127.0.0.1:5500:5432" volumes: - boocode_pgdata:/var/lib/postgresql/data networks: - boocode_net volumes: boocode_pgdata: networks: boocode_net: driver: bridge