hakobox/docker-compose.yml
2025-04-21 17:59:57 -03:00

73 lines
1.8 KiB
YAML

networks:
metrics:
driver: bridge
transactional:
driver: bridge
services:
db:
image: postgres
healthcheck:
# Serve de condicional para que o docker compose saiba que o banco
# foi criado com sucesso antes de inicializar a aplicação.
test: ["CMD-SHELL", "pg_isready -U ${PG_USER} -d ${PG_DB}"]
interval: 10s
retries: 5
start_period: 30s
timeout: 10s
volumes:
- ./data/postgres:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${PG_USER}
POSTGRES_PASSWORD: ${PG_PASS}
POSTGRES_DB: ${PG_DB}
ports:
- 5432:5432
networks:
- transactional
# Interface web para monitoramento e consultas no banco.
adminer:
image: adminer
ports:
- 8090:8080
depends_on:
- db
networks:
- transactional
# Observabilidade e coleta de dados
prometheus:
image: prom/prometheus
expose:
- '9090'
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- metrics
# Necessário para que o serviço consiga encontrar a aplicação quando
# estivermos desenvolvendo localmente, fora de um contêiner.
extra_hosts:
- "host.docker.internal:host-gateway"
# Servidor. rodar apenas quando estivermos em produção.
app:
build: .
environment:
# Aplicação não se conecta com o banco sem isso.
# Apenas funciona pois o docker compose registra o nome de cada serviço como um
# endereço de rede, e esse é o endereço do banco.
PG_ADDR: db
depends_on:
db: # Não incializa até que o banco esteja recebendo requisições
condition: service_healthy
restart: true
ports:
- 8888:8888
networks:
- metrics
- transactional