agendapro/docker-compose.yml

96 lines
3.0 KiB
YAML

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: gitea.microtecinformaticacurso.com.br/sidney/agendapro/agendapro-app:latest
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
NODE_ENV: production
secrets:
- jwt_secret
networks:
- agendapro-internal
- network_public
deploy:
labels:
- "traefik.enable=true"
- "traefik.http.routers.agendapro.rule=Host(`app.agendapro.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: gitea.microtecinformaticacurso.com.br/sidney/agendapro/agendapro-admin:latest
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
NODE_ENV: production
secrets:
- jwt_secret
- admin_secret
networks:
- agendapro-internal
- network_public
deploy:
labels:
- "traefik.enable=true"
- "traefik.http.routers.admin-agendapro.rule=Host(`admin.agendapro.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