
Язык 🇷🇺 Русский
Обзор
Начало работы
Развертывание
Архитектура
Установка и интеграция
Рекомендации по безопасности
Размещение FastComments на собственных серверах
FastComments предлагает несколько вариантов развертывания. Наиболее распространённый — когда мы размещаем приложение для вас.
Однако мы понимаем, что некоторые клиенты не могут хранить свою информацию в облаке и требуют размещения всех своих данных на собственных серверах.
Эта документация охватывает этот случай использования.
Что включено 
FastComments On Prem позволяет развернуть наше решение для живых комментариев, включая все инструменты модерации и администрирования, на вашем собственном оборудовании.
Это означает, что вы контролируете свои данные, и систему комментариев можно ограничить вашей локальной сетью (LAN) или корпоративной сетью.
С чего начать 
Чтобы начать развертывание FastComments On Prem, свяжитесь с нами.
После настройки вы всегда можете скачать последний docker image со страницы лицензирования.
Экземпляры 
Требуемые компоненты
Для On-Prem, FastComments состоит только из сервера приложения и базы данных. Мы упростили развёртывание так, чтобы приложение могло обслуживать весь трафик напрямую без добавления других компонентов.
Сервер приложения предоставляется в Docker-образе и может быть развернут с любой системой управления контейнерами.
База данных, MongoDB, может запускаться самостоятельно или размещаться у другого провайдера, такого как AWS DocumentDB или MongoDB Atlas.
FastComments в настоящее время тестируется с MongoDB 7, однако мы стремимся обеспечить совместимость с DocumentDB для упрощения развёртывания.
Размеры инстансов
Вы увидите, что FastComments довольно хорошо оптимизирован и не требует больших машин для самого приложения, чтобы поддерживать низкие P99s.
Все пакетные и cron-задачи используют потоковую обработку, чтобы ограничить общее потребление памяти.
Ниже приведённые таблицы для сервера приложения и базы данных помогут с подбором размеров.
Экземпляры сервера приложения
| Одновременных пользователей | Всего CPU кластера | Общая память кластера |
|---|---|---|
| 100 | 1 | 256mb |
| 1K | 2 | 512mb |
| 10K | 8 | 1gb |
| 100K | 32 | 8gb |
| 1M | 64 | 64gb |
Например, одно ядро, обслуживающее около 100 веток комментариев в секунду, обычно не использует более 250mb RSS.
Экземпляры сервера базы данных
Размер базы данных зависит от размера рабочего набора, то есть объёма данных, к которым вы обращаетесь в определённый момент времени, а также от количества одновременных запросов.
FastComments довольно бережно относится к Mongo: для «горячих» запросов он использует подсказки индекса, потоковые курсоры и имеет ограничения параллелизма в различных областях, чтобы предотвратить перегрузку downstream-систем.
Ниже приведена общая рекомендация по размерам экземпляров базы данных. Обратите внимание, что это на экземпляр, а не суммарные ресурсы в кластере.
| Одновременных пользователей | Хранимых комментариев | CPU на экземпляр | Память на экземпляр |
|---|---|---|---|
| 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 | Тип окружения. | Да | production, dev | |
| MONGO_URI | URI подключения к БД. | Да | ||
| MONGO_ENABLE_SSL | false | Включает использование SSL для подключения к базе данных. | Нет | true, false |
| MONGO_ENABLE_SSL_VALIDATE | false | Включает проверку сертификата против CA при подключении к Mongo. | Нет | true, false |
| MONGO_SSL_CA | PEM-файл CA для Mongo SSL. | Нет | /path/to/some-cert.pem | |
| ADMIN_NOTIFICATIONS_EMAIL | 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_NAME | FastComments 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_ID | ID вашей учётной записи на fastcomments.com. Используется для регистрации вашего лицензионного ключа. | Нет | ||
| ON_PREM_LICENSE_KEY | Лицензионный ключ для on-prem развертывания. | Нет | ||
| GIPHY_API_KEY | API-ключ для Giphy. Если не указан, следует создать правило конфигурации, которое отключает выбор GIF. | Нет | ||
| GIPHY_DEFAULT_RATING | pg | Используется для интеграции с 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_TYPE | local_disk | Где должны храниться большие файлы, такие как экспорты. | Нет | local_disk, s3 |
| FROM_EMAIL_HOST | Хост, с которого должны отправляться письма. | Нет | example.com | |
| COOKIE_ID | fastcomments.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-файлу со следующим примером формата:

В приведённом выше примере мы определяем транспорт по умолчанию SMTP с названием mailgun. Также мы определяем специальный транспорт, который используем конкретно для писем @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.
Например, вот эндпоинт на нашем US-шарде.
Это может быть полезно, чтобы понять, почему система зависает или находится под нагрузкой. Если, например, SRE хочет выяснить, почему система испытывает высокую загрузку CPU, они могли проверить этот эндпоинт, чтобы получить имя неправильно работающего cron.
Код виджета 
Фрагменты кода фронтенда и библиотеки для On-Prem такие же, как и в SaaS-продукте. Однако вы должны указать apiHost и правильный путь к скрипту:

Приведённый выше пример очень простой. Мы также можем использовать официальные библиотеки для React, Angular, Vue, Svelte и т.д.
API 
К API можно получить доступ так же, как и к обычному SaaS-продукту: вы входите в панель управления On-Prem, чтобы создать API-ключи и использовать эти ключи для доступа к API. Конечные точки API on-prem такие же, как и для SaaS-продукта.
Несколько доменов 
Ваша локальная (On-Prem) установка FastComments может обслуживать комментарии для нескольких внутренних доменов, например app.mycorp.org и hr.mycorp.org.
Вы можете настроить их
отдельно, но разместить их на одной On-Prem установке, создав отдельные Customization Rules для настройки их индивидуального поведения.
Безопасность 
По умолчанию FastComments предполагает, что потоки комментариев являются общедоступными. Чтобы повысить уровень безопасности, рекомендуется создать правило настройки (Customization Rule) с включенной опцией Requires SSO.
Это приведёт к тому, что все конечные точки, связанные с комментариями, будут требовать аутентификацию SSO.
В заключение
Вы дошли до конца документации On Prem. Сообщите нам, какие у вас есть дополнительные комментарии или вопросы ниже - вы можете также связаться с нами через Страницу поддержки.