Bu doküman, Mailcow e-posta sunucusu ile CyberPanel web yönetim paneli arasında tam otomatik bir yedekleme zincirinin nasıl kurulacağını anlatır.
Amaç, e-posta verilerinin günlük olarak güvenli bir şekilde yedeklenmesi ve bu yedeklerin CyberPanel üzerinden Google Drive bulut hesabına otomatik aktarılmasıdır.
Kurulum sonrası yapı şu şekilde çalışır:
| Sunucu | Rol | Alan Adı |
|---|---|---|
| Mailcow Sunucusu | E-posta sistemi ve yedekleme kaynağı | mail.test1.mekait.com |
| CyberPanel Sunucusu | Web panel, Google Drive yedekleyici | panel.test2.mekait.com |
| Google Drive | Uzun süreli dış yedekleme alanı | drive.google.com |
CyberPanel üzerinde yeni bir site oluşturulur:
backup-server.test3.mekait.com
Oluşturulan sitenin kök dizini:
/home/backup-server.test3.mekait.com/
Bu dizin altında Mailcow yedeklerinin toplanacağı klasör oluşturulur:
mkdir -p /home/backup-server.test3.mekait.com/public_html/mailyedek
chown -R backupuser:backupuser /home/backup-server.test3.mekait.com/public_html/mailyedek
Mailcow tarafında günlük yedeklerin yazılacağı uzak dizin, SSHFS üzerinden bağlanır:
apt install sshfs -y
mkdir -p /opt/backup-server3
sshfs -o allow_other,IdentityFile=/root/.ssh/id_rsa,reconnect \
[email protected]:/home/backup-server.test3.mekait.com/public_html/mailyedek \
/opt/backup-server3
Kalıcı hale getirmek için /etc/fstab dosyasına şu satır eklenir:
[email protected]:/home/backup-server.test3.mekait.com/public_html/mailyedek /opt/backup-server3 fuse.sshfs defaults,_netdev,allow_other,IdentityFile=/root/.ssh/id_rsa,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 0 0
Mailcow kendi yedekleme aracını (backup_and_restore.sh) kullanarak günlük yedekleri otomatik oluşturur.
Bu işlem, her gece 02:15’te cron aracılığıyla tetiklenir.
Cron dosyası:
/etc/cron.d/mailcow-backup
İçerik:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
15 2 * * * root /usr/bin/printf '/opt/backup-server3\n' | /bin/bash /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all >> /var/log/mailcow-backup.log 2>&1
Bu görev, her gün saat 02:15’te /opt/backup-server3 dizinine tam Mailcow yedeği alır.
Disk alanının dolmaması için, 2 günden eski yedekler her sabah 04:00’te otomatik silinir.
Cron dosyası:
/etc/cron.d/mailcow-cleanup
İçerik:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
0 4 * * * root find /opt/backup-server3 -maxdepth 1 -type d -name "mailcow-*" -mmin +2880 -exec rm -rf {} \; >> /var/log/mailcow-cleanup.log 2>&1
CyberPanel GUI üzerinden “Incremental Backups” sekmesinde Google Drive bağlantısı yapılandırılır.
Planlanan günlük veya haftalık görevler şu cron üzerinden çalışır:
0 0 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py Daily
0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py Weekly
Bu görevler manuel olarak da başlatılabilir.
Yedekleme görevini elle (anında) başlatmak için CyberPanel sunucusunda aşağıdaki komut kullanılır:
/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/IncScheduler.py Daily
Google Drive’a yükleme süreci şu log dosyasından izlenebilir:
tail -f /home/cyberpanel/logs/IncBackups.log
/opt/backup-server3Bu yapı sayesinde:
dipnot
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 04-15te Mailcow tam yedeği al
15 4 * * * root /usr/bin/printf '/opt/backup-server5\n' | /bin/bash /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all >> /var/log/mailcow-backup.log 2>&1
EOF
chmod 644 /etc/cron.d/mailcow-backup
systemctl restart cron
systemctl status cron
—————————————————————
cat >/etc/cron.d/mailcow-cleanup <<'EOF'
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
# Her sabah 03-55te 1 dakikadan eski yedekleri sil
55 3 * * * root find /opt/backup-server5 -maxdepth 1 -type d -name "mailcow-*" -mmin +1 -exec rm -rf {} \; >> /var/log/mailcow-cleanup.log 2>&1
EOF
chmod 644 /etc/cron.d/mailcow-cleanup
systemctl restart cron
systemctl status cron