Backup for mailcow — ghid
Instalare
- Modulul vine în mailcow Toolkit 0.7.0 sau mai nou (un pachet, câte o licență pe produs). Pe serverul mailcow, ca root, rulezi installer-ul Toolkit ca de obicei:
sudo ./install.sh --mailcow-dir /opt/mailcow-dockerized --name <instanță>, sau actualizezi Toolkit-ul din Sistem → Actualizări (Toolkit). Installer-ul copiazădata/web/mlw-backup/, instalează scriptul gazdei/usr/local/sbin/mlw-mailcow-backup-<instanță>, creează tabela istoricului și timer-ulmlw-mailcow-backup-<instanță>.timer(la fiecare 5 minute verifică dacă e momentul unei copii). - Instalează GnuPG pe server dacă lipsește:
apt install gnupg. - Deschide Sistem → Copii de siguranță din meniul de administrare mailcow.
Licență
Deschide Sistem → Actualizări (Toolkit) și găsește cardul Backup for mailcow: lipești cheia și o activezi sau pornești perioada de probă de 30 de zile. Din consolă: php /web/mlw-toolkit/cli.php activate mailcow-backup <CHEIE> în php-fpm-mailcow.
Fără licență validă copiile programate și încărcările pe Google Drive se opresc. Verificarea, restaurarea și ștergerea funcționează în continuare, ca să-ți poți recupera oricând datele.
Prima configurare
- Setări → Folderul local: o cale absolută pe server, ideal pe alt disc decât mailcow (de exemplu
/srv/backup/mailcowsau un disc montat). Se creează citibil doar de root. Lasă loc pentru circa două copii. - Criptare: apeși Setează cu generată (recomandat): fraza se arată o singură dată — păstreaz-o în afara serverului (manager de parole, hârtie). Sau alegi a mea și scrii de două ori una de cel puțin 12 caractere.
- Fă o copie acum, din cardul Stare, face prima copie; progresul și jurnalul apar în timp real.
Program, componente și rotație
În Setări:
- Copii programate pornite sau oprite; Orele (ora serverului, se pot pune mai multe, de ex.
03:15, 15:15) și Zilele. - Ce se salvează: e-mailul (vmail), cheile de criptare (crypt — necesare ca să citești e-mailul criptat), redis, rspamd, postfix, baza de date (SQL). Toate sunt bifate implicit.
- Copii păstrate local și Copii păstrate pe Drive: rămân ultimele N; cele mai vechi se șterg după fiecare copie.
- Fire de compresie pentru scriptul mailcow.
- E-mail: doar la eșec (implicit), după fiecare copie sau niciodată; adresa goală = adresa de notificare a Toolkit-ului.
O copie ratată cât serverul a fost oprit se face o dată când revine. Copiile programate rulează cu prioritate scăzută de procesor și disc.
Ce este o copie
backup_and_restore.sh al mailcow scrie componentele alese; modulul le pune într-o singură arhivă și o criptează cu GnuPG (AES-256, cu verificare de integritate) cu fraza ta:
| Fișier | Conținut |
|---|---|
mailcow-<gazdă>-<dată>.tar.gpg |
arhiva criptată (fișierele backup_*.tar.zst ale mailcow și mailcow.conf) |
mailcow-<gazdă>-<dată>.json |
manifestul: componente și mărimi, SHA-256 al arhivei, id-ul frazei, versiunile mailcow și Toolkit |
Fără mailcow: gpg -d mailcow-…tar.gpg > backup.tar cere fraza și dă înapoi folderul obișnuit de backup al mailcow.
Google Drive
Modulul folosește propriul tău client OAuth Google, deci accesul la Drive rămâne pe serverul tău:
- În Google Cloud Console creezi (sau alegi) un proiect și activezi Google Drive API.
- OAuth consent screen: tip External, adresa ta ca suport și contact; apoi Publish app („In production”). În modul de test Google oprește accesul după 7 zile.
- Credentials → Create credentials → OAuth client ID, tip Web application, cu adresa de întoarcere afișată în pagină:
https://<gazda interfeței mailcow>/mlw-backup/oauth.php. - Lipești Client ID-ul și secretul clientului la Google Drive în pagină, Salvează, apoi Conectează Google Drive și permiți accesul. Google poate avertiza că aplicația nu e verificată: e aplicația ta, continuă.
- În Setări pornești Urcă fiecare copie pe Google Drive și alegi numele folderului.
Scope-ul e drive.file: modulul vede doar fișierele create de el, niciodată restul Drive-ului. Încărcarea merge în bucăți de 32 MiB și continuă după o eroare de rețea. Testează listează folderul; Deconectează revocă accesul (copiile rămân pe Drive).
Verificare și restaurare
În Copii fiecare copie arată unde se află (local, Drive sau amândouă):
- Verifică: decriptează și citește toată arhiva (descărcată de pe Drive dacă nu e locală), fără să restaureze nimic.
- Restaurează…: bifezi componentele, scrii
RESTORE, confirmi. SHA-256 al arhivei e verificat față de manifest, arhiva e decriptată și căile din ea verificate, apoi fiecare componentă e restaurată cu pașii restaurării mailcow: containerele implicate sunt oprite și pornite din nou; baza de date oprește tot mailcow-ul câteva minute și preia datele de acces SQL dinmailcow.confal copiei. Ce s-a schimbat în acele componente după data copiei se pierde. Nu se forțează resincronizarea e-mailului; dacă o cutie arată greșit după:docker exec $(docker ps -qf name=dovecot-mailcow) doveadm force-resync -A '*'. - Șterge: șterge copia local și de pe Drive.
Un server nou
- Instalezi mailcow și Toolkit-ul, activezi licența (sau restaurezi fără ea).
- Criptare → a mea: scrii fraza veche (pe un server care are deja una, bifezi doar pentru copii vechi).
- Google Drive: folosești același client OAuth Google și conectezi; copiile vechi apar (modulul vede fișierele create de clientul lui).
- Restaurează… cea mai nouă copie, toate componentele.
Consolă și fișiere
Scriptul gazdei se poate rula și de mână (ca root): MLW_TK_CONF=/etc/mlw-mailcow-toolkit/<instanță>.conf mlw-mailcow-backup-<instanță> backup|verify NUME|list. Progresul e în data/hooks/phpfpm/.mlw-toolkit/backup/run.json și run.log; istoricul în tabela mlw_bk_run din baza mailcow. uninstall.sh păstrează copiile locale și pe cele de pe Drive.