Files
convite-rael/compose.yml

68 lines
2.2 KiB
YAML

name: convite
services:
db:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-convite}
POSTGRES_USER: ${POSTGRES_USER:-convite}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?defina POSTGRES_PASSWORD no .env}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
# Sem porta publicada: o banco só é acessível pela rede interna do compose.
# Para acessar do host (ex.: db:studio), descomente:
# ports:
# - "127.0.0.1:5432:5432"
# Serviço Python que personaliza os PDFs dos convites. Sem porta publicada: só o app acessa,
# pela rede interna do compose (http://pdf-service:8000).
pdf-service:
build: ./pdf-service
restart: unless-stopped
environment:
STORAGE_DIR: /storage
# Base do link gravado em cada PDF: <INVITE_LINK_BASE_URL>/r/<token>.
# Opcional: vazia, o serviço usa o APP_URL.
APP_URL: ${APP_URL:-}
INVITE_LINK_BASE_URL: ${INVITE_LINK_BASE_URL:-}
# Links do PDF modelo que contêm este trecho são trocados pelo link do convite
INVITE_LINK_PATTERN: ${INVITE_LINK_PATTERN:-com.br/r/}
volumes:
- app-storage:/storage
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=3)"]
interval: 10s
timeout: 5s
retries: 5
app:
build: .
restart: unless-stopped
depends_on:
db:
condition: service_healthy
# Só a geração de PDFs depende dele; o convite e o RSVP funcionam mesmo com ele fora do ar
pdf-service:
condition: service_started
env_file: .env
environment:
# Sobrescreve o DATABASE_URL do .env: dentro do compose o host do banco é "db"
DATABASE_URL: postgres://${POSTGRES_USER:-convite}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-convite}
PDF_SERVICE_URL: http://pdf-service:8000
STORAGE_DIR: /storage
volumes:
# PDFs modelo e gerados (compartilhado com o pdf-service)
- app-storage:/storage
ports:
- "${APP_PORT:-3000}:3000"
volumes:
pgdata:
app-storage: