version: "3.8" services: # ============================================================= # POSTGRESQL — Banco de Dados do AgendaPRO (Isolado) # ============================================================= postgres-agendapro: image: postgres:16-alpine restart: always environment: POSTGRES_DB: agendapro POSTGRES_USER: agendapro_user POSTGRES_PASSWORD_FILE: /run/secrets/db_password secrets: - db_password volumes: - pgdata-agendapro:/var/lib/postgresql/data networks: - agendapro-internal healthcheck: test: ["CMD-SHELL", "pg_isready -U agendapro_user"] interval: 10s timeout: 5s retries: 5 # ============================================================= # AGENDAPRO APP — Sistema Principal # ============================================================= agendapro: image: agendapro-app:local restart: always depends_on: - postgres-agendapro environment: DATABASE_URL: postgresql://agendapro_user:${DB_PASSWORD}@postgres-agendapro:5432/agendapro JWT_SECRET_FILE: /run/secrets/jwt_secret ASAAS_API_KEY_FILE: /run/secrets/asaas_api_key ASAAS_ENVIRONMENT: sandbox NODE_ENV: production secrets: - jwt_secret - asaas_api_key networks: - agendapro-internal - network_public deploy: labels: - "traefik.enable=true" - "traefik.http.routers.agendapro.rule=Host(`agendapro.microtecinformaticacurso.com.br`)" - "traefik.http.routers.agendapro.entrypoints=websecure" - "traefik.http.routers.agendapro.tls.certresolver=leresolver" - "traefik.http.services.agendapro.loadbalancer.server.port=3000" - "traefik.docker.network=network_public" # ============================================================= # ADMIN PANEL — Gerenciador de Assinaturas # ============================================================= admin-agendapro: image: agendapro-admin:local restart: always depends_on: - postgres-agendapro environment: DATABASE_URL: postgresql://agendapro_user:${DB_PASSWORD}@postgres-agendapro:5432/agendapro JWT_SECRET_FILE: /run/secrets/jwt_secret ADMIN_SECRET_FILE: /run/secrets/admin_secret ASAAS_API_KEY_FILE: /run/secrets/asaas_api_key ASAAS_ENVIRONMENT: sandbox NODE_ENV: production secrets: - jwt_secret - admin_secret - asaas_api_key networks: - agendapro-internal - network_public deploy: labels: - "traefik.enable=true" - "traefik.http.routers.admin-agendapro.rule=Host(`admin-agendapro.microtecinformaticacurso.com.br`)" - "traefik.http.routers.admin-agendapro.entrypoints=websecure" - "traefik.http.routers.admin-agendapro.tls.certresolver=leresolver" - "traefik.http.services.admin-agendapro.loadbalancer.server.port=3001" - "traefik.docker.network=network_public" volumes: pgdata-agendapro: networks: agendapro-internal: driver: overlay network_public: external: true secrets: db_password: external: true jwt_secret: external: true admin_secret: external: true asaas_api_key: external: true