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.
İ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.
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
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.
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
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
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
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.
Tüm sorularınız veya olası hata durumları için bizimle iletişime geçebilirsiniz:
📧 [email protected]