-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.example.yml
More file actions
115 lines (97 loc) · 3.1 KB
/
docker-compose.example.yml
File metadata and controls
115 lines (97 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
version: '3.8'
services:
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${DB_USER:-postgres}
POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres}
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- db-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
postgres-backup:
image: ghcr.io/johnnybui/postgres-backup-s3:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
# ===== Storage Configuration =====
# Options: S3 (AWS), R2 (Cloudflare), COMPATIBLE (Minio/DigitalOcean/etc)
STORAGE_TYPE: R2
# For AWS S3
# S3_REGION: ap-southeast-1
# For Cloudflare R2
R2_ACCOUNT_ID: ${R2_ACCOUNT_ID}
# For S3-Compatible (Minio, DigitalOcean Spaces, etc)
# S3_ENDPOINT: http://minio:9000
# S3_REGION: us-east-1
# Common storage settings
S3_BUCKET: ${BACKUP_BUCKET:-postgres-backups}
S3_PREFIX: postgres
S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID}
S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY}
# ===== PostgreSQL Configuration =====
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
# Single database: "myapp"
# Multiple databases: "db1,db2,db3"
# All databases: "all"
POSTGRES_DATABASE: ${POSTGRES_DATABASE:-myapp}
POSTGRES_USER: ${DB_USER:-postgres}
POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres}
# Extra pg_dump options (e.g., --clean --if-exists)
POSTGRES_EXTRA_OPTS: ""
# ===== Backup Schedule =====
# Cron syntax or predefined: @hourly, @daily, @weekly, @monthly
# Examples:
# "0 2 * * *" - Every day at 2 AM
# "0 */6 * * *" - Every 6 hours
# "@daily" - Every day at midnight
SCHEDULE: "@daily"
# ===== Backup Options =====
# Parallel backup for multiple databases (yes/no)
PARALLEL_BACKUP: "no"
# Encryption (optional)
ENCRYPTION_PASSWORD: ${BACKUP_ENCRYPTION_KEY:-}
# Auto-delete old backups
DELETE_OLDER_THAN: "30 days ago"
# Use PostgreSQL custom format (faster, smaller, parallel restore)
USE_CUSTOM_FORMAT: "no"
# Compression (for plain text format)
COMPRESSION_CMD: "gzip"
DECOMPRESSION_CMD: "gunzip -c"
# For faster compression on multi-core systems:
# COMPRESSION_CMD: "pigz"
# DECOMPRESSION_CMD: "pigz -dc"
networks:
- db-network
# Optional: Minio for local S3-compatible storage
# minio:
# image: minio/minio
# command: server /data --console-address ":9001"
# restart: unless-stopped
# environment:
# MINIO_ROOT_USER: minioadmin
# MINIO_ROOT_PASSWORD: minioadmin
# ports:
# - "9000:9000"
# - "9001:9001"
# volumes:
# - minio-data:/data
# networks:
# - db-network
networks:
db-network:
driver: bridge
volumes:
postgres-data:
# minio-data: