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