Skip to content

Instantly share code, notes, and snippets.

@farunurisonmez
Last active November 14, 2025 14:53
Show Gist options
  • Select an option

  • Save farunurisonmez/6efac9f2bd9af7865ee29fff96157159 to your computer and use it in GitHub Desktop.

Select an option

Save farunurisonmez/6efac9f2bd9af7865ee29fff96157159 to your computer and use it in GitHub Desktop.
PostgreSQL Docker Backup to AWS S3 (Auto-Discovery)
#### Dosya 2: `postgres_s3_backup.sh`
*(Scriptin son hali - **Lütfen kendi Access Keylerinizi silip yerine placeholder koyarak paylaşın!**)*
```bash
#!/bin/bash
# =========================================================
# PostgreSQL Docker -> AWS S3 Backup Script
# Description: Auto-discovers DBs in Docker, dumps them,
# zips them, and uploads to AWS S3.
# =========================================================
# --- AYARLAR: POSTGRESQL ---
CONTAINER_NAME="postgres" # Docker container name
BACKUP_DIR="/var/backups/postgres_hourly"
PG_USER="postgres" # DB User inside container
# --- AYARLAR: AWS S3 ---
# GUVENLIK UYARISI: Bu bilgileri guvenli tutun veya ENV'den cekin
MY_AWS_ACCESS_KEY="YOUR_ACCESS_KEY_HERE"
MY_AWS_SECRET_KEY="YOUR_SECRET_KEY_HERE"
MY_AWS_REGION="eu-central-1"
MY_BUCKET_NAME="your-bucket-name"
export AWS_ACCESS_KEY_ID=$MY_AWS_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=$MY_AWS_SECRET_KEY
export AWS_DEFAULT_REGION=$MY_AWS_REGION
# Yedekleme klasoru olustur
mkdir -p $BACKUP_DIR
# --- BASLANGIC ---
echo "---------------------------------------------------"
echo " PostgreSQL Auto Backup & S3 Upload Started"
echo " Date: $(date +'%Y-%m-%d %H:%M:%S')"
echo "---------------------------------------------------"
# 1. Veritabani listesini Docker icinden cek
# (Template ve postgres veritabanlarini haric tutmak isterseniz SQL'i duzenleyin)
RAW_DBS=$(docker exec $CONTAINER_NAME psql -U $PG_USER -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" | tr -d '\r' | xargs)
IFS=' ' read -r -a DB_ARRAY <<< "$RAW_DBS"
TOTAL=${#DB_ARRAY[@]}
CURRENT=0
if [ $TOTAL -eq 0 ]; then
echo "[ERROR] No databases found inside container: $CONTAINER_NAME"
exit 1
fi
# --- DONGU ---
for DB in "${DB_ARRAY[@]}"; do
((CURRENT++))
# Yuzde Hesaplama
PERCENT=$(( 100 * CURRENT / TOTAL ))
# Ilerleme Cubugu
BAR_SIZE=20
DONE_CHARS=$(( PERCENT * BAR_SIZE / 100 ))
TODO_CHARS=$(( BAR_SIZE - DONE_CHARS ))
BAR=$(printf "%${DONE_CHARS}s" | tr " " "=")
EMPTY=$(printf "%${TODO_CHARS}s" | tr " " ".")
echo -n "[${BAR}${EMPTY}] %${PERCENT} | (${CURRENT}/${TOTAL}) $DB : Backing up... "
TEMP_FILE="$BACKUP_DIR/${DB}_temp.sql.gz"
FINAL_FILE="$BACKUP_DIR/${DB}_latest.sql.gz"
# 2. YEDEK ALMA (Docker -> Host Disk)
docker exec $CONTAINER_NAME pg_dump -U $PG_USER $DB | gzip > $TEMP_FILE
if [ ${PIPESTATUS[0]} -eq 0 ]; then
mv $TEMP_FILE $FINAL_FILE
echo -n "-> [LOCAL OK] -> Uploading to S3... "
# 3. S3 YUKLEME
aws s3 cp $FINAL_FILE s3://$MY_BUCKET_NAME/hourly_backups/${DB}_latest.sql.gz --quiet
if [ $? -eq 0 ]; then
echo "[S3 OK]"
else
echo "[S3 FAILED]"
fi
else
rm -f $TEMP_FILE
echo "-> [LOCAL FAILED]"
fi
done
echo "---------------------------------------------------"
echo " Backup Process Completed."

PostgreSQL Docker Backup to AWS S3 (Auto-Discovery)

Bu script, Docker üzerinde çalışan bir PostgreSQL konteynerindeki tüm veritabanlarını otomatik olarak keşfeder, her birini ayrı ayrı yedekler (pg_dump), sıkıştırır (gzip) ve belirlenen AWS S3 Bucket'ına yükler.

Özellikler

  • 🐳 Docker Uyumlu: docker exec kullanarak host makinede psql kurulumuna ihtiyaç duymaz.
  • 🔍 Otomatik Keşif: Veritabanı isimlerini elle yazmanıza gerek yoktur, script otomatik listeler.
  • ☁️ AWS S3 Entegrasyonu: Yedekleri güvenli bir şekilde buluta taşır.
  • 📊 Görsel İlerleme: Terminalde şık bir ilerleme çubuğu (progress bar) sunar.
  • 🔄 Overwrite Modu: Disk doluluğunu önlemek için S3 üzerinde hep en güncel yedeği (_latest) tutar (İsteğe bağlı tarihli arşivleme açılabilir).

Gereksinimler

  1. AWS CLI v2 yüklü olmalı (aws --version).
  2. Sunucuda (Host) Docker çalışıyor olmalı.
  3. Scripti çalıştıracak kullanıcının Docker yetkisi olmalı.

Kurulum

  1. Scripti indirin ve çalıştırılabilir yapın:
    chmod +x backup_script.sh
@farunurisonmez
Copy link
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment