app/docker-compose.prod.yml

99 lines
2.4 KiB
YAML

# Production Docker Compose
services:
app:
image: codeberg.org/lvl0/dish-planner:latest
container_name: dishplanner_app
restart: always
ports:
- "8000:8000"
environment:
# Required from user
APP_KEY: "${APP_KEY}" # Critical - must persist across deployments
APP_URL: "${APP_URL}"
DB_DATABASE: "${DB_DATABASE}"
DB_USERNAME: "${DB_USERNAME}"
DB_PASSWORD: "${DB_PASSWORD}"
# Optional email configuration
MAIL_HOST: "${MAIL_HOST:-}"
MAIL_PORT: "${MAIL_PORT:-587}"
MAIL_USERNAME: "${MAIL_USERNAME:-}"
MAIL_PASSWORD: "${MAIL_PASSWORD:-}"
MAIL_FROM_ADDRESS: "${MAIL_FROM_ADDRESS:-noreply@example.com}"
volumes:
# Only persist storage in production
- app_storage:/app/storage
- app_logs:/app/storage/logs
depends_on:
- db
networks:
- dishplanner
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/up"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
db:
image: mariadb:11
container_name: dishplanner_db
restart: always
environment:
MYSQL_DATABASE: "${DB_DATABASE}"
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
volumes:
- db_data:/var/lib/mysql
networks:
- dishplanner
# Optional: Redis for production caching/sessions
# redis:
# image: redis:7-alpine
# container_name: dishplanner_redis
# restart: always
# command: redis-server --requirepass ${REDIS_PASSWORD}
# volumes:
# - redis_data:/data
# networks:
# - dishplanner
# healthcheck:
# test: ["CMD", "redis-cli", "ping"]
# interval: 30s
# timeout: 10s
# retries: 3
# Optional: Backup service
# backup:
# image: mariadb:11
# container_name: dishplanner_backup
# restart: always
# environment:
# MYSQL_HOST: db
# MYSQL_USER: root
# MYSQL_PASSWORD: "${DB_ROOT_PASSWORD}"
# volumes:
# - ./database/backups:/backups
# - ./scripts/backup.sh:/backup.sh:ro
# entrypoint: ["/bin/sh"]
# command: ["-c", "while true; do /backup.sh; sleep 86400; done"]
# depends_on:
# - db
# networks:
# - dishplanner
networks:
dishplanner:
driver: bridge
volumes:
db_data:
driver: local
app_storage:
driver: local
app_logs:
driver: local
# redis_data:
# driver: local