Karena aku sekarang ditempatkan di bagian on premise products, jadi aku perlu ngulik lebih, terutama tentang Zimbra Mail Server yang lokasinya ada di klien (namanya juga on premise). Salah satu skill yang perlu dikuasai adalah migrasi mail server. Misalnya dari server dengan OS lama ke server dengan hardware dan OS yang lebih baru, atau skenario lainnya.
Aku baca salah satu artikel di internet dan aku coba tulis di sini sebagai catatanku juga.
Persiapan Migrasi
Ada beberapa hal yang perlu dipersiapkan, baik di server lama maupun di server baru. Di server lama, kita perlu akses root (bisa via SSH), info login akun admin Zimbra, dan storage yang cukup untuk file backup.

Di server baru juga gak jauh beda. Kita perlu siapkan server dengan OS dan Zimbra yang fresh, konfigurasi (seperti hostname) yang sama dengan server lama, akses root via SSH, dan juga ruang penyimpanan untuk hasil migrasi.
Lanjut ke langkah selanjutnya:
- Atur SSH Key. Konfigurasikan SSH Key dari akun root server baru agar bisa masuk ke akun root server lama tanpa kata sandi.
- Turunkan TTL MX. Ubah nilai TTL pada MX record domain menjadi 500 detik agar proses perpindahan IP domain nanti berjalan cepat.
- Agendakan di luar jam kerja.
- Buat folder cadangan. Jalankan perintah ini di server lama dan server baru menggunakan user root untuk menyiapkan folder khusus:
mkdir /backups/zmigrate chown zimbra.zimbra /backups/zmigrate su - zimbraCatatan: Untuk perintah yang berkaitan dengan Zimbra, gunakan user: zimbra untuk menghindari kendala hak akses.
Proses Backup di Server Lama
Dari server lama, masuk ke direktori /backups/zmigrate dan kumpulkan data-data seperti:
- Daftar domain:
zmprov gad > domains.txt. Bersihkan nama domain utama milik hostname dari file ini karena server baru sudah otomatis membuatnya saat instalasi awal. - Daftar akun admin:
zmprov gaaa > admins.txt. - Daftar akun (semua):
zmprov -l gaa > emails.txt. Akun sistem seperti spam_xxx, virus_xxx, ham_xxx, galsync_xxx dapat dikecualikan dari daftar. - Distribution lists (DL):
zmprov gadl > /backups/zmigrate/distlist.txt - Mailing lists:
mkdir /backups/zmigrate/distributinlist_members for i in `cat /backups/zmigrate/distributinlist.txt`; do zmprov gdlm $i > /backups/zmigrate/distributinlist_members/$i.txt ; echo "$i"; done - Password:
mkdir userpass for i in `cat emails.txt`; do zmprov -l ga $i userPassword | grep userPassword: | awk '{ print $2}' > userpass/$i.shadow; done - Info akun: Seperti display & given name:
mkdir userdata for i in `cat emails.txt`; do zmprov ga $i | grep -i Name: > userdata/$i.txt ; done - Isi inbox (data email):
for email incat /backups/zmigrate/emails.txt; do zmmailbox -z -m $email getRestURL '/?fmt=tgz' > $email.tgz ; echo $email ; done - Alias:
mkdir -p alias/ for i in `cat emails.txt`; do zmprov ga $i | grep zimbraMailAlias | awk '{print $2}' > alias/$i.txt ; echo $i ; done find alias/ -type f -empty | xargs -n1 rm -v zimbra@zimbra:/backups/zmigrate$ find alias/ -type f -empty | xargs -n1 rm -v // untuk hapus file kosong tanpa alias - Signatures:
#!/bin/bash mkdir signature for i in `cat emails.txt`; do zmprov ga $i zimbraPrefMailSignatureHTML > /tmp/signature; sed -i -e "1d" /tmp/signature ; sed 's/zimbraPrefMailSignatureHTML: //g' /tmp/signature > signatures/$i.signature ; rm -rf /tmp/signature; `zmprov ga $i zimbraSignatureName > /tmp/name` ; sed -i -e "1d" /tmp/name ; sed 's/zimbraSignatureName: //g' /tmp/name > signatures/$i.name ; rm -rf /tmp/name ; done - Filter:
#!/bin/bash mkdir filter/ for i in `cat emails.txt`; do zmprov ga $i zimbraMailSieveScript > /tmp/filter sed -i -e "1d" /tmp/filter sed 's/zimbraMailSieveScript: //g' /tmp/filter > filter/$i.filter rm -f /tmp/filter echo "Filter downloaded for .... $i" done
Kirim Data ke Server Baru
Proses ini perlu menggunakan screen agar bisa berjalan di latar belakang dan mengurangi risiko proses transfer data berhenti/gagal saat komputer kehilangan koneksi ke server. Proses migrasi/kirim data ini menggunakan rsync.
rsync -avp -e 'ssh -p 22' root@ip-server-lama:/backups/zmigrate /backups/
Restore di Server Baru
Masuk sebagai user: zimbra dan masuk ke direktori /backups/zmigrate.
- Restore domain:
for i incat /backups/zmigrate/domains.txt; do zmprov cd $i zimbraAuthMech zimbra ; echo $i ; done - Pembuatan akun & pass:
# Buat skrip bernama createacct.sh dan jalankan USERPASS="/backups/zmigrate/userpass" USERDDATA="/backups/zmigrate/userdata" USERS="/backups/zmigrate/emails.txt" for i in `cat $USERS` do givenName=$(grep givenName: $USERDDATA/$i.txt | cut -d ":" -f2) displayName=$(grep displayName: $USERDDATA/$i.txt | cut -d ":" -f2) shadowpass=$(cat $USERPASS/$i.shadow) zmprov ca $i CHANGEme cn "$givenName" displayName "$displayName" givenName "$givenName" zmprov ma $i userPassword "$shadowpass" done - Restore isi email:
for i incat /backups/zmigrate/emails.txt; do zmmailbox -z -m $i postRestURL "/?fmt=tgz&resolve=skip" /backups/zmigrate/$i.tgz ; echo "$i -- finished "; done. - Restore DL:
[zimbra@zimbra zmigrate]$ cat restoredist.sh #!/bin/bash # add all memebers to each of these distribution lists for i in `cat distributinlist.txt` do for j in `grep -v '#' distributinlist_members/$i.txt |grep '@'` do zmprov adlm $i $j echo " $j member has been added to list $i" done done - Restore Alias:
#!/bin/bash for i in `cat /backups/zmigrate/emails.txt` do if [ -f "alias/$i.txt" ]; then for j in `grep '@' /backups/zmigrate/alias/$i.txt` do zmprov aaa $i $j echo "$i HAS ALIAS $j --- Restored" done fi done - Restore Signatures:
#!/bin/bash for i in `cat emails.txt`; do zmprov ma $i zimbraSignatureName "`cat signatures/$i.name`"; zmprov ma $i zimbraPrefMailSignatureHTML "`cat signatures/$i.signature`"; zmprov ga $i zimbraSignatureId > /tmp/firmaid; sed -i -e "1d" /tmp/firmaid; firmaid=`sed 's/zimbraSignatureId: //g' /tmp/firmaid`; zmprov ma $i zimbraPrefDefaultSignatureId "$firmaid"; zmprov ma $i zimbraPrefForwardReplySignatureId "$firmaid"; rm -rf /tmp/firmaid; echo $i "done!"; done - Restore Fiters:
#!/bin/bash for i in `cat emails.txt`; do zmprov ma $i zimbraMailSieveScript "`cat filter/$i.filter`"; echo "Filter Restore for account ... $i"; done
Finalisasi
- Matikan service Zimbra di server lama.
- Arahkan IP publik di DNS (A & MX record) ke IP server baru.
- Testing kirim beberapa email untuk memastikan proses kirim-terima email bekerja dengan normal.
- Amankan server baru dengan memasang Sertifikat SSL dan mengonfigurasi firewall.
Tulisan kali ini sampai di sini ya. Sampai jumpa. Bye.
