差異處

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

連向這個比對檢視

下次修改
前次修改
tech:iredmail:migrate_to_mailu [2025/04/29 18:20] – 建立 jonathantech:iredmail:migrate_to_mailu [2025/04/29 18:29] (目前版本) – [6. 關閉 iRedMail 伺服器] jonathan
行 5: 行 5:
  
 ===== 適用範圍 ===== ===== 適用範圍 =====
- +  * **來源伺服器**:運行 iRedMail 的郵件伺服器(支援 MySQL/MariaDB、PostgreSQL 或 OpenLDAP 後端)。 
-  * 來源伺服器:運行 iRedMail 的郵件伺服器(支援 MySQL/MariaDB、PostgreSQL 或 OpenLDAP 後端)。 +  * **目標伺服器**:運行 Mailu 的新伺服器(使用 Docker Compose 部署)。 
-  * 目標伺服器:運行 Mailu 的新伺服器(使用 Docker Compose 部署)。 +  * **目標**:遷移所有信箱、郵件、網域設定,確保服務無縫轉移。
-  * 目標:遷移所有信箱、郵件、網域設定,確保服務無縫轉移。+
  
 ===== 前置條件 ===== ===== 前置條件 =====
 +  - **確認 iRedMail 環境**:
 +     * 檢查 iRedMail 版本(''/etc/iredmail-release'')。
 +     * 確認後端類型(MySQL/MariaDB、PostgreSQL 或 OpenLDAP)。
 +     * 確保服務正常運行,無資料損壞。
 +  - **Mailu 環境準備**:
 +     * 新伺服器已安裝 Docker 和 Docker Compose。
 +     * Mailu 已根據官方文件([[https://mailu.io/|Mailu 官方文件]])部署完成,並配置好網域和基本設定。
 +     * 確保 Mailu 的 IMAP、SMTP 和 Webmail 服務正常運行。
 +  - **工具準備**:
 +     * 安裝 ''imapsync'' 用於郵件同步([[https://imapsync.lamiral.info/|IMAPSync 官網]])。
 +     * 使用 ''rsync'' 或 ''scp'' 進行資料傳輸。
 +     * 確保新舊伺服器之間可透過 SSH 連線。
 +  - **管理員權限**:
 +     * 取得 iRedMail 和 Mailu 伺服器的 root 權限。
 +     * 準備 iRedMail 資料庫的 root 帳號密碼。
 +  - **DNS 設定**:
 +     * 確認網域的 MX、A、SPF、DKIM、DMARC 記錄可用於新伺服器。
 +     * 建議在遷移前降低 DNS TTL(例如 300 秒),以加快切換。
  
-  - 確認 iRedMail 環境: +===== 驟 =====
-    * 檢查 iRedMail 版本(/etc/iredmail-release)。 +
-    * 確認後端類型(MySQL/MariaDB、PostgreSQL 或 OpenLDAP)。 +
-    * 確保服務正常運行,無資料損壞。 +
-  - Mailu 環境準備: +
-    * 新伺服器已安裝 Docker 和 Docker Compose。 +
-    * Mailu 已根據官方文件(https://mailu.io/)部署完成,並配置好網域和基本設定。 +
-    * 確保 Mailu 的 IMAP、SMTP 和 Webmail 服務正常運行。 +
-  - 工具準備: +
-    * 安裝 imapsync 用於郵件同(https://imapsync.lamiral.info/)。 +
-    * 使用 rsync 或 scp 進行資料傳輸。 +
-    * 確保新舊伺服器之間可透過 SSH 連線。 +
-  - 管理員權限: +
-    * 取得 iRedMail 和 Mailu 伺服器的 root 權限。 +
-    * 準備 iRedMail 資料庫的 root 帳號密碼。 +
-  - DNS 設定: +
-    * 確認網域的 MX、A、SPF、DKIM、DMARC 記錄可用於新伺服器。 +
-    * 建議在遷移前降低 DNS TTL(例如 300 秒),以加快切換。+
  
-===== 步驟 ===== 
 ==== 1. 備份 iRedMail 資料 ==== ==== 1. 備份 iRedMail 資料 ====
 在 iRedMail 伺服器上備份所有必要資料,以防止資料遺失。 在 iRedMail 伺服器上備份所有必要資料,以防止資料遺失。
  
-=== 1.1 停止郵件服務(可選): === +  - **停止郵件服務(可選)**: 
-若短暫停機可接受,停止服務以避免資料不一致:systemctl stop postfix dovecot amavisd clamd+     * 若短暫停機可接受,停止服務以避免資料不一致:<code bash> 
 +systemctl stop postfix dovecot amavisd clamd 
 +</code> 
 +  - **備份郵件資料**: 
 +     * 郵件儲存路徑通常為 ''/var/vmail/vmail1''。 
 +     * 使用 ''rsync'' 備份到本地:<code bash> 
 +rsync -av /var/vmail/vmail1 /backup/vmail/ 
 +</code> 
 +  - **備份資料庫**: 
 +     * 根據後端類型備份資料庫: 
 +       * **MySQL/MariaDB**:<code bash> 
 +mysqldump -u root -p --all-databases > /backup/mysql_all_databases.sql 
 +</code> 
 +       * **PostgreSQL**:<code bash> 
 +pg_dumpall -U postgres > /backup/postgres_all_databases.sql 
 +</code> 
 +       * **OpenLDAP**:<code bash> 
 +slapcat -l /backup/ldap_backup.ldif 
 +</code> 
 +  - **備份設定檔**: 
 +     * 備份 iRedMail 設定檔(供參考):<code bash> 
 +tar -zcvf /backup/iredmail_configs.tar.gz /etc/postfix /etc/dovecot /etc/amavisd /etc/nginx /opt/www 
 +</code> 
 +  - **備份 SSL 憑證**: 
 +     * 備份憑證(若非 Let's Encrypt):<code bash> 
 +tar -zcvf /backup/ssl_certs.tar.gz /etc/pki/tls/certs/iRedMail.crt /etc/pki/tls/private/iRedMail.key 
 +</code> 
 +  - **備份 SOGo 資料(若使用)**: 
 +     * 若使用 SOGo(行事曆和聯絡人同步),執行備份腳本:<code bash> 
 +/var/vmail/backup/backup_sogo.sh 
 +</code> 
 +     * 備份檔案儲存在 ''/var/vmail/backup/sogo/<year>/<month>/''
  
- +==== 2. 在 Mailu 上設定網域與使用者 ====
-=== 1.2 備份郵件資料: === +
-  * 郵件儲存路徑通常為 /var/vmail/vmail1。 +
-  * 使用 rsync 備份到本地:<cli>rsync -av /var/vmail/vmail1 /backup/vmail/</cli> +
- +
-=== 1.3 備份資料庫: === +
-  * 根據後端類型備份資料庫: +
-  * MySQL/MariaDB:<cli>mysqldump -u root -p --all-databases > /backup/mysql_all_databases.sql</cli> +
- +
- +
-PostgreSQL:pg_dumpall -U postgres > /backup/postgres_all_databases.sql +
- +
- +
-OpenLDAP:slapcat -l /backup/ldap_backup.ldif +
- +
- +
- +
- +
- +
- +
-備份設定檔: +
-備份 iRedMail 設定檔(供參考):tar -zcvf /backup/iredmail_configs.tar.gz /etc/postfix /etc/dovecot /etc/amavisd /etc/nginx /opt/www +
- +
- +
- +
- +
-備份 SSL 憑證: +
-備份憑證(若非 Let's Encrypt):tar -zcvf /backup/ssl_certs.tar.gz /etc/pki/tls/certs/iRedMail.crt /etc/pki/tls/private/iRedMail.key +
- +
- +
- +
- +
-備份 SOGo 資料(若使用): +
-若使用 SOGo(行事曆和聯絡人同步),執行備份腳本:/var/vmail/backup/backup_sogo.sh +
- +
- +
-備份檔案儲存在 /var/vmail/backup/sogo/<year>/<month>/。 +
- +
- +
- +
-2. 在 Mailu 上設定網域與使用者+
 在 Mailu 伺服器上建立與 iRedMail 相同的網域和使用者帳號,為郵件同步做準備。 在 Mailu 伺服器上建立與 iRedMail 相同的網域和使用者帳號,為郵件同步做準備。
  
-確認 Mailu 運行: +  - **確認 Mailu 運行**: 
-檢查 Docker Compose 服務狀態:docker-compose -f /path/to/mailu/docker-compose.yml ps+     * 檢查 Docker Compose 服務狀態:<code bash> 
 +docker-compose -f /path/to/mailu/docker-compose.yml ps 
 +</code> 
 +     * 確保 Web 管理介面(''https://mailu_server_ip/admin'')可訪問。 
 +  - **新增網域**: 
 +     * 登入 Mailu Web 管理介面(預設帳號:''admin@domain'',密碼在 ''mailu.env'' 中)。 
 +     * 在「Domains」選項中新增與 iRedMail 相同的網域(例如 ''example.com'')。 
 +  - **匯入使用者帳號**: 
 +     * 從 iRedMail 資料庫匯出使用者清單: 
 +       * **MySQL/MariaDB**:<code bash> 
 +mysql -u root -p vmail -e "SELECT username, password FROM mailbox WHERE active=1;" > /backup/users.csv 
 +</code> 
 +       * **PostgreSQL**:<code bash> 
 +psql -U postgres -d vmail -c "COPY (SELECT username, password FROM mailbox WHERE active=1) TO '/backup/users.csv' WITH CSV HEADER;" 
 +</code> 
 +       * **OpenLDAP**:<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 
 +</code> 
 +     * 在 Mailu 上手動或批量新增使用者: 
 +       * 使用 Web 管理介面逐一新增使用者(適合少量帳號)。 
 +       * 或使用 Mailu CLI 批量匯入(參考 [[https://mailu.io/master/cli.html|Mailu CLI 文件]]):<code bash> 
 +docker-compose exec admin flask mailu admin [email protected] example.com password 
 +</code> 
 +       * 將 iRedMail 的密碼(通常為 SSHA 或 CRYPT 格式)轉換為 Mailu 支援的格式(例如 bcrypt),或重設密碼並通知使用者。 
 +  - **設定 DKIM**: 
 +     * 在 Mailu 管理介面中為網域生成 DKIM 密鑰,並更新 DNS 記錄。 
 +     * 若希望重用 iRedMail 的 DKIM 密鑰,需從 ''/etc/amavisd/dkim/'' 複製並配置到 Mailu。
  
 +==== 3. 同步郵件資料 ====
 +使用 ''imapsync'' 將 iRedMail 的郵件同步到 Mailu,避免直接複製 Maildir 檔案(因 Mailu 和 iRedMail 的 Maildir 結構可能不同)。
  
-確保 Web 管理介面(https://<mailu_server_ip>/admin)可訪問。 +  **安裝 imapsync**: 
- +     * 在中間伺服器(或新舊伺服器之一)安裝 ''imapsync''<code bash> 
- +apt update && apt install imapsync 
-新增網域: +</code> 
-登入 Mailu Web 管理介面(預設帳號:admin@<domain>,密碼在 mailu.env 中)。 +  - **準備同步指令**: 
-在「Domains」選項中新增與 iRedMail 相同的網域(例如 example.com)。 +     * 針對每個使用者執行 ''imapsync'',範例:<code bash> 
- +imapsync --host1 <iredmail_ip> --user1 [email protected] --password1 <iredmail_password> \
- +
-匯入使用者帳號: +
-從 iRedMail 資料庫匯出使用者清單: +
-MySQL/MariaDB:mysql -u root -p vmail -e "SELECT username, password FROM mailbox WHERE active=1;" > /backup/users.csv +
- +
- +
-PostgreSQL:psql -U postgres -d vmail -c "COPY (SELECT username, password FROM mailbox WHERE active=1) TO '/backup/users.csv' WITH CSV HEADER;" +
- +
- +
-OpenLDAP:ldapsearch -x -D "cn=Manager,dc=xx,dc=xx" -W -b "o=domains,dc=xx,dc=xx" "(objectClass=mailUser)" mail userPassword > /backup/users.ldif +
- +
- +
- +
- +
-在 Mailu 上手動或批量新增使用者: +
-使用 Web 管理介面逐一新增使用者(適合少量帳號)。 +
-或使用 Mailu CLI 批量匯入(需參考 Mailu 文件:https://mailu.io/master/cli.html):docker-compose exec admin flask mailu admin [email protected] example.com password +
- +
- +
-將 iRedMail 的密碼(通常為 SSHA 或 CRYPT 格式)轉換為 Mailu 支援的格式(例如 bcrypt),或重設密碼並通知使用者。 +
- +
- +
- +
- +
-設定 DKIM: +
-在 Mailu 管理介面中為網域生成 DKIM 密鑰,並更新 DNS 記錄。 +
-若希望重用 iRedMail 的 DKIM 密鑰,需從 /etc/amavisd/dkim/ 複製並配置到 Mailu。 +
- +
- +
- +
-3. 同步郵件資料 +
-使用 imapsync 將 iRedMail 的郵件同步到 Mailu,避免直接複製 Maildir 檔案(因 Mailu 和 iRedMail 的 Maildir 結構可能不同)。 +
- +
-安裝 imapsync: +
-在中間伺服器(或新舊伺服器之一)安裝 imapsync:apt update && apt install imapsync +
- +
- +
- +
- +
-準備同步指令: +
-針對每個使用者執行 imapsync,範例: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> \
          --ssl1 --ssl2 --syncinternaldates --allowsizemismatch          --ssl1 --ssl2 --syncinternaldates --allowsizemismatch
- +</code> 
- +     * 參數說明: 
-參數說明: +       * ''--host1'' 和 ''--host2'':iRedMail 和 Mailu 的 IMAP 伺服器 IP 或域名。 
---host1 和 --host2:iRedMail 和 Mailu 的 IMAP 伺服器 IP 或域名。 +       * ''--ssl1'' 和 ''--ssl2'':啟用 SSL 連線(IMAP 預設端口 993)。 
---ssl1 和 --ssl2:啟用 SSL 連線(IMAP 預設端口 993)。 +       * ''--syncinternaldates'':保留郵件的原始日期。 
---syncinternaldates:保留郵件的原始日期。 +       * ''--allowsizemismatch'':忽略可能的檔案大小差異。 
---allowsizemismatch:忽略可能的檔案大小差異。 +  - **批量同步**: 
- +     * 編寫腳本批量同步所有使用者:<code bash> 
- +#!/bin/bash
- +
- +
-批量同步: +
-編寫腳本批量同步所有使用者:#!/bin/bash+
 while IFS=, read -r username password; do while IFS=, read -r username password; do
     imapsync --host1 <iredmail_ip> --user1 "$username" --password1 "$password" \     imapsync --host1 <iredmail_ip> --user1 "$username" --password1 "$password" \
行 153: 行 126:
              --ssl1 --ssl2 --syncinternaldates --allowsizemismatch              --ssl1 --ssl2 --syncinternaldates --allowsizemismatch
 done < /backup/users.csv done < /backup/users.csv
 +</code>
 +     * 確保 ''users.csv'' 格式正確,且 Mailu 的密碼已設定。
 +  - **監控同步**:
 +     * 檢查 ''imapsync'' 日誌,確保無錯誤。
 +     * 若同步失敗,檢查防火牆(確保 993 端口開放)或帳號密碼。
  
- +==== 4. 驗證遷移結果 ====
-確保 users.csv 格式正確,且 Mailu 的密碼已設定。 +
- +
- +
-監控同步: +
-檢查 imapsync 日誌,確保無錯誤。 +
-若同步失敗,檢查防火牆(確保 993 端口開放)或帳號密碼。 +
- +
- +
- +
-4. 驗證遷移結果+
 在新伺服器上測試 Mailu 的功能,確保資料完整。 在新伺服器上測試 Mailu 的功能,確保資料完整。
  
-啟動 Mailu 服務: +  - **啟動 Mailu 服務**: 
-確保所有 Docker 容器運行:docker-compose -f /path/to/mailu/docker-compose.yml up -d+     * 確保所有 Docker 容器運行:<code bash> 
 +docker-compose -f /path/to/mailu/docker-compose.yml up -d 
 +</code> 
 +  - **測試功能**: 
 +     * 登入 Mailu Webmail(''https://mailu_server_ip/webmail''),檢查郵件是否完整。 
 +     * 使用郵件客戶端(例如 Thunderbird)測試 IMAP(端口 993)、SMTP(端口 587)和 POP3(端口 995)。 
 +     * 發送測試郵件,確認 SMTP 和 DKIM 簽章正常。 
 +     * 檢查反垃圾郵件(Rspamd)是否有效。 
 +  - **檢查日誌**: 
 +     * 查看 Mailu 日誌:<code bash> 
 +docker-compose -f /path/to/mailu/docker-compose.yml logs 
 +</code> 
 +     * 檢查 Dovecot 和 Postfix 日誌(位於 Mailu 容器的 ''/var/log/'')。 
 +  - **驗證 SOGo 資料(若適用)**: 
 +     * Mailu 不原生支援 SOGo(行事曆和聯絡人同步)。若 iRedMail 使用 SOGo,需額外部署 SOGo 容器並還原資料: 
 +       * 將 iRedMail 的 SOGo 備份(''/var/vmail/backup/sogo/'')傳輸到新伺服器。 
 +       * 參考 SOGo 文件([[https://www.sogo.nu/support.html|SOGo 支持]])還原資料庫。
  
- +==== 5. 更新 DNS 設定 ====
- +
- +
-測試功能: +
-登入 Mailu Webmail(https://<mailu_server_ip>/webmail),檢查郵件是否完整。 +
-使用郵件客戶端(例如 Thunderbird)測試 IMAP(端口 993)、SMTP(端口 587)和 POP3(端口 995)。 +
-發送測試郵件,確認 SMTP 和 DKIM 簽章正常。 +
-檢查反垃圾郵件(Rspamd)是否有效。 +
- +
- +
-檢查日誌: +
-查看 Mailu 日誌:docker-compose -f /path/to/mailu/docker-compose.yml logs +
- +
- +
-檢查 Dovecot 和 Postfix 日誌(位於 Mailu 容器的 /var/log/)。 +
- +
- +
-驗證 SOGo 資料(若適用): +
-Mailu 不原生支援 SOGo(行事曆和聯絡人同步)。若 iRedMail 使用 SOGo,需額外部署 SOGo 容器並還原資料: +
-將 iRedMail 的 SOGo 備份(/var/vmail/backup/sogo/)傳輸到新伺服器。 +
-參考 SOGo 文件(https://www.sogo.nu/support.html)還原資料庫。 +
- +
- +
- +
- +
- +
-5. 更新 DNS 設定+
 將 DNS 記錄指向 Mailu 伺服器,完成遷移。 將 DNS 記錄指向 Mailu 伺服器,完成遷移。
  
-更新 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 配置一致。 
 +  - **等待 DNS 傳播**: 
 +     * DNS 更新可能需要 24-48 小時。 
 +     * 期間保持 iRedMail 伺服器運行,接收新郵件。 
 +  - **最終同步**: 
 +     * 在 DNS 傳播完成前,若 iRedMail 收到新郵件,再次運行 ''imapsync'' 同步增量資料
  
- +==== 6. 關閉 iRedMail 伺服器 ====
-等待 DNS 傳播: +
-DNS 更新可能需要 24-48 小時。 +
-期間保持 iRedMail 伺服器運行,接收新郵件。 +
- +
- +
-最終同步: +
-在 DNS 傳播完成前,若 iRedMail 收到新郵件,再次運行 imapsync 同步增量資料。 +
- +
- +
- +
-6. 關閉 iRedMail 伺服器+
 確認 Mailu 運行正常且無郵件遺失後,關閉 iRedMail 伺服器。 確認 Mailu 運行正常且無郵件遺失後,關閉 iRedMail 伺服器。
  
-停止服務:systemctl stop postfix dovecot amavisd clamd nginx +  - **停止服務**<code bash> 
- +systemctl stop postfix dovecot amavisd clamd nginx 
- +</code> 
-備份最終資料: +  - **備份最終資料**: 
-再次備份 iRedMail 資料存檔。 +     * 再次備份 iRedMail 資料存檔。 
- +  - **關閉伺服器**: 
- +     * 根據需求關閉或重新利用 iRedMail 伺服器。
-關閉伺服器: +
-根據需求關閉或重新利用 iRedMail 伺服器。 +
- +
- +
- +
-注意事項 +
- +
-密碼相容性:iRedMail 和 Mailu 的密碼加密格式可能不同(iRedMail 常用 SSHA,Mailu 支援 bcrypt)。建議在 Mailu 上重設密碼並通知使用者,或使用腳本轉換密碼格式。 +
-SOGo 支援:Mailu 不原生支援 ActiveSync 或 CalDAV/CardDAV。若需要行事曆和聯絡人同步,需額外部署 SOGo 或其他解決方案。 +
-資源需求:Mailu 的多容器設計可能比 iRedMail 消耗更多資源,建議至少 2GB RAM。 +
-防火牆:確保 Mailu 伺服器開放必要端口(25、110、143、465、587、993、995、80、443)。 +
-備份保留:保留 iRedMail 備份至少 30 天,以防資料遺失。 +
-測試環境:建議在測試環境中模擬遷移,確認流程無誤後再應用到正式環境。 +
-IMAPSync 限制:免費版 imapsync 有同步次數限制,大量帳號可能需購買授權。 +
- +
-參考資源+
  
-iRedMail 官方文件https://docs.iredmail.org+===== 注意事項 ===== 
-Mailu 官方文件:https://mailu.io/ +  * **密碼相容性**:iRedMail 和 Mailu 的密碼加密格式可能不同(iRedMail 常用 SSHA,Mailu 支援 bcrypt)。建議在 Mailu 上重設密碼並通知使用者,或使用腳本轉換密碼格式。 
-IMAPSync 官方網站https://imapsync.lamiral.info/ +  * **SOGo 支援**Mailu 不原生支援 ActiveSync 或 CalDAV/CardDAV。若需要行事曆和聯絡人同步,需額外部署 SOGo 或其他解決方案。 
-SOGo 文件https://www.sogo.nu/support.html +  * **資源需求**:Mailu 的多容器設計可能比 iRedMail 消耗更多資源,建議至少 2GB RAM。 
-iRedMail 論壇討論https://forum.iredmail.org/[](https://forum.iredmail.org/topic15390-migrate-mailboxes-and-user-accounts.html) +  * **防火牆**確保 Mailu 伺服器開放必要端口(25、110、143、465、587、993、995、80、443)。 
-Mailu GitHubhttps://github.com/Mailu/Mailu+  * **備份保留**保留 iRedMail 備份至少 30 天,以防資料遺失。 
 +  * **測試環境**建議在測試環境中模擬遷移,確認流程無誤後再應用到正式環境。 
 +  * **IMAPSync 限制**免費版 ''imapsync'' 有同步次數限制,大量帳號可能需購買授權。
  
 +===== 參考資源 =====
 +  * [[https://docs.iredmail.org/|iRedMail 官方文件]]
 +  * [[https://mailu.io/|Mailu 官方文件]]
 +  * [[https://imapsync.lamiral.info/|IMAPSync 官方網站]]
 +  * [[https://www.sogo.nu/support.html|SOGo 文件]]
 +  * [[https://forum.iredmail.org/|iRedMail 論壇討論]]
 +  * [[https://github.com/Mailu/Mailu|Mailu GitHub]]
  
 +{{tag>from_gork}}
  • tech/iredmail/migrate_to_mailu.1745922021.txt.gz
  • 上一次變更: 2025/04/29 18:20
  • jonathan