services: web: build: context: . dockerfile: apps/web/Dockerfile ports: - "3000:3000" environment: HOSTNAME: "0.0.0.0" NEXT_PUBLIC_API_URL: "http://localhost:3001" networks: - frontend-net - backend-net depends_on: api: condition: service_healthy api: build: context: . dockerfile: apps/api/Dockerfile ports: - "3001:3001" networks: - backend-net - data-net depends_on: db: condition: service_healthy environment: DATABASE_URL: ${DATABASE_URL:-postgresql://tessera:tessera_dev@db:5432/tessera} healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3001/health"] interval: 10s timeout: 5s retries: 3 start_period: 10s db: image: postgres:16-alpine networks: - data-net volumes: - pgdata:/var/lib/postgresql/data environment: POSTGRES_USER: tessera POSTGRES_PASSWORD: ${DB_PASSWORD:-tessera_dev} POSTGRES_DB: tessera healthcheck: test: ["CMD-SHELL", "pg_isready -U tessera"] interval: 5s timeout: 3s retries: 5 networks: frontend-net: driver: bridge backend-net: driver: bridge data-net: driver: bridge internal: true volumes: pgdata: