Google Drive Üzerine Mailcow Yedekleme Yapılandırması

Bu doküman, Mailcow sistem yedeklerinin Google Drive üzerinde otomatik olarak alınması ve yönetilmesi için gereken adımları açıklamaktadır. İşlemler sırasında kullanılan araç rclone olup, sistemde kalıcı bir şekilde yapılandırılarak günlük yedekleme ve temizlik işlemleri otomatik hale getirilmiştir.

1. Google Drive Bağlantısının Hazırlanması

İlk olarak sistemde Google Drive için bir mount dizini oluşturun:

mkdir -p /opt/gdrive

Daha sonra aşağıdaki komutla Google Drive’ı rclone aracılığıyla bağlayın:

rclone mount MEKAITGDRIVE:MailcowYedek /opt/gdrive --vfs-cache-mode writes --daemon

Bağlantı doğrulamak için:

ls /opt/gdrive

Mount işlemi başarılı olduğunda terminal çıktısının son satırları aşağıdaki şekilde görünmelidir:

2025/11/04 14:18:44 DEBUG : Root: 
2025/11/04 14:18:44 DEBUG : >Root: node=/, err=<nil>

İşlem tamamlandıktan sonra CTRL + C ile terminal oturumunu sonlandırabilirsiniz.

2. Kalıcı Mount Servisi Oluşturma

Mount işlemini sistem başlangıcında otomatik hale getirmek için yeni bir servis dosyası oluşturun:

nano /etc/systemd/system/rclone-gdrive.service

Aşağıdaki içeriği dosyaya ekleyin:

[Unit]
Description=Mount Google Drive via rclone
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/rclone mount MEKAITGDRIVE:MailcowYedek /opt/gdrive \
  --vfs-cache-mode writes \
  --vfs-cache-max-age 1h \
  --log-file /var/log/rclone-gdrive.log \
  --log-level INFO
ExecStop=/usr/bin/fusermount3 -u /opt/gdrive
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

Servisi etkinleştirin:

systemctl enable --now rclone-gdrive

Eğer aşağıdaki benzeri bir hata alırsanız:

fusermount: exec: "fusermount3": executable file not found in $PATH

fuse3 paketini yükleyin:

apt install fuse3 -y

Ardından eski mount’u temizleyip servisi yeniden başlatın:

fusermount3 -u /opt/gdrive 2>/dev/null
systemctl restart rclone-gdrive

3. Olası Bağlantı Sorunları

Zaman zaman aşağıdaki hata oluşabilir:

ls: reading directory '.': Input/output error

Bu durumda Google Drive erişim token’ınızın süresi dolmuştur. Yeni bir token oluşturarak rclone bağlantısını yenileyin.

4. Günlük Otomatik Yedekleme

Mailcow sistem yedeklerinin her gün saat 02:15’te alınması için aşağıdaki cron görevini ekleyin:

cat >/etc/cron.d/mailcow-backup <<'EOF'
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""

# Her gün 02:15'te yedek al
15 2 * * * root /usr/bin/printf '/opt/gdrive\n' | /usr/bin/bash /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all >> /var/log/mailcow-backup.log 2>&1
EOF

İzinleri ayarlayın:

chown root:root /etc/cron.d/mailcow-backup
chmod 644 /etc/cron.d/mailcow-backup
systemctl restart cron

5. Eski Yedeklerin Otomatik Temizlenmesi

Google Drive üzerinde 5 günden eski yedeklerin otomatik olarak silinmesi için aşağıdaki script’i oluşturun:

nano /usr/local/bin/mailcow-upload-gdrive.sh

İçeriği şu şekilde ekleyin:

#!/usr/bin/env bash
set -euo pipefail

# === Ayarlar ===
REMOTE="MEKAITGDRIVE"
DEST="${REMOTE}:MailcowYedek"
LOG="/var/log/mailcow-backup.log"
LOCK="/var/lock/mailcow-gdrive-cleanup.lock"

# === Tekil çalıştırma kilidi ===
exec 9>"$LOCK"
flock -n 9 || { echo "$(date '+%F %T') [cleanup] Atlandı: başka bir işlem çalışıyor." | tee -a "$LOG"; exit 0; }

echo "============================" >> "$LOG"
echo "$(date '+%F %T') [cleanup] Başlatıldı" | tee -a "$LOG"

# === Drive üzerinde 5 günden eski yedekleri temizle ===
echo "$(date '+%F %T') [cleanup] Drive: 5 günden eski içerik temizleniyor (${DEST})..." | tee -a "$LOG"

/usr/bin/rclone delete "${DEST}" \
  --min-age 5d \
  --fast-list \
  --drive-stop-on-upload-limit \
  >>"$LOG" 2>&1 || true

/usr/bin/rclone rmdirs "${DEST}" \
  --fast-list \
  --drive-stop-on-upload-limit \
  >>"$LOG" 2>&1 || true

echo "$(date '+%F %T') [cleanup] Drive temizlik tamamlandı." | tee -a "$LOG"
echo "$(date '+%F %T') [cleanup] Bitti" | tee -a "$LOG"
echo "============================" >> "$LOG"

Script’e çalıştırma izni verin:

chmod +x /usr/local/bin/mailcow-upload-gdrive.sh

Manuel test için:

/usr/local/bin/mailcow-upload-gdrive.sh

6. Günlük Otomatik Temizlik Görevi

Drive temizliğini her gün saat 01:15’te otomatik olarak çalıştırmak için cron görevini oluşturun:

cat >/etc/cron.d/mailcow-backup-upload <<'EOF'
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""

# Her gün 01:15'te Drive temizlik işlemi
15 1 * * * root /usr/local/bin/mailcow-upload-gdrive.sh
EOF

İzinleri düzenleyin:

chown root:root /etc/cron.d/mailcow-backup-upload
chmod 644 /etc/cron.d/mailcow-backup-upload
systemctl restart cron

7. Teknik Not

rclone, --vfs-cache-mode writes parametresiyle çalışırken yedekleme sırasında oluşan veriyi bellek üzerinde geçici olarak tutar. Bu önbellek yaklaşık 1 saat boyunca saklanır ve ardından otomatik olarak temizlenir. Bu yapı, performans ve veri güvenliği arasında dengeli bir çözüm sağlar.

Destek

Tüm sorularınız veya olası hata durumları için bizimle iletişime geçebilirsiniz:
📧 [email protected]