差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

兩邊的前次修訂版 前次修改
下次修改
前次修改
tech:iredmail:migrate_to_mailu [2025/04/29 18:22] – [前置條件] jonathantech:iredmail:migrate_to_mailu [2025/04/29 18:29] (目前版本) – [6. 關閉 iRedMail 伺服器] jonathan
行 34: 行 34:
 在 iRedMail 伺服器上備份所有必要資料,以防止資料遺失。 在 iRedMail 伺服器上備份所有必要資料,以防止資料遺失。
  
-  1. **停止郵件服務(可選)**: +  **停止郵件服務(可選)**: 
-     * 若短暫停機可接受,停止服務以避免資料不一致: +     * 若短暫停機可接受,停止服務以避免資料不一致:<code bash>
-<code bash>+
 systemctl stop postfix dovecot amavisd clamd systemctl stop postfix dovecot amavisd clamd
 </code> </code>
-  2. **備份郵件資料**:+  **備份郵件資料**:
      * 郵件儲存路徑通常為 ''/var/vmail/vmail1''      * 郵件儲存路徑通常為 ''/var/vmail/vmail1''
-     * 使用 ''rsync'' 備份到本地: +     * 使用 ''rsync'' 備份到本地:<code bash>
-<code bash>+
 rsync -av /var/vmail/vmail1 /backup/vmail/ rsync -av /var/vmail/vmail1 /backup/vmail/
 </code> </code>
-  3. **備份資料庫**:+  **備份資料庫**:
      * 根據後端類型備份資料庫:      * 根據後端類型備份資料庫:
-       * **MySQL/MariaDB**: +       * **MySQL/MariaDB**:<code bash>
-<code bash>+
 mysqldump -u root -p --all-databases > /backup/mysql_all_databases.sql mysqldump -u root -p --all-databases > /backup/mysql_all_databases.sql
 </code> </code>
-       * **PostgreSQL**: +       * **PostgreSQL**:<code bash>
-<code bash>+
 pg_dumpall -U postgres > /backup/postgres_all_databases.sql pg_dumpall -U postgres > /backup/postgres_all_databases.sql
 </code> </code>
-       * **OpenLDAP**: +       * **OpenLDAP**:<code bash>
-<code bash>+
 slapcat -l /backup/ldap_backup.ldif slapcat -l /backup/ldap_backup.ldif
 </code> </code>
-  4. **備份設定檔**: +  **備份設定檔**: 
-     * 備份 iRedMail 設定檔(供參考): +     * 備份 iRedMail 設定檔(供參考):<code bash>
-<code bash>+
 tar -zcvf /backup/iredmail_configs.tar.gz /etc/postfix /etc/dovecot /etc/amavisd /etc/nginx /opt/www tar -zcvf /backup/iredmail_configs.tar.gz /etc/postfix /etc/dovecot /etc/amavisd /etc/nginx /opt/www
 </code> </code>
-  5. **備份 SSL 憑證**: +  **備份 SSL 憑證**: 
-     * 備份憑證(若非 Let's Encrypt): +     * 備份憑證(若非 Let's Encrypt):<code bash>
-<code bash>+
 tar -zcvf /backup/ssl_certs.tar.gz /etc/pki/tls/certs/iRedMail.crt /etc/pki/tls/private/iRedMail.key tar -zcvf /backup/ssl_certs.tar.gz /etc/pki/tls/certs/iRedMail.crt /etc/pki/tls/private/iRedMail.key
 </code> </code>
-  6. **備份 SOGo 資料(若使用)**: +  **備份 SOGo 資料(若使用)**: 
-     * 若使用 SOGo(行事曆和聯絡人同步),執行備份腳本: +     * 若使用 SOGo(行事曆和聯絡人同步),執行備份腳本:<code bash>
-<code bash>+
 /var/vmail/backup/backup_sogo.sh /var/vmail/backup/backup_sogo.sh
 </code> </code>
行 79: 行 71:
 在 Mailu 伺服器上建立與 iRedMail 相同的網域和使用者帳號,為郵件同步做準備。 在 Mailu 伺服器上建立與 iRedMail 相同的網域和使用者帳號,為郵件同步做準備。
  
-  1. **確認 Mailu 運行**: +  **確認 Mailu 運行**: 
-     * 檢查 Docker Compose 服務狀態: +     * 檢查 Docker Compose 服務狀態:<code bash>
-<code bash>+
 docker-compose -f /path/to/mailu/docker-compose.yml ps docker-compose -f /path/to/mailu/docker-compose.yml ps
 </code> </code>
-     * 確保 Web 管理介面(''https://<mailu_server_ip>/admin'')可訪問。 +     * 確保 Web 管理介面(''https://mailu_server_ip/admin'')可訪問。 
-  2. **新增網域**: +  **新增網域**: 
-     * 登入 Mailu Web 管理介面(預設帳號:''admin@<domain>'',密碼在 ''mailu.env'' 中)。+     * 登入 Mailu Web 管理介面(預設帳號:''admin@domain'',密碼在 ''mailu.env'' 中)。
      * 在「Domains」選項中新增與 iRedMail 相同的網域(例如 ''example.com'')。      * 在「Domains」選項中新增與 iRedMail 相同的網域(例如 ''example.com'')。
-  3. **匯入使用者帳號**:+  **匯入使用者帳號**:
      * 從 iRedMail 資料庫匯出使用者清單:      * 從 iRedMail 資料庫匯出使用者清單:
-       * **MySQL/MariaDB**: +       * **MySQL/MariaDB**:<code bash>
-<code bash>+
 mysql -u root -p vmail -e "SELECT username, password FROM mailbox WHERE active=1;" > /backup/users.csv mysql -u root -p vmail -e "SELECT username, password FROM mailbox WHERE active=1;" > /backup/users.csv
 </code> </code>
-       * **PostgreSQL**: +       * **PostgreSQL**:<code bash>
-<code bash>+
 psql -U postgres -d vmail -c "COPY (SELECT username, password FROM mailbox WHERE active=1) TO '/backup/users.csv' WITH CSV HEADER;" psql -U postgres -d vmail -c "COPY (SELECT username, password FROM mailbox WHERE active=1) TO '/backup/users.csv' WITH CSV HEADER;"
 </code> </code>
-       * **OpenLDAP**: +       * **OpenLDAP**:<code bash>
-<code bash>+
 ldapsearch -x -D "cn=Manager,dc=xx,dc=xx" -W -b "o=domains,dc=xx,dc=xx" "(objectClass=mailUser)" mail userPassword > /backup/users.ldif ldapsearch -x -D "cn=Manager,dc=xx,dc=xx" -W -b "o=domains,dc=xx,dc=xx" "(objectClass=mailUser)" mail userPassword > /backup/users.ldif
 </code> </code>
      * 在 Mailu 上手動或批量新增使用者:      * 在 Mailu 上手動或批量新增使用者:
        * 使用 Web 管理介面逐一新增使用者(適合少量帳號)。        * 使用 Web 管理介面逐一新增使用者(適合少量帳號)。
-       * 或使用 Mailu CLI 批量匯入(參考 [[https://mailu.io/master/cli.html|Mailu CLI 文件]]): +       * 或使用 Mailu CLI 批量匯入(參考 [[https://mailu.io/master/cli.html|Mailu CLI 文件]]):<code bash>
-<code bash>+
 docker-compose exec admin flask mailu admin [email protected] example.com password docker-compose exec admin flask mailu admin [email protected] example.com password
 </code> </code>
        * 將 iRedMail 的密碼(通常為 SSHA 或 CRYPT 格式)轉換為 Mailu 支援的格式(例如 bcrypt),或重設密碼並通知使用者。        * 將 iRedMail 的密碼(通常為 SSHA 或 CRYPT 格式)轉換為 Mailu 支援的格式(例如 bcrypt),或重設密碼並通知使用者。
-  4. **設定 DKIM**:+  **設定 DKIM**:
      * 在 Mailu 管理介面中為網域生成 DKIM 密鑰,並更新 DNS 記錄。      * 在 Mailu 管理介面中為網域生成 DKIM 密鑰,並更新 DNS 記錄。
      * 若希望重用 iRedMail 的 DKIM 密鑰,需從 ''/etc/amavisd/dkim/'' 複製並配置到 Mailu。      * 若希望重用 iRedMail 的 DKIM 密鑰,需從 ''/etc/amavisd/dkim/'' 複製並配置到 Mailu。
行 116: 行 103:
 使用 ''imapsync'' 將 iRedMail 的郵件同步到 Mailu,避免直接複製 Maildir 檔案(因 Mailu 和 iRedMail 的 Maildir 結構可能不同)。 使用 ''imapsync'' 將 iRedMail 的郵件同步到 Mailu,避免直接複製 Maildir 檔案(因 Mailu 和 iRedMail 的 Maildir 結構可能不同)。
  
-  1. **安裝 imapsync**: +  **安裝 imapsync**: 
-     * 在中間伺服器(或新舊伺服器之一)安裝 ''imapsync'' +     * 在中間伺服器(或新舊伺服器之一)安裝 ''imapsync'':<code bash>
-<code bash>+
 apt update && apt install imapsync apt update && apt install imapsync
 </code> </code>
-  2. **準備同步指令**: +  **準備同步指令**: 
-     * 針對每個使用者執行 ''imapsync'',範例: +     * 針對每個使用者執行 ''imapsync'',範例:<code bash>
-<code bash>+
 imapsync --host1 <iredmail_ip> --user1 [email protected] --password1 <iredmail_password> \ imapsync --host1 <iredmail_ip> --user1 [email protected] --password1 <iredmail_password> \
          --host2 <mailu_ip> --user2 [email protected] --password2 <mailu_password> \          --host2 <mailu_ip> --user2 [email protected] --password2 <mailu_password> \
行 133: 行 118:
        * ''--syncinternaldates'':保留郵件的原始日期。        * ''--syncinternaldates'':保留郵件的原始日期。
        * ''--allowsizemismatch'':忽略可能的檔案大小差異。        * ''--allowsizemismatch'':忽略可能的檔案大小差異。
-  3. **批量同步**: +  **批量同步**: 
-     * 編寫腳本批量同步所有使用者: +     * 編寫腳本批量同步所有使用者:<code bash>
-<code bash>+
 #!/bin/bash #!/bin/bash
 while IFS=, read -r username password; do while IFS=, read -r username password; do
行 144: 行 128:
 </code> </code>
      * 確保 ''users.csv'' 格式正確,且 Mailu 的密碼已設定。      * 確保 ''users.csv'' 格式正確,且 Mailu 的密碼已設定。
-  4. **監控同步**:+  **監控同步**:
      * 檢查 ''imapsync'' 日誌,確保無錯誤。      * 檢查 ''imapsync'' 日誌,確保無錯誤。
      * 若同步失敗,檢查防火牆(確保 993 端口開放)或帳號密碼。      * 若同步失敗,檢查防火牆(確保 993 端口開放)或帳號密碼。
行 151: 行 135:
 在新伺服器上測試 Mailu 的功能,確保資料完整。 在新伺服器上測試 Mailu 的功能,確保資料完整。
  
-  1. **啟動 Mailu 服務**: +  **啟動 Mailu 服務**: 
-     * 確保所有 Docker 容器運行: +     * 確保所有 Docker 容器運行:<code bash>
-<code bash>+
 docker-compose -f /path/to/mailu/docker-compose.yml up -d docker-compose -f /path/to/mailu/docker-compose.yml up -d
 </code> </code>
-  2. **測試功能**: +  **測試功能**: 
-     * 登入 Mailu Webmail(''https://<mailu_server_ip>/webmail''),檢查郵件是否完整。+     * 登入 Mailu Webmail(''https://mailu_server_ip/webmail''),檢查郵件是否完整。
      * 使用郵件客戶端(例如 Thunderbird)測試 IMAP(端口 993)、SMTP(端口 587)和 POP3(端口 995)。      * 使用郵件客戶端(例如 Thunderbird)測試 IMAP(端口 993)、SMTP(端口 587)和 POP3(端口 995)。
      * 發送測試郵件,確認 SMTP 和 DKIM 簽章正常。      * 發送測試郵件,確認 SMTP 和 DKIM 簽章正常。
      * 檢查反垃圾郵件(Rspamd)是否有效。      * 檢查反垃圾郵件(Rspamd)是否有效。
-  3. **檢查日誌**: +  **檢查日誌**: 
-     * 查看 Mailu 日誌: +     * 查看 Mailu 日誌:<code bash>
-<code bash>+
 docker-compose -f /path/to/mailu/docker-compose.yml logs docker-compose -f /path/to/mailu/docker-compose.yml logs
 </code> </code>
      * 檢查 Dovecot 和 Postfix 日誌(位於 Mailu 容器的 ''/var/log/'')。      * 檢查 Dovecot 和 Postfix 日誌(位於 Mailu 容器的 ''/var/log/'')。
-  4. **驗證 SOGo 資料(若適用)**:+  **驗證 SOGo 資料(若適用)**:
      * Mailu 不原生支援 SOGo(行事曆和聯絡人同步)。若 iRedMail 使用 SOGo,需額外部署 SOGo 容器並還原資料:      * Mailu 不原生支援 SOGo(行事曆和聯絡人同步)。若 iRedMail 使用 SOGo,需額外部署 SOGo 容器並還原資料:
        * 將 iRedMail 的 SOGo 備份(''/var/vmail/backup/sogo/'')傳輸到新伺服器。        * 將 iRedMail 的 SOGo 備份(''/var/vmail/backup/sogo/'')傳輸到新伺服器。
行 175: 行 157:
 將 DNS 記錄指向 Mailu 伺服器,完成遷移。 將 DNS 記錄指向 Mailu 伺服器,完成遷移。
  
-  1. **更新 DNS**:+  **更新 DNS**:
      * 修改網域的 A 記錄,將 ''mail.example.com'' 指向 Mailu 伺服器 IP。      * 修改網域的 A 記錄,將 ''mail.example.com'' 指向 Mailu 伺服器 IP。
      * 更新 MX 記錄,指向 Mailu 的 FQDN。      * 更新 MX 記錄,指向 Mailu 的 FQDN。
      * 更新 SPF、DKIM、DMARC 記錄,確保與 Mailu 配置一致。      * 更新 SPF、DKIM、DMARC 記錄,確保與 Mailu 配置一致。
-  2. **等待 DNS 傳播**:+  **等待 DNS 傳播**:
      * DNS 更新可能需要 24-48 小時。      * DNS 更新可能需要 24-48 小時。
      * 期間保持 iRedMail 伺服器運行,接收新郵件。      * 期間保持 iRedMail 伺服器運行,接收新郵件。
-  3. **最終同步**:+  **最終同步**:
      * 在 DNS 傳播完成前,若 iRedMail 收到新郵件,再次運行 ''imapsync'' 同步增量資料。      * 在 DNS 傳播完成前,若 iRedMail 收到新郵件,再次運行 ''imapsync'' 同步增量資料。
  
行 188: 行 170:
 確認 Mailu 運行正常且無郵件遺失後,關閉 iRedMail 伺服器。 確認 Mailu 運行正常且無郵件遺失後,關閉 iRedMail 伺服器。
  
-  1. **停止服務**: +  **停止服務**:<code bash>
-<code bash>+
 systemctl stop postfix dovecot amavisd clamd nginx systemctl stop postfix dovecot amavisd clamd nginx
 </code> </code>
-  2. **備份最終資料**:+  **備份最終資料**:
      * 再次備份 iRedMail 資料存檔。      * 再次備份 iRedMail 資料存檔。
-  3. **關閉伺服器**:+  **關閉伺服器**:
      * 根據需求關閉或重新利用 iRedMail 伺服器。      * 根據需求關閉或重新利用 iRedMail 伺服器。
  
  • tech/iredmail/migrate_to_mailu.1745922144.txt.gz
  • 上一次變更: 2025/04/29 18:22
  • jonathan