services: postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-openstack} POSTGRES_USER: ${POSTGRES_USER:-openstack} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-openstackpw} volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER:-openstack}"] interval: 5s timeout: 3s retries: 10 backend: build: ./backend restart: unless-stopped depends_on: postgres: condition: service_healthy environment: DATABASE_URL: postgres://${POSTGRES_USER:-openstack}:${POSTGRES_PASSWORD:-openstackpw}@postgres:5432/${POSTGRES_DB:-openstack} PORT: 3000 JWT_SECRET: ${JWT_SECRET:-change-me} JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d} CORS_ORIGIN: ${CORS_ORIGIN:-http://localhost:8080} ports: - "3000:3000" frontend: build: context: ./frontend args: VITE_API_URL: /api VITE_SOCKET_URL: "" restart: unless-stopped depends_on: - backend ports: - "8080:80" volumes: pgdata: