Files
Budget_Tool_Martinhal/budget-app/docker-compose.yml
T

87 lines
2.3 KiB
YAML

name: budget-capex
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: budget
POSTGRES_USER: budget
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env}
TZ: ${TZ:-Europe/Lisbon}
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U budget -d budget"]
interval: 10s
timeout: 5s
retries: 10
api:
build: ./backend
image: budget-capex-api:latest
restart: unless-stopped
depends_on:
db:
condition: service_healthy
backup:
condition: service_healthy
environment:
DATABASE_URL: postgresql+psycopg://budget:${POSTGRES_PASSWORD}@db:5432/budget
SECRET_KEY: ${SECRET_KEY:?set SECRET_KEY in .env}
ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@example.com}
ADMIN_PASSWORD: ${ADMIN_PASSWORD:?set ADMIN_PASSWORD in .env}
ADMIN_NAME: ${ADMIN_NAME:-Administrator}
DEFAULT_LANGUAGE: ${DEFAULT_LANGUAGE:-pt}
COOKIE_SECURE: ${COOKIE_SECURE:-false}
SESSION_HOURS: ${SESSION_HOURS:-12}
TZ: ${TZ:-Europe/Lisbon}
volumes:
# the api asks the backup container for a fresh backup here before every database upgrade
- backup-requests:/requests
web:
build: ./frontend
image: budget-capex-web:latest
restart: unless-stopped
depends_on:
- api
environment:
SITE_ADDRESS: ${SITE_ADDRESS:-:80}
ports:
- "${HTTP_PORT:-8080}:80"
- "${HTTPS_PORT:-8443}:443"
volumes:
- caddy-data:/data
backup:
image: postgres:16-alpine
restart: unless-stopped
depends_on:
db:
condition: service_healthy
entrypoint: ["/bin/sh", "/scripts/backup.sh"]
healthcheck:
test: ["CMD", "test", "-f", "/tmp/first-backup-done"]
interval: 5s
timeout: 3s
retries: 120
environment:
PGHOST: db
PGUSER: budget
PGDATABASE: budget
PGPASSWORD: ${POSTGRES_PASSWORD}
BACKUP_TIME: ${BACKUP_TIME:-02:30}
BACKUP_KEEP_DAYS: ${BACKUP_KEEP_DAYS:-30}
TZ: ${TZ:-Europe/Lisbon}
volumes:
- ./backup/backup.sh:/scripts/backup.sh:ro
- ./backup/restore.sh:/usr/local/bin/restore.sh:ro
- ${BACKUP_DIR:-./backups}:/backups
- backup-requests:/requests
volumes:
db-data:
caddy-data:
backup-requests: