
语言 🇨🇳 简体中文
背景
入门
部署
架构
安装与集成
安全提示
在本地托管 FastComments
FastComments 提供多种部署方案。最常见的是由我们为您托管应用程序。
但是,我们理解有些客户不能将其信息存储在云端,并需要在本地托管其所有数据。
本文档涵盖该用例。
包含内容 
FastComments On Prem 允许您在您自己的硬件上部署我们的实时评论解决方案,包括所有审核和管理工具,
这意味着您可以控制您的数据,并且评论系统可以限制在您的本地 LAN 或企业网络中。
实例 
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 |
以上表格为保守估计。根据你的具体配置(页面大小、评论量等),实际需求可能有所不同。
配置 
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 文件的路径,该文件具有以下示例格式:

在上述示例中,我们定义了一个名为 mailgun 的默认 SMTP 邮件传输。我们还为 @yahoo.com 的电子邮件专门定义了一个特殊传输。在某些场景中,希望针对某个域使用特定提供商或发送 IP 以优化投递。这是可选的。
DocumentDB
当连接到 DocumentDB 时,您需要指定 MONGO_ENABLE_SSL=true MONGO_SSL_CA=/some/path.pem 以兼容默认设置。
数据库停机与维护模式 
FastComments 支持自动维护模式。如果数据库宕机,它仍然可以继续为热门评论线程提供服务。
另外,在维护模式下,所有评论都会保存到 BACKUP_DIR。系统恢复上线后,这些评论会被处理(例如检查垃圾评论等)并保存。
其实现方式是每小时确定前 100 个最受欢迎的评论线程并将其内容缓存到磁盘上。确定前 100 个线程 是基于预先计算的状态完成的,因此不是一个开销大的定期任务。
这是完全可选的,只有在设置了 CACHE_DIR 和 BACKUP_DIR 时才会启用。当然,这会使应用节点变为有状态,但这是可以随时丢失且不会导致应用异常的状态。
请注意,在维护模式下无法对评论线程进行适当的身份验证,因此只有被安全地视为公开的线程会被定期备份。
在维护模式下,许多功能不可用。
锁 
像任何分布式系统一样,FastComments 需要一种方式来锁定资源和流程。可以通过 /locks-in-progress 端点来监控这些锁。
这对于查看系统为何卡住或在高负载时很有用。如果 SRE 想弄清系统为何出现高 CPU 负载,他们可以 检查此端点以获取出问题的 cron 的名称。
小部件代码 
本地部署的前端代码片段和库与 SaaS 产品相同。不过,您必须指定 apiHost 和正确的脚本路径:

上面是一个非常简单的示例。我们也可以使用官方的 React、Angular、Vue、Svelte 等库。
API 
可以像常规的 SaaS 产品一样访问该 API:您可以登录 On-Prem 仪表板以创建 API 密钥,并使用这些密钥访问该 API。 API 端点在 on-prem 与 SaaS 产品相同。
总结
你已到达 On Prem 文档的末尾。请在下方告诉我们你有任何进一步的意见或问题 - 你 也可以通过 支持页面 与我们联系。