FastComments.com

內部部署

在本地部署 FastComments

FastComments 提供多種部署解決方案。最常見的是由我們為您託管應用程式。

不過,我們理解有些客戶不能將其資訊存放在雲端,並且要求在內部部署中託管所有資料。

本文件涵蓋該使用情境。

包含內容 Internal Link


FastComments On Prem 允許您部署我們的即時留言解決方案,包含所有的審核與管理工具, 在您自己的硬體上。

這意味著您可以掌控您的資料,且留言系統可以限制在您本地區域網路或企業網路內。


執行個體 Internal Link

必要元件

對於本地部署(On-Prem),FastComments 只包含應用伺服器與資料庫。我們已簡化部署,使應用程式能直接處理所有流量,無需加入其他元件。

應用伺服器以 Docker 映像檔提供,可使用任何容器管理解決方案部署。

資料庫 MongoDB 可以自行運行,或由其他供應商(如 AWS DocumentDB 或 MongoDB Atlas)託管。

FastComments 目前已在 MongoDB 7 上測試,然而我們的目標是與 DocumentDB 相容,以簡化部署。

執行個體規模

您會發現 FastComments 已相當優化,應用本身不需要大型機器即可維持低 P99 延遲。

所有批次與 cron 工作皆使用串流,以限制總記憶體使用量。

以下的應用伺服器與資料庫表格可協助您進行規模規劃。

應用伺服器執行個體

同時使用者數叢集總 CPU 數叢集總記憶體
1001256mb
1K2512mb
10K81gb
100K328gb
1M6464gb

例如,單核心每秒處理約 100 個評論串,通常不會超過 250mb RSS。

資料庫伺服器執行個體

資料庫的規模取決於工作集大小,即您在特定時間點存取的資料量,以及同時請求數。

FastComments 對 Mongo 相當友善,對於熱查詢會使用索引提示、串流游標,且在多個領域設有併發限制,以防止下游系統過載。

以下提供資料庫執行個體規模的一般指引。請注意,這是 每個執行個體 的規格,而非叢集的總資源

同時使用者數已儲存評論數每個執行個體的 CPU 數每個執行個體的記憶體
1001k1256mb
1K5k2512mb
10K100k82gb
100K500k168gb
1M5M3232gb

上述表格為保守估計。實際需求可能因您的具體設定(頁面大小、評論量等)而有所不同。


設定 Internal Link

FastComments 使用環境變數來進行設定。以下列出所有與 On-Prem 相關且支援的變數。

VariableDefaultInfoRequiredExamples or Valid Values
NODE_ENV環境類型。Yesproduction, dev
MONGO_URI資料庫連線 URI。Yes
MONGO_ENABLE_SSLfalse啟用使用 SSL 來連線資料庫。Notrue, false
MONGO_ENABLE_SSL_VALIDATEfalse在連線到 Mongo 時啟用對憑證與 CA 的驗證。Notrue, false
MONGO_SSL_CAMongo SSL CA pem 檔案。No/path/to/some-cert.pem
ADMIN_NOTIFICATIONS_EMAIL接收重要系統相關通知的電子郵件地址。Noadmin-group@bigcorp.com
IP_HASH_SALT用於對 IP 位址進行雜湊的 Salt。Yes
SESSION_SECRET用於簽署會話的金鑰。Yes
SESSION_STORE_SECRET用於在儲存中簽署/雜湊會話的金鑰。必須不同於 SESSION_SECRET。Yes
HOSTNAME部署 FastComments(管理面板等)的主機名稱。不得包含連接埠或協定。Yesexample.com
HOST_ADDR部署 FastComments(管理面板等)的可存取 URI。Yeshttps://example.com
EMAIL_CONFIG_PATH本機檔案系統上放置電子郵件設定(SMTP、網域/提供者對應等)的路徑。Yes/my/config.json
EMAIL_DEFAULT_FROM_NAMEFastComments Robot電子郵件 "From Name" 標頭。NoMy Company Name
EMAIL_DEFAULT_FOOTER_LOGO/images/logo-32-2020-01.png電子郵件頁尾 logo。Nohttps://exmaple.com/footer.png
EMAIL_DEFAULT_TRANSPORT覆寫 EMAIL_CONFIG_PATH 中的 "defaultTransport"。在將相同設定檔部署到不同環境時很有用。NomyTransportName
ON_PREM_TENANT_ID您在 fastcomments.com 帳戶的 ID。用於註冊授權金鑰。No
ON_PREM_LICENSE_KEY一組 On-Prem 授權金鑰。No
GIPHY_API_KEYGiphy API Key。如果未指定,應建立一個設定規則以停用 gif 選取器。No
GIPHY_DEFAULT_RATINGpg用於 giphy 的整合。也可透過元件自訂規則覆寫。Nog, pg, pg-13, r
OPENAI_SECRET_KEY用於 OpenAI 驅動的功能,例如可選的基於 GPT 的垃圾郵件檢測。No
CDN_HOST_ADDR資源要從何處擷取的主機名稱。預設為 HOSTNAME 的值。Noexample.com
LARGE_FILE_HOST_ADDR大型檔案(例如匯出)要從何處擷取的主機名稱。預設為 CDN_HOST_ADDR 的值。Noexample.com
LARGE_FILE_LOCATION_TYPElocal_disk大型檔案(如匯出檔)應儲存的位置。Nolocal_disk, s3
FROM_EMAIL_HOST電子郵件應由哪個主機名稱發送。Noexample.com
COOKIE_IDfastcomments.sidfastcomments Cookie 的名稱。No
COOKIE_HOSTNAME.fastcomments.comCookie 的 "hostname" 欄位值。建議前面加上點(dot)。No.example.com
S3_ACCESS_KEY用於使用者上傳檔案、頭像等。如果未定義則預設為本機檔案系統。No
S3_SECRET_KEY用於使用者上傳檔案、頭像等。No
S3_REGION用於使用者上傳檔案、頭像等。No
S3_BUCKET用於使用者上傳檔案、頭像等。No
S3_HOST用於使用者上傳檔案、頭像等。No
CACHE_DIR用於儲存選用的離線快取位置,以便在資料庫不可用時使用。會定期以前 100 個熱門留言串更新。No
BACKUP_DIR用於在資料庫不可用時儲存資料的位置。如果在資料庫不可用時有留言提交,會先放在此處,稍後再處理。No

請注意,所有與網域相關的變數都使用 _HOST_ADDR 後綴。兩者的差別為:

  • _HOST: example.com
  • _ADDR: https://example.com

The EMAIL_CONFIG_PATH should contain a path to a JSON file with the following example format:

電子郵件設定
Copy Copy
1
2{
3 "defaultDKIM": {
4 "domainName": "mycompany.org",
5 "keySelector": "2024",
6 "privateKey": "-----BEGIN PRIVATE KEY-----\nABCDEFG\n-----END PRIVATE KEY-----"
7 },
8 "providerTransports": {
9 "yahoo.com": "specialTransport"
10 },
11 "defaultTransport": "mailgun",
12 "transports": {
13 "mailgun": {
14 "host": "smtp.mailgun.org",
15 "port": 587,
16 "secure": false,
17 "auth": {
18 "user": "admin@somewhere.com",
19 "pass": "password"
20 },
21 "tls": {
22 "ciphers": "SSLv3"
23 }
24 },
25 "specialTransport": {
26 "host": "smtp.someplace.org",
27 "port": 587,
28 "secure": false,
29 "auth": {
30 "user": "admin@example.com",
31 "pass": "password"
32 },
33 "tls": {
34 "ciphers": "SSLv3"
35 }
36 }
37 }
38}
39

在上方範例中,我們定義了一個名為 mailgun 的預設 SMTP 電子郵件傳輸。我們也定義了一個專門用於 @yahoo.com 電子郵件的特殊傳輸。在某些情境下,針對特定網域使用特定提供者或發送 IP 以調整投遞是可取的。此項為選用。

DocumentDB

連線到 DocumentDB 時,您會想要指定 MONGO_ENABLE_SSL=true MONGO_SSL_CA=/some/path.pem,以相容於預設設定。


資料庫停機與維護模式 Internal Link

FastComments 支援自動維護模式。如果資料庫當機,它仍能繼續提供熱門留言討論串。

此外,在維護模式中,所有留言會被儲存到 BACKUP_DIR。系統恢復上線後,這些留言會被處理(檢查垃圾訊息等)並儲存。

它的作法是每小時判定最熱門的前 100 個留言討論串,並將其內容快取到磁碟上。 判定前 100 名討論串是從預先計算好的狀態取得,所以這不是一個耗資源的週期性工作。

這是完全可選的,只有在設定了 CACHE_DIRBACKUP_DIR 時才會啟用。這當然會使應用節點具有狀態,但這些狀態可以在任何時候遺失,而不會導致應用錯誤運作。

注意,在維護模式中無法對留言討論串進行正確的驗證,因此只有被視為公開且安全的討論串會定期備份。

在維護模式下,許多功能將無法使用。

Widget 程式碼 Internal Link


On-Prem 的前端程式碼範例和函式庫與 SaaS 產品相同。然而,您必須指定 apiHost 與正確的腳本路徑:

On-Prem 的評論程式碼
Copy Copy
1
2<script async src="https://my.host.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5 window.fcConfigs = [{
6 target: '#fastcomments-widget',
7 tenantId: "demo",
8 apiHost: "https://my.host.com"
9 // ... 也可以傳遞 SSO payload 等等。
10 }];
11</script>
12

以上是一個非常簡單的範例。我們也可以使用第一方的 React、Angular、Vue、Svelte 等函式庫。


API Internal Link

API 可以像一般的 SaaS 產品一樣存取,您會登入 On-Prem 儀表板來建立 API 金鑰,並使用這些金鑰來存取 API。API 端點在 on-prem 與 SaaS 產品相同。

多個網域 Internal Link

您的 On-Prem FastComments 安裝可以為多個內部網域提供留言功能,例如 app.mycorp.orghr.mycorp.org。您可以分別為這些 進行設定,但可透過建立個別的自訂規則(Customization Rules)在同一個 On-Prem 設定中託管它們,並配置它們各自的行為。

安全性 Internal Link

預設情況下,FastComments 假定評論串為公開。要增加一層安全性,建議建立一個自訂規則並勾選 Requires SSO 選項。這將導致所有與評論相關的端點需要 SSO 身份驗證。

結論

您已閱讀完 On Prem 文件的全部內容。請在下方告訴我們您有任何進一步的意見或問題 - 您 也可以透過 支援頁面 與我們聯絡。