From 517a8fbd9c0f2ec673c3e5e8087deebafb8e5992 Mon Sep 17 00:00:00 2001 From: "jeff.hsu" Date: Wed, 8 Oct 2025 12:11:17 +0800 Subject: [PATCH] Add PostgreSQL example with Docker Compose configuration - Add .env.empty template with all available configuration options - Add .env.example with PostgreSQL-specific configuration and comments - Add compose.yml demonstrating multi-database backup setup - Include examples for volume paths, notifications, and global defaults - Support up to 3 PostgreSQL databases (DB01, DB02, DB03) --- examples/pgsql/.env.empty | 64 +++++++++++++++++++++++ examples/pgsql/.env.example | 101 ++++++++++++++++++++++++++++++++++++ examples/pgsql/compose.yml | 78 ++++++++++++++++++++++++++++ 3 files changed, 243 insertions(+) create mode 100644 examples/pgsql/.env.empty create mode 100644 examples/pgsql/.env.example create mode 100644 examples/pgsql/compose.yml diff --git a/examples/pgsql/.env.empty b/examples/pgsql/.env.empty new file mode 100644 index 00000000..75e3c826 --- /dev/null +++ b/examples/pgsql/.env.empty @@ -0,0 +1,64 @@ +# ─── Volume ──────────────────────────────────────── +HOST_BACKUP_PATH= +HOST_LOG_PATH= +HOST_TEMP_PATH= + +# ─── Basic ───────────────────────────────────────── +TZ= +TIMEZONE= + +# ─── Notification ────────────────────────────────── +ENABLE_NOTIFICATIONS= +NOTIFICATION_TYPE= +SMTP_HOST= +SMTP_PORT= +SMTP_DOMAIN= +SMTP_MAILDOMAIN= +SMTP_TLS= +SMTP_STARTTLS= +MAIL_FROM= +MAIL_TO= + +# ─── Global Default ──────────────────────────────── +DEFAULT_BACKUP_LOCATION= +DEFAULT_CREATE_LATEST_SYMLINK= +DEFAULT_COMPRESSION= +DEFAULT_COMPRESSION_LEVEL= +DEFAULT_CLEANUP_TIME= +DEFAULT_LOG_LEVEL= +DEFAULT_BACKUP_GLOBALS= +DEFAULT_SIZE_VALUE= +DEFAULT_FILESYSTEM_PATH= + +# ─── DB01 ────────────────────────────────────────── +DB01_FILESYSTEM_PATH= +DB01_TYPE= +DB01_HOST= +DB01_PORT= +DB01_USER= +DB01_PASS= +DB01_NAME= +DB01_SPLIT_DB= +DB01_BACKUP_BEGIN= + +# ─── DB02 ────────────────────────────────────────── +DB02_FILESYSTEM_PATH= +DB02_TYPE= +DB02_HOST= +DB02_PORT= +DB02_USER= +DB02_PASS= +DB02_NAME= +DB02_SPLIT_DB= +DB02_BACKUP_BEGIN= + +# ─── DB03 ──────────────────────────────────────────────────── +DB03_FILESYSTEM_PATH= +DB03_TYPE= +DB03_HOST= +DB03_PORT= +DB03_USER= +DB03_PASS= +DB03_NAME= +DB03_SPLIT_DB= +DB03_BACKUP_BEGIN= diff --git a/examples/pgsql/.env.example b/examples/pgsql/.env.example new file mode 100644 index 00000000..d3aeb9f3 --- /dev/null +++ b/examples/pgsql/.env.example @@ -0,0 +1,101 @@ +# Volume Path Settings ───────────────────────────────────────────────────────────────────────── +# Host backup storage path +HOST_BACKUP_PATH=/mnt/upload/db-backup +# Host log storage path +HOST_LOG_PATH=/mnt/upload/db-backup/logs +# Host backup and compression temp path (mount to external NAS to avoid host capacity issues) +HOST_TEMP_PATH=/mnt/upload/db-backup/tmp +# Container backup path (default, can be overridden for each DB) +CONTAINER_BACKUP_PATH=/backup +# Container log path (default) +CONTAINER_LOG_PATH=/logs +# Container backup and compression temp path (default) +CONTAINER_TEMP_PATH=/tmp/backups + +# Basic Settings ─────────────────────────────────────────────────────────────────────────────── +# Container timezone setting +TZ=Asia/Taipei +# Internal scheduler timezone for db-backup +TIMEZONE=Asia/Taipei +# Enable container monitoring functionality +CONTAINER_ENABLE_MONITORING=FALSE +# Number of concurrent backup jobs (recommended to set to 1 to avoid resource competition) +BACKUP_JOB_CONCURRENCY=1 +# print copious shell script messages to the container log +DEBUG_MODE=FALSE + +# Notification Settings (Optional) ───────────────────────────────────────────────────────────── +# Enable notification functionality +ENABLE_NOTIFICATIONS=TRUE +# Notification type (CUSTOM EMAIL MATRIX MATTERMOST ROCKETCHAT) +NOTIFICATION_TYPE=EMAIL +# Add setting to support sending through Gmail SMTP (default FALSE) +SMTP_AUTO_FROM=FALSE +# Hostname of SMTP Server +SMTP_HOST=smtp-relay.gmail.com +# Port of SMTP Server (default 25) +SMTP_PORT=587 +# HELO domain +SMTP_DOMAIN=domain.com +# Mail Domain From, Message-ID domain +SMTP_MAILDOMAIN=domain.com +# SMTP Authentication (default none) +SMTP_AUTHENTICATION=login +# SMTP Username +SMTP_USER= +# SMTP Password +SMTP_PASS= +# Use TLS (default FALSE) +SMTP_TLS=on +# Start TLS from within session (default FALSE) +SMTP_STARTTLS=on +# Check remote certificate (default FALSE) +SMTP_TLSCERTCHECK=off +# SMTP Allow From Override +SMTP_ALLOW_FROM_OVERRIDE= +# Sender email address +MAIL_FROM=db-backup@gmail.com +# Recipient email addresses, multiple can be separated by commas +MAIL_TO=admin@gmail.com,admin2@gmail.com +# turn debug mode on when notify +DEBUG_NOTIFY=FALSE + +# Global Default Settings ────────────────────────────────────────────────────────────────────── +# Backup storage system (FILESYSTEM/S3/blobxfer) +DEFAULT_BACKUP_LOCATION=FILESYSTEM +# Create latest symlink pointing to the newest backup +DEFAULT_CREATE_LATEST_SYMLINK=FALSE +# Compression method (Gzip GZ, Bzip2 BZ, XZip XZ, ZSTD ZSTD or none NONE) +DEFAULT_COMPRESSION=ZSTD +# Compression level (1-9, higher numbers provide better compression but slower speed) +DEFAULT_COMPRESSION_LEVEL=6 +# Backup retention time (minutes) +DEFAULT_CLEANUP_TIME=10080 +# Log level (INFO NOTICE ERROR WARN DEBUG) +DEFAULT_LOG_LEVEL=DEBUG +# Backup Globals after backing up database (forces TRUE if `_NAME=ALL``) +DEFAULT_BACKUP_GLOBALS=TRUE +DEFAULT_SIZE_VALUE=megabytes +# Backup path, defaults to /backup if not specified +DEFAULT_FILESYSTEM_PATH=/backup/default + +# DB01 PostgreSQL Settings ───────────────────────────────────────────────────────────────────── +# Backup file storage path (container path) +DB01_FILESYSTEM_PATH=/backup/db01 +# Database type (pgsql/mysql/mongodb etc.) +DB01_TYPE=pgsql +# PostgreSQL host address +DB01_HOST=your-postgres-host +# PostgreSQL port +DB01_PORT=5432 +# PostgreSQL username (recommend using dedicated account with backup permissions) +DB01_USER=postgres +# PostgreSQL password +DB01_PASS=your-password +# Database name to backup (ALL=all databases, or specify specific database name) +DB01_NAME=ALL +# Store each database as separate files +DB01_SPLIT_DB=TRUE +# Backup execution time (cron format: min hour day month week, or +number for N minutes later) +# Example: "30 9 * * 6" = every Saturday 09:30, "+1" = 1 minute later +DB01_BACKUP_BEGIN=+1 diff --git a/examples/pgsql/compose.yml b/examples/pgsql/compose.yml new file mode 100644 index 00000000..d91949e9 --- /dev/null +++ b/examples/pgsql/compose.yml @@ -0,0 +1,78 @@ +# +# Example for PostgreSQL +# + +services: + db-backup: + image: tiredofit/db-backup:latest + container_name: db-backup + restart: unless-stopped + volumes: + - ${HOST_BACKUP_PATH}:${CONTAINER_BACKUP_PATH:-/backup} + - ${HOST_LOG_PATH}:${CONTAINER_LOG_PATH:-/logs} + - ${HOST_TEMP_PATH}:${CONTAINER_TEMP_PATH:-/tmp/backups} + environment: + # ─── Basic ────────────────────────────────────────────────── + TZ: ${TZ} + TIMEZONE: ${TIMEZONE} + CONTAINER_ENABLE_MONITORING: ${CONTAINER_ENABLE_MONITORING:-FALSE} + BACKUP_JOB_CONCURRENCY: ${BACKUP_JOB_CONCURRENCY:-1} + DEBUG_MODE: ${DEBUG_MODE:-FALSE} + + # ─── Notification ─────────────────────────────────────────── + ENABLE_NOTIFICATIONS: ${ENABLE_NOTIFICATIONS} + NOTIFICATION_TYPE: ${NOTIFICATION_TYPE} + SMTP_HOST: ${SMTP_HOST} + SMTP_PORT: ${SMTP_PORT} + SMTP_DOMAIN: ${SMTP_DOMAIN} + SMTP_MAILDOMAIN: ${SMTP_MAILDOMAIN} + SMTP_TLS: ${SMTP_TLS} + SMTP_STARTTLS: ${SMTP_STARTTLS} + SMTP_TLSCERTCHECK: ${SMTP_TLSCERTCHECK:-off} + MAIL_FROM: ${MAIL_FROM} + MAIL_TO: ${MAIL_TO} + DEBUG_NOTIFY: ${DEBUG_NOTIFY:-FALSE} + + # ─── Global Default ───────────────────────────────────────── + DEFAULT_BACKUP_LOCATION: ${DEFAULT_BACKUP_LOCATION} + DEFAULT_CREATE_LATEST_SYMLINK: ${DEFAULT_CREATE_LATEST_SYMLINK} + DEFAULT_COMPRESSION: ${DEFAULT_COMPRESSION} + DEFAULT_COMPRESSION_LEVEL: ${DEFAULT_COMPRESSION_LEVEL} + DEFAULT_CLEANUP_TIME: ${DEFAULT_CLEANUP_TIME} + DEFAULT_LOG_LEVEL: ${DEFAULT_LOG_LEVEL} + DEFAULT_BACKUP_GLOBALS: ${DEFAULT_BACKUP_GLOBALS} + DEFAULT_SIZE_VALUE: ${DEFAULT_SIZE_VALUE} + DEFAULT_FILESYSTEM_PATH: ${DEFAULT_FILESYSTEM_PATH} + + # ─── DB01 ──────────────────────────────────────────────────── + DB01_FILESYSTEM_PATH: ${DB01_FILESYSTEM_PATH} + DB01_TYPE: ${DB01_TYPE} + DB01_HOST: ${DB01_HOST} + DB01_PORT: ${DB01_PORT} + DB01_USER: ${DB01_USER} + DB01_PASS: ${DB01_PASS} + DB01_NAME: ${DB01_NAME} + DB01_SPLIT_DB: ${DB01_SPLIT_DB} + DB01_BACKUP_BEGIN: ${DB01_BACKUP_BEGIN} + + # ─── DB02 ──────────────────────────────────────────────────── + DB02_FILESYSTEM_PATH: ${DB02_FILESYSTEM_PATH} + DB02_TYPE: ${DB02_TYPE} + DB02_HOST: ${DB02_HOST} + DB02_PORT: ${DB02_PORT} + DB02_USER: ${DB02_USER} + DB02_PASS: ${DB02_PASS} + DB02_NAME: ${DB02_NAME} + DB02_SPLIT_DB: ${DB02_SPLIT_DB} + DB02_BACKUP_BEGIN: ${DB02_BACKUP_BEGIN} + + # ─── DB03 ──────────────────────────────────────────────────── + DB03_FILESYSTEM_PATH: ${DB03_FILESYSTEM_PATH} + DB03_TYPE: ${DB03_TYPE} + DB03_HOST: ${DB03_HOST} + DB03_PORT: ${DB03_PORT} + DB03_USER: ${DB03_USER} + DB03_PASS: ${DB03_PASS} + DB03_NAME: ${DB03_NAME} + DB03_SPLIT_DB: ${DB03_SPLIT_DB} + DB03_BACKUP_BEGIN: ${DB03_BACKUP_BEGIN}