差異處
這裏顯示兩個版本的差異處。
兩邊的前次修訂版 前次修改 下次修改 | 前次修改 | ||
tech:iredmail:migrate_to_mailu [2025/04/29 18:22] – [前置條件] jonathan | tech:iredmail:migrate_to_mailu [2025/04/29 18:29] (目前版本) – [6. 關閉 iRedMail 伺服器] jonathan | ||
---|---|---|---|
行 34: | 行 34: | ||
在 iRedMail 伺服器上備份所有必要資料,以防止資料遺失。 | 在 iRedMail 伺服器上備份所有必要資料,以防止資料遺失。 | ||
- | | + | |
- | * 若短暫停機可接受,停止服務以避免資料不一致: | + | * 若短暫停機可接受,停止服務以避免資料不一致:< |
- | <code bash> | + | |
systemctl stop postfix dovecot amavisd clamd | systemctl stop postfix dovecot amavisd clamd | ||
</ | </ | ||
- | | + | |
* 郵件儲存路徑通常為 ''/ | * 郵件儲存路徑通常為 ''/ | ||
- | * 使用 '' | + | * 使用 '' |
- | <code bash> | + | |
rsync -av / | rsync -av / | ||
</ | </ | ||
- | | + | |
* 根據後端類型備份資料庫: | * 根據後端類型備份資料庫: | ||
- | * **MySQL/ | + | * **MySQL/ |
- | <code bash> | + | |
mysqldump -u root -p --all-databases > / | mysqldump -u root -p --all-databases > / | ||
</ | </ | ||
- | * **PostgreSQL**: | + | * **PostgreSQL**:< |
- | <code bash> | + | |
pg_dumpall -U postgres > / | pg_dumpall -U postgres > / | ||
</ | </ | ||
- | * **OpenLDAP**: | + | * **OpenLDAP**:< |
- | <code bash> | + | |
slapcat -l / | slapcat -l / | ||
</ | </ | ||
- | | + | |
- | * 備份 iRedMail 設定檔(供參考): | + | * 備份 iRedMail 設定檔(供參考):< |
- | <code bash> | + | |
tar -zcvf / | tar -zcvf / | ||
</ | </ | ||
- | | + | |
- | * 備份憑證(若非 Let's Encrypt): | + | * 備份憑證(若非 Let's Encrypt):< |
- | <code bash> | + | |
tar -zcvf / | tar -zcvf / | ||
</ | </ | ||
- | | + | |
- | * 若使用 SOGo(行事曆和聯絡人同步),執行備份腳本: | + | * 若使用 SOGo(行事曆和聯絡人同步),執行備份腳本:< |
- | <code bash> | + | |
/ | / | ||
</ | </ | ||
行 79: | 行 71: | ||
在 Mailu 伺服器上建立與 iRedMail 相同的網域和使用者帳號,為郵件同步做準備。 | 在 Mailu 伺服器上建立與 iRedMail 相同的網域和使用者帳號,為郵件同步做準備。 | ||
- | | + | |
- | * 檢查 Docker Compose 服務狀態: | + | * 檢查 Docker Compose 服務狀態:< |
- | <code bash> | + | |
docker-compose -f / | docker-compose -f / | ||
</ | </ | ||
- | * 確保 Web 管理介面('' | + | * 確保 Web 管理介面('' |
- | | + | |
- | * 登入 Mailu Web 管理介面(預設帳號:'' | + | * 登入 Mailu Web 管理介面(預設帳號:'' |
* 在「Domains」選項中新增與 iRedMail 相同的網域(例如 '' | * 在「Domains」選項中新增與 iRedMail 相同的網域(例如 '' | ||
- | | + | |
* 從 iRedMail 資料庫匯出使用者清單: | * 從 iRedMail 資料庫匯出使用者清單: | ||
- | * **MySQL/ | + | * **MySQL/ |
- | <code bash> | + | |
mysql -u root -p vmail -e " | mysql -u root -p vmail -e " | ||
</ | </ | ||
- | * **PostgreSQL**: | + | * **PostgreSQL**:< |
- | <code bash> | + | |
psql -U postgres -d vmail -c "COPY (SELECT username, password FROM mailbox WHERE active=1) TO '/ | psql -U postgres -d vmail -c "COPY (SELECT username, password FROM mailbox WHERE active=1) TO '/ | ||
</ | </ | ||
- | * **OpenLDAP**: | + | * **OpenLDAP**:< |
- | <code bash> | + | |
ldapsearch -x -D " | ldapsearch -x -D " | ||
</ | </ | ||
* 在 Mailu 上手動或批量新增使用者: | * 在 Mailu 上手動或批量新增使用者: | ||
* 使用 Web 管理介面逐一新增使用者(適合少量帳號)。 | * 使用 Web 管理介面逐一新增使用者(適合少量帳號)。 | ||
- | * 或使用 Mailu CLI 批量匯入(參考 [[https:// | + | * 或使用 Mailu CLI 批量匯入(參考 [[https:// |
- | <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 | ||
</ | </ | ||
* 將 iRedMail 的密碼(通常為 SSHA 或 CRYPT 格式)轉換為 Mailu 支援的格式(例如 bcrypt),或重設密碼並通知使用者。 | * 將 iRedMail 的密碼(通常為 SSHA 或 CRYPT 格式)轉換為 Mailu 支援的格式(例如 bcrypt),或重設密碼並通知使用者。 | ||
- | | + | |
* 在 Mailu 管理介面中為網域生成 DKIM 密鑰,並更新 DNS 記錄。 | * 在 Mailu 管理介面中為網域生成 DKIM 密鑰,並更新 DNS 記錄。 | ||
* 若希望重用 iRedMail 的 DKIM 密鑰,需從 ''/ | * 若希望重用 iRedMail 的 DKIM 密鑰,需從 ''/ | ||
行 116: | 行 103: | ||
使用 '' | 使用 '' | ||
- | | + | |
- | * 在中間伺服器(或新舊伺服器之一)安裝 '' | + | * 在中間伺服器(或新舊伺服器之一)安裝 '' |
- | <code bash> | + | |
apt update && apt install imapsync | apt update && apt install imapsync | ||
</ | </ | ||
- | | + | |
- | * 針對每個使用者執行 '' | + | * 針對每個使用者執行 '' |
- | <code bash> | + | |
imapsync --host1 < | imapsync --host1 < | ||
| | ||
行 133: | 行 118: | ||
* '' | * '' | ||
* '' | * '' | ||
- | | + | |
- | * 編寫腳本批量同步所有使用者: | + | * 編寫腳本批量同步所有使用者:< |
- | <code bash> | + | |
#!/bin/bash | #!/bin/bash | ||
while IFS=, read -r username password; do | while IFS=, read -r username password; do | ||
行 144: | 行 128: | ||
</ | </ | ||
* 確保 '' | * 確保 '' | ||
- | | + | |
* 檢查 '' | * 檢查 '' | ||
* 若同步失敗,檢查防火牆(確保 993 端口開放)或帳號密碼。 | * 若同步失敗,檢查防火牆(確保 993 端口開放)或帳號密碼。 | ||
行 151: | 行 135: | ||
在新伺服器上測試 Mailu 的功能,確保資料完整。 | 在新伺服器上測試 Mailu 的功能,確保資料完整。 | ||
- | | + | |
- | * 確保所有 Docker 容器運行: | + | * 確保所有 Docker 容器運行:< |
- | <code bash> | + | |
docker-compose -f / | docker-compose -f / | ||
</ | </ | ||
- | | + | |
- | * 登入 Mailu Webmail('' | + | * 登入 Mailu Webmail('' |
* 使用郵件客戶端(例如 Thunderbird)測試 IMAP(端口 993)、SMTP(端口 587)和 POP3(端口 995)。 | * 使用郵件客戶端(例如 Thunderbird)測試 IMAP(端口 993)、SMTP(端口 587)和 POP3(端口 995)。 | ||
* 發送測試郵件,確認 SMTP 和 DKIM 簽章正常。 | * 發送測試郵件,確認 SMTP 和 DKIM 簽章正常。 | ||
* 檢查反垃圾郵件(Rspamd)是否有效。 | * 檢查反垃圾郵件(Rspamd)是否有效。 | ||
- | | + | |
- | * 查看 Mailu 日誌: | + | * 查看 Mailu 日誌:< |
- | <code bash> | + | |
docker-compose -f / | docker-compose -f / | ||
</ | </ | ||
* 檢查 Dovecot 和 Postfix 日誌(位於 Mailu 容器的 ''/ | * 檢查 Dovecot 和 Postfix 日誌(位於 Mailu 容器的 ''/ | ||
- | | + | |
* Mailu 不原生支援 SOGo(行事曆和聯絡人同步)。若 iRedMail 使用 SOGo,需額外部署 SOGo 容器並還原資料: | * Mailu 不原生支援 SOGo(行事曆和聯絡人同步)。若 iRedMail 使用 SOGo,需額外部署 SOGo 容器並還原資料: | ||
* 將 iRedMail 的 SOGo 備份(''/ | * 將 iRedMail 的 SOGo 備份(''/ | ||
行 175: | 行 157: | ||
將 DNS 記錄指向 Mailu 伺服器,完成遷移。 | 將 DNS 記錄指向 Mailu 伺服器,完成遷移。 | ||
- | | + | |
* 修改網域的 A 記錄,將 '' | * 修改網域的 A 記錄,將 '' | ||
* 更新 MX 記錄,指向 Mailu 的 FQDN。 | * 更新 MX 記錄,指向 Mailu 的 FQDN。 | ||
* 更新 SPF、DKIM、DMARC 記錄,確保與 Mailu 配置一致。 | * 更新 SPF、DKIM、DMARC 記錄,確保與 Mailu 配置一致。 | ||
- | | + | |
* DNS 更新可能需要 24-48 小時。 | * DNS 更新可能需要 24-48 小時。 | ||
* 期間保持 iRedMail 伺服器運行,接收新郵件。 | * 期間保持 iRedMail 伺服器運行,接收新郵件。 | ||
- | | + | |
* 在 DNS 傳播完成前,若 iRedMail 收到新郵件,再次運行 '' | * 在 DNS 傳播完成前,若 iRedMail 收到新郵件,再次運行 '' | ||
行 188: | 行 170: | ||
確認 Mailu 運行正常且無郵件遺失後,關閉 iRedMail 伺服器。 | 確認 Mailu 運行正常且無郵件遺失後,關閉 iRedMail 伺服器。 | ||
- | | + | |
- | <code bash> | + | |
systemctl stop postfix dovecot amavisd clamd nginx | systemctl stop postfix dovecot amavisd clamd nginx | ||
</ | </ | ||
- | | + | |
* 再次備份 iRedMail 資料存檔。 | * 再次備份 iRedMail 資料存檔。 | ||
- | | + | |
* 根據需求關閉或重新利用 iRedMail 伺服器。 | * 根據需求關閉或重新利用 iRedMail 伺服器。 | ||