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 相關的支援變數。

變數預設值說明必填範例或有效值
NODE_ENV環境類型。是production, dev
MONGO_URI資料庫連線 URI。是
MONGO_ENABLE_SSLfalse啟用使用 SSL 連線到資料庫。否true, false
MONGO_ENABLE_SSL_VALIDATEfalse連線到 Mongo 時啟用對 CA 驗證憑證。否true, false
MONGO_SSL_CAMongo SSL CA pem 檔案。否/path/to/some-cert.pem
ADMIN_NOTIFICATIONS_EMAIL重要系統相關通知應發送的電子郵件地址。否admin-group@bigcorp.com
IP_HASH_SALT用於雜湊 IP 位址的鹽值。是
SESSION_SECRET用於簽署 session 的金鑰。是
SESSION_STORE_SECRET用於簽署/雜湊儲存中 session 的金鑰。必須與 SESSION_SECRET 不同。是
HOSTNAMEFastComments 部署的主機名稱(管理後台等)。不應包含連接埠或通訊協定。是example.com
HOST_ADDRFastComments 部署的可存取 URI(管理後台等)。是https://example.com
EMAIL_CONFIG_PATH本機檔案系統上電子郵件設定(SMTP、網域/供應商對應等)所在的路徑。是/my/config.json
EMAIL_DEFAULT_FROM_NAMEFastComments Robot電子郵件「寄件者名稱」標頭。否My Company Name
EMAIL_DEFAULT_FOOTER_LOGO/images/logo-32-2020-01.png電子郵件頁尾標誌。否https://exmaple.com/footer.png
EMAIL_DEFAULT_TRANSPORT覆寫 EMAIL_CONFIG_PATH 中的「defaultTransport」。適用於將相同設定檔部署到不同環境。否myTransportName
ON_PREM_TENANT_ID您在 fastcomments.com 上的帳號 ID。用於註冊您的授權金鑰。否
ON_PREM_LICENSE_KEYOn-Prem 授權金鑰。否
GIPHY_API_KEYGiphy API 金鑰。若未指定,您應建立一條停用 gif 選擇器的設定規則。否
GIPHY_DEFAULT_RATINGpg用於 giphy 整合。也可以透過小工具自訂規則覆寫。否g, pg, pg-13, r
OPENAI_SECRET_KEY用於 openai 驅動的功能,例如可選的基於 GPT 的垃圾訊息偵測。否
CDN_HOST_ADDR取得資源檔的主機名稱。預設為 HOSTNAME 的值。否example.com
LARGE_FILE_HOST_ADDR取得大型檔案(如匯出檔)的主機名稱。預設為 CDN_HOST_ADDR 的值。否example.com
LARGE_FILE_LOCATION_TYPElocal_disk大型檔案(如匯出檔)應儲存的位置。否local_disk, s3
FROM_EMAIL_HOST電子郵件應從哪個主機名稱發送。否example.com
COOKIE_IDfastcomments.sidfastcomments cookie 的名稱。否
COOKIE_HOSTNAME.fastcomments.comcookie「hostname」欄位的值。建議以點號作為前綴。否.example.com
S3_ACCESS_KEY用於使用者檔案上傳、頭像等。若未定義則預設使用本機檔案系統。否
S3_SECRET_KEY用於使用者檔案上傳、頭像等。否
S3_REGION用於使用者檔案上傳、頭像等。否
S3_BUCKET用於使用者檔案上傳、頭像等。否
S3_HOST用於使用者檔案上傳、頭像等。否
CACHE_DIR儲存選用的離線快取的位置,用於資料庫無法使用時。會定期以前 100 個留言串重新整理。否
BACKUP_DIR資料庫無法使用時儲存資料的位置。若在資料庫無法使用時提交留言,留言會存放在這裡並於稍後處理。否

請注意,所有與網域相關的變數都使用 _HOST 或 _ADDR 後綴。兩者的差異如下:

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

EMAIL_CONFIG_PATH 應包含指向具有以下範例格式的 JSON 檔案的路徑:

電子郵件設定
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_DIR 和 BACKUP_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.org 和 hr.mycorp.org。您可以分別為這些 進行設定,但可透過建立個別的自訂規則(Customization Rules)在同一個 On-Prem 設定中託管它們,並配置它們各自的行為。

安全性 Internal Link

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

結論

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