FastComments.com


在本地托管 FastComments

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

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

本文档涵盖该用例。


包含内容 Internal Link

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

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

实例 Internal Link

Required Components

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

应用服务器以 Docker 镜像形式提供,可与任何容器管理解决方案一起部署。

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

FastComments 目前在 MongoDB 7 上进行了测试,但我们旨在与 DocumentDB 兼容以简化部署。

Instance Sizes

你会发现 FastComments 已经相当优化,应用本身通常不需要很大的机器就能保持较低的 P99 响应时间。

所有批处理和 cron 作业都使用流式处理以限制总体内存使用。

下面的应用服务器和数据库表可帮助进行容量评估。

Application Server Instances

Concurrent UsersTotal Cluster CPUsTotal Cluster Memory
1001256mb
1K2512mb
10K81gb
100K328gb
1M6464gb

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

Database Server Instances

数据库的规模取决于工作集大小(即在任意时间点访问的数据量)以及并发请求数。

FastComments 对 Mongo 相当友好,对于热点查询它使用索引提示、流式游标,并在多个区域设置并发限制以防止下游系统过载。

下面是关于数据库实例大小的一般指导。请注意,这里是__每个实例__的配置,而不是集群的总资源

Concurrent UsersComments StoredCPUs Per InstanceMemory Per Instance
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_DIRBACKUP_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.orghr.mycorp.org。您可以配置这些 分别,但可以通过在同一 On-Prem 部署上创建单独的 Customization Rules 来托管它们并配置它们各自的行为。

安全 Internal Link

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

总结

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