FastComments.com

本地部署

在本地托管 FastComments

FastComments 提供多种部署方案。最常见的是由我们为您托管应用程序。

但是,我们理解有些客户不能将其信息存储在云端,并需要在本地托管其所有数据。

本文档涵盖该用例。

包含内容 Internal Link

FastComments On Prem 允许您在您自己的硬件上部署我们的实时评论解决方案,包括所有审核和管理工具,

这意味着您可以控制您的数据,并且评论系统可以限制在您的本地 LAN 或企业网络中。

实例 Internal Link

所需组件

对于本地部署(On-Prem),FastComments 仅由一个应用服务器和一个数据库组成。我们简化了部署方式,使应用可以直接处理所有流量,无需添加其他组件。

应用服务器以 Docker 镜像的形式提供,可以使用任何容器管理方案进行部署。

数据库 MongoDB 可以自行运行,也可以由其他提供商托管,例如 AWS DocumentDB 或 MongoDB Atlas。

FastComments 目前使用 MongoDB 7 进行测试,不过我们的目标是保持与 DocumentDB 的兼容性,以便简化部署。

实例规格

你会发现 FastComments 的优化相当到位,应用本身不需要大型机器就能保持较低的 P99 延迟。

所有批处理和定时任务都使用流式处理来限制总内存占用。

下面关于应用服务器和数据库的表格可以帮助你进行容量规划。

应用服务器实例

并发用户数集群总 CPU集群总内存
1001256mb
1K2512mb
10K81gb
100K328gb
1M6464gb

例如,单个核心每秒处理约 100 个评论线程时,RSS 通常不会超过 250mb。

数据库服务器实例

数据库的容量规划取决于工作集大小,即你在某一时间点访问的数据量,以及并发请求数。

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 地址的盐值。Yes
SESSION_SECRET用于签名会话的密钥。Yes
SESSION_STORE_SECRET用于在存储中签名/哈希会话的密钥。必须与 SESSION_SECRET 不同。Yes
HOSTNAME部署 FastComments(管理面板等)所在的主机名。不应包含端口或协议。Yesexample.com
HOST_ADDR可访问的 URI,FastComments(管理面板等)部署所在位置。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电子邮件页脚徽标。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本地部署的许可证密钥。No
GIPHY_API_KEYGiphy API 密钥。如果未指定,您应创建一条配置规则以禁用 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” 字段的值。建议以点号作为前缀。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

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 时才会启用。当然,这会使应用节点变为有状态,但这是可以随时丢失且不会导致应用异常的状态。

请注意,在维护模式下无法对评论线程进行适当的身份验证,因此只有被安全地视为公开的线程会被定期备份。

在维护模式下,许多功能不可用。

小部件代码 Internal Link

用于 On-Prem 的前端代码片段和库与 SaaS 产品相同。但是,您必须指定 apiHost 和正确的脚本路径:

本地部署的评论代码
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 有效载荷等。
10 }];
11</script>
12

以上是一个非常简单的示例。我们也可以使用第一方的 React、Angular、Vue、Svelte 等库。

API Internal Link

可以像常规的 SaaS 产品一样访问该 API:您可以登录 On-Prem 仪表板以创建 API 密钥,并使用这些密钥访问该 API。 API 端点在 on-prem 与 SaaS 产品相同。

多个域名 Internal Link

您的 On-Prem FastComments 安装可以向多个内部域提供评论,例如 app.mycorp.org 和 hr.mycorp.org。您可以配置这些 分别,但可以通过在同一 On-Prem 部署上创建单独的 Customization Rules 来托管它们并配置它们各自的行为。

安全 Internal Link

默认情况下,FastComments 假定评论线程是公开的。要增加一层安全性,建议创建一个自定义规则,并在 Requires SSO 选项上勾选。这将导致所有与评论相关的端点都需要 SSO 身份验证。

总结

你已到达 On Prem 文档的末尾。请在下方告诉我们你有任何进一步的意见或问题 - 你 也可以通过 支持页面 与我们联系。