- PostgreSQL veritabanlarını otomatik ve düzenli yedeklemek
- Yedekleri iki farklı cloud üzerinde saklamak
- Disk şişmesini önlemek (retention policy)
- Manuel script / cron yazmadan sürdürülebilir yapı kurmak
- Bu repo’yu klonlayın:
git clone https://github.com/x-dockerize/postgres.git- PostgreSQL Network Oluşturulması Kurulumanan sonra, PostgreSQL container’ının çalıştığı network’ü oluşturun:
docker network create postgres-network- install.sh script’i ile .env dosyasını oluşturun:
./install.sh- docker-compose.production.yml dosyasını docker-compose.yml olarak kopyalayın:
cp docker-compose.production.yml docker-compose.yml- Docker Compose ile container’ları başlatın:
docker-compose up -d- PostgreSQL: Docker container
- Backup: Ayrı bir container (cron + pg_dump)
- Public erişim: ❌ yok
Postgres → Backup Container →
├─ DigitalOcean Spaces (S3)
└─ Oracle Object Storage (S3 compatible)
postgres/
├── .docker/
│ ├── postgres/
│ │ └── data/ # DB data volume
│ └── postgres-backup/
│ └── backups/ # Lokal geçici yedekler
├── .env
├── .env.example
├── docker-compose.production.yml
└── docker-compose.yml
| Servis | Image |
|---|---|
| PostgreSQL | postgres:16 |
| Backup | prodrigestivill/postgres-backup-local |
Yedekleme zamanlaması .env dosyası üzerinden yapılır:
SCHEDULE=@dailyAlternatif örnekler:
SCHEDULE=@hourly
SCHEDULE=@weekly
SCHEDULE="0 3 * * *" # Her gece 03:00Cron container içinde otomatik çalışır.
BACKUP_KEEP_DAYS=7
BACKUP_KEEP_WEEKS=4
BACKUP_KEEP_MONTHS=6- Günlük: 7 gün
- Haftalık: 4 hafta
- Aylık: 6 ay
Eski yedekler otomatik silinir.
S3_ENDPOINT=https://ams3.digitaloceanspaces.com
S3_BUCKET=pg-backups
S3_PREFIX=devops/postgres
S3_REGION=ams3S3_ENDPOINT_2=https://<namespace>.compat.objectstorage.eu-amsterdam-1.oraclecloud.com
S3_BUCKET_2=pg-backups
S3_PREFIX_2=devops/postgres
S3_REGION_2=eu-amsterdam-1📌 Tek yedek → iki farklı cloud’a aynı anda gönderilir.
Aynı PostgreSQL instance içindeki tüm database’ler otomatik yedeklenir.
İstersen sadece belirli DB’ler:
POSTGRES_DB=app_db,app_db_2- PostgreSQL public açık değildir
- Backup credential’ları sadece
.enviçindedir
docker logs postgres-backupdocker exec postgres-backup /backup.shHer uygulama için ayrı bir veritabanı ve kullanıcı oluşturmak için aşağıdaki komutu kullanabilirsiniz:
./app_db_setup.sh- WAL / PITR (Point-in-Time Recovery)
- pgBouncer
- Backup encryption (GPG)
- Restore test otomasyonu
- Prometheus postgres-exporter
Bu yapı:
- Production uyumlu
- Cloud bağımsız
- Az bakım gerektiren
- Güvenli ve genişletilebilir
DevOps merkez sunucusu için ideal PostgreSQL backup çözümüdür.