services: postgres: image: postgres:16-alpine environment: POSTGRES_DB: ${POSTGRES_DB:-shipper_dashboard} POSTGRES_USER: ${POSTGRES_USER:-shipper} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-shipper} ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-shipper} -d ${POSTGRES_DB:-shipper_dashboard}"] interval: 5s timeout: 5s retries: 10 migrations: image: rust:1-bookworm working_dir: /app depends_on: postgres: condition: service_healthy environment: DATABASE_URL: postgres://shipper:shipper@postgres:5432/shipper_dashboard volumes: - .:/app command: sh -c "cargo install sqlx-cli --no-default-features --features postgres --locked && sqlx migrate run" backend: build: context: . dockerfile: backend/Dockerfile depends_on: migrations: condition: service_completed_successfully environment: DATABASE_URL: postgres://shipper:shipper@postgres:5432/shipper_dashboard BIND_ADDR: 0.0.0.0:3000 ports: - "3000:3000" frontend: build: context: . dockerfile: frontend/Dockerfile depends_on: - backend ports: - "8080:80" volumes: postgres-data: