本文主要用于說明如何從指令行工具的方式中恢複 Discourse,以及我們在備份和恢複的過程中遇到的坑和解決辦法。
恢複前需要的準備工作
在新伺服器上安裝完整和全新的 Discourse,這個安裝成功後不需要通過 UI 前台進行使用者注冊。
備份和獲得備份檔案。
确定你現在運作的 Discourse 版本是最新的版本,如果你的 Discourse 不是最新的版本,你需要先進行更新。
因為 Discourse 必須使用域名公共網絡通路才能完整安裝。如果你的站點比較大的話,你需要考慮這個問題。你需要考慮修改 DNS 的配置,讓你的 Discourse 能夠通過公共網絡通路,或者你的域名将會在通路的時候出現你 Discourse 正在安裝的提示。
這部分的操作按照完整的 Discourse 安裝方式進行就可以了,你不需要進行任何操作,你也不需要在安裝成功後注冊管理者賬号。
請注意安裝次數,如果你是使用 Let’s Encrypt 的簽名的話,你的 CA 簽名是有次數限制的。最多可以重新安裝 5 次,否則你需要再等 5 天。
除非使用自己的簽名。
這個問題的讨論,請參考下面的連結:Discourse 如何不使用 Let's Encrypt 而使用 CA 簽名的密鑰進行安裝
Discourse 可以使用混合附件存儲方式。這個方式的定義是部分附件存儲在本地,部分附件存儲在雲上,最常用的服務就是 AWS 的 S3 服務。
因為這種方式,會導緻在恢複的時候,可能出現資料錯誤,絕大部分情況就是因為有部分附件在本地,有部分附件在 S3 ,但是你的 Discourse 已經全部使用 S3 了,這會導緻在恢複的時候提示 S3 校驗失敗的情況。
在進行備份恢複之前,你需要将你的 Discourse 再備份一次。通常可以直接點背景的備份按鈕。
如果你的備份是上傳到 S3 的話,你可以直接到 AWS 上将備份檔案下載下傳到本地。
如果你是混合存儲檔案的話,在這裡 不要備份附件 否則你沒有辦法恢複你的備份檔案。

如上圖我們的内容,找到最新的備份檔案,然後下載下傳。
SSH 到你需要恢複的伺服器上,如果你的伺服器上沒有下面的目錄的話,你需要使用下面的指令建立一個:
<code>mkdir -p /var/discourse/shared/standalone/backups/default</code>
上傳你下載下傳的備份檔案到這個目錄中。如果你是在伺服器直接進行資料傳輸的話,你可以使用下面的指令,下面指令是幫助你 SSH 到老伺服器,然後将老伺服器上的備份傳輸到新伺服器上。
<code>scp /path/to/backup/backup.tar.gz [email protected]:/var/discourse/shared/standalone/backups/default</code>
參數說明:
/path/to/backup/backup.tar.gz 這個是你老伺服器上備份檔案的路徑和檔案名
192.168.1.1 這個是你老伺服器的 IP 位址,你需要根據你的實際情況進行更改
你也可以使用 FTP 将備份上傳到指定的目錄。
我們最終的目的就是需要将你的備份檔案存儲到路徑 <code>/var/discourse/shared/standalone/backups/default</code> 中。
依次執行下面的指令,首先你需要進入你新伺服器的 Discourse 安裝目錄中:
然後通過下面的指令,進入到 Discourse 已經運作的容器,下面的操作其實是針對 Discourse 容器的操作。
針對 Discourse 的執行個體,你需要啟用恢複功能,因為這個功能在安裝後的預設情況下是禁用的。
恢複備份檔案,直接執行下面的指令進行恢複就行。在這裡隻需要指定檔案名就行,你不需要指定特定的路徑,因為在 Discourse 容器中,預設會到上面你存儲的檔案路徑中去找你的備份。
需要注意的是,上面的參數是示例參數,你需要根據你具體的情況替換掉備份檔案的名字。
如果你在這裡資料恢複成功的話,你将會在界面的下面看到 [Success] 的提示。否則将會提示失敗,在失敗的上面将會提示你失敗的原因,你可以根據失敗的原因重新調整參數後再重試,很多時候主要是附件的原因。
退出 Discourse 的容器,你可以使用指令 exit,然後你會界面中看到 bye 的容器退出提示。
然後在作業系統中的 Discourse 目錄中,運作下面的指令,對 Discourse 進行重構。
如果你希望對你新的執行個體進行調整的話,比如說修改郵件位址,增加容器配置參數,修改 app.yml 檔案,在重構之前,你可以對上面的内容進行後再進行重構。
下面是我們在備份恢複的時候踩過的坑和發現的問題:
在備份的時候,因為混合模式沒有辦法恢複資料。
需要修改備份方式不備份附件,隻備份資料庫。
檔案權限問題。
需要使用 sudo 方式,讓安裝程式自行确定檔案和檔案夾的權限,避免權限不足。
備份恢複後無法發送郵件。
開放防火牆端口,同時需要将内部配置中的允許發送郵件的域名設定一個,然後再撤銷。
新執行個體安裝過多,導緻無法 CA 簽名。
注意恢複次數和必要的時候使用自己的域名簽名。