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 довольно хорошо оптимизирован и не требует крупных машин для самого приложения, чтобы поддерживать низкие P99s.

Все пакетные и cron-задачи используют стриминг для ограничения общего использования памяти.

Ниже приведённые таблицы для сервера приложения и базы данных могут помочь с подбором размеров.

Application Server Instances

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

Например, одно ядро, обслуживающее около 100 потоков комментариев в секунду, как правило, никогда не использует более 250mb RSS.

Database Server Instances

Подбор размеров базы данных зависит от размера рабочего набора (working set size), то есть объёма данных, к которым вы обращаетесь в данный момент времени, а также от количества одновременных запросов.

FastComments довольно бережно относится к Mongo: для горячих запросов используются подсказки индекса (index hints), стриминговые курсоры и имеются лимиты конкурентности в различных областях, чтобы предотвратить перегрузку downstream-систем.

Ниже приведено общее руководство по размерам инстансов базы данных. Обратите внимание, что это на каждый инстанс, а не суммарные ресурсы в кластере.

Concurrent UsersComments StoredCPUs Per InstanceMemory Per Instance
1001k1256mb
1K5k2512mb
10K100k82gb
100K500k168gb
1M5M3232gb

Приведённые выше таблицы являются консервативными оценками. Вы можете обнаружить, что фактические требования отличаются в зависимости от вашей конкретной конфигурации (размеры страниц, объём комментариев и т.д.).

Конфигурация Internal Link

FastComments использует переменные окружения для конфигурации. В следующем списке перечислены все поддерживаемые переменные, имеющие отношение к On-Prem.

VariableDefaultInfoRequiredExamples or Valid Values
NODE_ENVТип окружения.Даproduction, dev
MONGO_URIURI подключения к БД.Да
MONGO_ENABLE_SSLfalseВключает использование SSL для подключения к базе данных.Нетtrue, false
MONGO_ENABLE_SSL_VALIDATEfalseВключает проверку сертификата против CA при подключении к Mongo.Нетtrue, false
MONGO_SSL_CAPEM-файл CA для Mongo SSL.Нет/path/to/some-cert.pem
ADMIN_NOTIFICATIONS_EMAILЭлектронная почта, на которую должны приходить важные системные уведомления.Нетadmin-group@bigcorp.com
IP_HASH_SALTСоль для хеширования IP-адресов.Да
SESSION_SECRETКлюч, используемый для подписи сессий.Да
SESSION_STORE_SECRETКлюч, используемый для подписи/хеширования сессий в хранилище. Должен отличаться от SESSION_SECRET.Да
HOSTNAMEХостнейм, где развернут FastComments (панель администрирования и т.д.). НЕ должен включать порт или протокол.Даexample.com
HOST_ADDRДоступный URI, где развернут FastComments (панель администрирования и т.д.).Даhttps://example.com
EMAIL_CONFIG_PATHПуть в локальной файловой системе к конфигурации электронной почты (SMTP, сопоставления доменов/провайдеров и т.д.).Да/my/config.json
EMAIL_DEFAULT_FROM_NAMEFastComments RobotЗаголовок "From Name" в письме.НетMy Company Name
EMAIL_DEFAULT_FOOTER_LOGO/images/logo-32-2020-01.pngЛоготип в футере письма.Нетhttps://exmaple.com/footer.png
EMAIL_DEFAULT_TRANSPORTПереопределение для "defaultTransport" в EMAIL_CONFIG_PATH. Полезно при развертывании одного и того же файла конфигурации в разных окружениях.НетmyTransportName
ON_PREM_TENANT_IDID вашей учетной записи на fastcomments.com. Используется для регистрации лицензионного ключа.Нет
ON_PREM_LICENSE_KEYЛицензионный ключ для on-prem.Нет
GIPHY_API_KEYКлюч Giphy 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.sidИмя cookie fastcomments.Нет
COOKIE_HOSTNAME.fastcomments.comЗначение поля "hostname" cookie. Рекомендуется добавлять префикс с точкой.Нет.example.com
S3_ACCESS_KEYИспользуется для загрузок файлов пользователями, аватаров и т.д. По умолчанию — локальная FS, если не определено.Нет
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

В приведенном выше примере мы определяем транспорт по умолчанию для электронной почты SMTP с именем mailgun. Также мы определяем специальный транспорт, который используем специально для писем @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 и корректный путь к скрипту:

Код комментариев для 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 и т.д.
10 }];
11</script>
12

Приведённый выше пример очень простой. Мы также можем использовать официальные библиотеки для React, Angular, Vue, Svelte и т.д.

API Internal Link

К API можно получить доступ так же, как и к обычному SaaS-продукту: вы входите в панель управления On-Prem, чтобы создать API-ключи, и используете эти ключи для доступа к API. Конечные точки API в локальном развертывании такие же, как и у SaaS-продукта.

Несколько доменов Internal Link

Ваша On-Prem установка FastComments может обслуживать комментарии для нескольких внутренних доменов, например app.mycorp.org и hr.mycorp.org. Вы можете настраивать их отдельно, но размещать их на одной On-Prem установке, создавая отдельные Customization Rules для настройки их индивидуального поведения.

Безопасность Internal Link

По умолчанию FastComments предполагает, что потоки комментариев публичны. Чтобы добавить уровень безопасности, рекомендуется создать правило настройки (Customization Rule) с отмеченной опцией Requires SSO.

Это приведёт к тому, что все конечные точки, связанные с комментариями, потребуют аутентификации через SSO.

В заключение

Вы дошли до конца документации On Prem. Сообщите нам, какие у вас есть дополнительные комментарии или вопросы ниже - вы можете также связаться с нами через Страницу поддержки.