services: # ── PostgreSQL ─────────────────────────────────────────────────────────────── postgres: image: postgres:16-alpine restart: unless-stopped container_name: condado-newsletter-postgres environment: POSTGRES_DB: condado POSTGRES_USER: ${SPRING_DATASOURCE_USERNAME} POSTGRES_PASSWORD: ${SPRING_DATASOURCE_PASSWORD} volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${SPRING_DATASOURCE_USERNAME} -d condado"] interval: 10s timeout: 5s retries: 5 # ── Backend (Spring Boot) ──────────────────────────────────────────────────── backend: container_name: condado-newsletter-backend build: context: ./backend dockerfile: Dockerfile restart: unless-stopped depends_on: postgres: condition: service_healthy environment: SPRING_PROFILES_ACTIVE: dev SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/condado 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} extra_hosts: - "celtinha.desktop:host-gateway" - "host.docker.internal:host-gateway" # ── Frontend + Nginx ───────────────────────────────────────────────────────── nginx: container_name: condado-newsletter-frontend build: context: ./frontend dockerfile: Dockerfile args: VITE_API_BASE_URL: ${VITE_API_BASE_URL} restart: unless-stopped depends_on: - backend networks: - traefik labels: - "traefik.enable=true" - "traefik.http.routers.condado.rule=Host(`condado-newsletter.lab`)" - "traefik.http.services.condado.loadbalancer.server.port=80" - "homepage.group=Hyperlink" - "homepage.name=Condado Newsletter" - "homepage.description=Automated newsletter generator using AI" - "homepage.logo=claude-dark.png" - "homepage.href=http://condado-newsletter.lab" # ── Mailhog (DEV ONLY — SMTP trap) ─────────────────────────────────────────── mailhog: container_name: condado-newsletter-mailhog image: mailhog/mailhog:latest restart: unless-stopped ports: - "8025:8025" volumes: postgres-data: networks: traefik: external: true name: traefik