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 Users Total Cluster CPUs Total Cluster Memory
100 1 256mb
1K 2 512mb
10K 8 1gb
100K 32 8gb
1M 64 64gb

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

Database Server Instances

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

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

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

Concurrent Users Comments Stored CPUs Per Instance Memory Per Instance
100 1k 1 256mb
1K 5k 2 512mb
10K 100k 8 2gb
100K 500k 16 8gb
1M 5M 32 32gb

以上表格为保守估计。根据你的具体配置(页面大小、评论量等),实际需求可能有所不同。

配置 Internal Link

FastComments 使用环境变量进行配置。以下列表概述了与 On-Prem 相关的所有受支持变量。

Variable Default Info Required Examples or Valid Values
NODE_ENV 环境类型。 Yes production, dev
MONGO_URI 数据库连接 URI。 Yes
MONGO_ENABLE_SSL false 启用使用 SSL 连接到数据库。 No true, false
MONGO_ENABLE_SSL_VALIDATE false 启用在连接到 Mongo 时根据 CA 验证证书。 No true, false
MONGO_SSL_CA Mongo SSL CA pem 文件。 No /path/to/some-cert.pem
ADMIN_NOTIFICATIONS_EMAIL 接收重要系统相关通知的电子邮件地址。 No admin-group@bigcorp.com
IP_HASH_SALT 用于哈希化 IP 地址的盐值。 Yes
SESSION_SECRET 用于签名会话的密钥。 Yes
SESSION_STORE_SECRET 用于在存储中签名/哈希会话的密钥。必须与 SESSION_SECRET 不同。 Yes
HOSTNAME 部署 FastComments(管理面板等)所在的主机名。不应包含端口或协议。 Yes example.com
HOST_ADDR 可访问的 URI,FastComments(管理面板等)部署所在位置。 Yes https://example.com
EMAIL_CONFIG_PATH 本地文件系统上存放电子邮件配置(SMTP、域/提供商映射等)的路径。 Yes /my/config.json
EMAIL_DEFAULT_FROM_NAME FastComments Robot 电子邮件 “From Name” 头。 No My Company Name
EMAIL_DEFAULT_FOOTER_LOGO /images/logo-32-2020-01.png 电子邮件页脚徽标。 No https://exmaple.com/footer.png
EMAIL_DEFAULT_TRANSPORT 覆盖 EMAIL_CONFIG_PATH 中的 "defaultTransport"。在将相同配置文件部署到不同环境时很有用。 No myTransportName
ON_PREM_TENANT_ID 您在 fastcomments.com 上帐户的 ID。用于注册您的许可证密钥。 No
ON_PREM_LICENSE_KEY 本地部署的许可证密钥。 No
GIPHY_API_KEY Giphy API 密钥。如果未指定,您应创建一条配置规则以禁用 gif 选择器。 No
GIPHY_DEFAULT_RATING pg 用于 giphy 集成。也可以通过小部件自定义规则覆盖。 No g, pg, pg-13, r
OPENAI_SECRET_KEY 用于 OpenAI 驱动的功能,例如可选的基于 GPT 的垃圾评论检测。 No
CDN_HOST_ADDR 获取资源的主机名。默认为 HOSTNAME 的值。 No example.com
LARGE_FILE_HOST_ADDR 获取大文件(如导出)的主机名。默认为 CDN_HOST_ADDR 的值。 No example.com
LARGE_FILE_LOCATION_TYPE local_disk 存储大文件(如导出)的方式。 No local_disk, s3
FROM_EMAIL_HOST 发送电子邮件时应使用的主机名。 No example.com
COOKIE_ID fastcomments.sid fastcomments cookie 的名称。 No
COOKIE_HOSTNAME .fastcomments.com cookie “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

本地部署的前端代码片段和库与 SaaS 产品相同。不过,您必须指定 apiHost 和正确的脚本路径:

本地部署的评论代码
Copy Copy
1
2<script src="https://my.host.com/js/embed-v2.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5 FastCommentsUI(document.getElementById('fastcomments-widget'), {
6 tenantId: "demo",
7 apiHost: "https://my.host.com"
8 // ... 也可以传递 SSO 有效载荷等。
9 });
10</script>
11

上面是一个非常简单的示例。我们也可以使用官方的 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 文档的末尾。请在下方告诉我们你有任何进一步的意见或问题 - 你 也可以通过 支持页面 与我们联系。