services: # ── PostgreSQL ─────────────────────────────────────────────────────────────── postgres: image: postgres:16-alpine restart: always environment: POSTGRES_DB: condado POSTGRES_USER: ${SPRING_DATASOURCE_USERNAME} POSTGRES_PASSWORD: ${SPRING_DATASOURCE_PASSWORD} volumes: - postgres-data:/var/lib/postgresql/data networks: - condado-net healthcheck: test: ["CMD-SHELL", "pg_isready -U ${SPRING_DATASOURCE_USERNAME} -d condado"] interval: 10s timeout: 5s retries: 5 # ── Backend (Spring Boot) ──────────────────────────────────────────────────── backend: build: context: ./backend dockerfile: Dockerfile restart: always depends_on: postgres: condition: service_healthy environment: SPRING_PROFILES_ACTIVE: prod SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL} SPRING_DATASOURCE_USERNAME: ${SPRING_DATASOURCE_USERNAME} SPRING_DATASOURCE_PASSWORD: ${SPRING_DATASOURCE_PASSWORD} APP_PASSWORD: ${APP_PASSWORD} JWT_SECRET: ${JWT_SECRET} JWT_EXPIRATION_MS: ${JWT_EXPIRATION_MS} MAIL_HOST: ${MAIL_HOST} MAIL_PORT: ${MAIL_PORT} MAIL_USERNAME: ${MAIL_USERNAME} MAIL_PASSWORD: ${MAIL_PASSWORD} IMAP_HOST: ${IMAP_HOST} IMAP_PORT: ${IMAP_PORT} IMAP_INBOX_FOLDER: ${IMAP_INBOX_FOLDER} OPENAI_API_KEY: ${OPENAI_API_KEY} OPENAI_MODEL: ${OPENAI_MODEL} LLAMA_BASE_URL: ${LLAMA_BASE_URL} LLAMA_MODEL: ${LLAMA_MODEL} APP_RECIPIENTS: ${APP_RECIPIENTS} networks: - condado-net # ── Frontend + Nginx ───────────────────────────────────────────────────────── nginx: build: context: ./frontend dockerfile: Dockerfile args: VITE_API_BASE_URL: ${VITE_API_BASE_URL} restart: always ports: - "80:80" depends_on: - backend networks: - condado-net volumes: postgres-data: networks: condado-net: driver: bridge