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

Где Antimatter хранит свои параметры, три способа их изменения (системная консоль, переменные окружения, amctl) и куда пишутся журналы.

Где хранятся параметры

Каждый параметр сервера имеет имя, состоящее из раздела и ключа, например ServiceSettings.SiteURL или EmailSettings.SMTPServer. Вместе они образуют одну конфигурацию, которая хранится в одном из двух мест:

  • В базе данных. Файл compose сайта устанавливает AM_CONFIG в URL подключения к PostgreSQL, поэтому конфигурация представляет собой строку в базе данных, а контейнер ничего не сохраняет на диске. Несколько серверов, использующих одну базу данных, также разделяют свою конфигурацию.
  • В файле. Если переменная AM_CONFIG не задана, сервер читает файл config/config.json, расположенный рядом с каталогом bin/ (в Docker-образе это /antimatter/config/config.json). Именно так работают архивы релизов и файлы compose для продакшена в antimatter-docker, а также пакеты .deb и .rpm, где файл находится по пути /etc/antimatter/config/config.json. Обеспечьте, чтобы этот файл мог читать только пользователь сервера: в нём хранятся пароли и ключи.

AM_CONFIG (или флаг --config команды antimatter) принимает либо путь к файлу, либо URL postgres://. Для параметров, которые вы не указали, используются значения по умолчанию.

Чтобы перенести существующую конфигурацию из файла в базу данных, выполните это на сервере, а затем запустите сервер с AM_CONFIG, установленным в тот же URL:

amctl --local config migrate /opt/antimatter/config/config.json \
    "postgres://antimatter:PASSWORD@localhost:5432/antimatter?sslmode=disable&connect_timeout=10"

Переменные окружения

Любой параметр также можно задать с помощью переменной окружения. Переменные имеют приоритет над сохраненной конфигурацией, что делает их идеальными для того, что относится к развертыванию: база данных, URL сайта, файловое хранилище, порты.

Правило именования

Напишите AM_, затем раздел, затем ключ, заглавными буквами и разделенными подчеркиваниями. Слова внутри имени раздела или ключа не разделяются:

ПараметрПеременная
ServiceSettings.SiteURLAM_SERVICESETTINGS_SITEURL
SqlSettings.DataSourceAM_SQLSETTINGS_DATASOURCE
EmailSettings.SMTPServerAM_EMAILSETTINGS_SMTPSERVER
PrivacySettings.EnableUserBlockingAM_PRIVACYSETTINGS_ENABLEUSERBLOCKING
  • Для параметров true и false используются значения true или false; числа — обычные числа.
  • Для списочных параметров значения разделяются пробелами, например AM_SERVICESETTINGS_TRUSTEDPROXYIPHEADER="X-Forwarded-For X-Real-IP".
  • Параметры, являющиеся объектами, принимают JSON. Единственной такой переменной для приложений является AM_PLUGINSETTINGS_PLUGINS, и она заменяет параметры всех приложений сразу: вместо этого задавайте параметры приложений в системной консоли или с помощью amctl (см. ниже).
  • В старых установках Mattermost используется префикс MM_, например MM_SQLSETTINGS_DATASOURCE. Он по-прежнему работает как устаревший псевдоним. Если заданы обе переменные, переменная AM_ имеет приоритет.

Параметр, заданный переменной, блокируется в Системной консоли с примечанием «Этот параметр задан переменной окружения. Его нельзя изменить через Системную консоль». Он не записывается в сохранённую конфигурацию: если удалить переменную, снова вступит в силу сохранённое значение.

С Docker Compose

Добавьте переменные в блок environment: сервиса antimatter или в файл compose.override.yaml рядом с compose.yaml (Compose читает его автоматически, и он сохраняется после обновления загруженного файла):

services:
  antimatter:
    environment:
      AM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
      AM_EMAILSETTINGS_SMTPPORT: "587"
      AM_LOGSETTINGS_CONSOLELEVEL: INFO

Примените изменения командой docker compose up -d, которая пересоздаёт контейнер.

Переменные, используемые приложениями

Некоторые переменные не являются настройками и не имеют соответствующих полей в Системной консоли: AM_CONFIG (путь к конфигурации), а также AM_AI_ENCRYPTION_KEY и AM_AI_ENCRYPTION_PREVIOUS_KEYS — ключи, используемые для шифрования API-ключей подключений к моделям (см. ИИ).

Некоторые приложения читают собственные переменные, заданные для сервиса antimatter: приложение Calls читает AM_CALLS_* (см. Звонки и голосовые каналы), а приложение GIFs читает AM_GIFS_SERVICE_URL, AM_GIFS_API_KEY и AM_GIFS_UPLOAD_KEY (см. Встроенные приложения).

Системная консоль

Системная консоль — это административная область веб-приложения, предназначенная для системных администраторов. Чтобы открыть её, нажмите на свой аватар в верхней части боковой панели приложения и выберите пункт Системная консоль, либо перейдите по адресу https://chat.example.com/admin_console. В боковой панели консоли есть поле Поиск, которое позволяет искать по всем страницам.

The System Console, with its sidebar of sections on the left and the SAML 2.0 settings page on the right.
Системная консоль. Боковая панель группирует страницы по разделам, таким как Отчеты, Управление пользователями и Окружение.

Разделы консоли:

  • Отчеты: статистика и журналы сервера.
  • Управление пользователями: пользователи, группы, сообщества (перечислены как Команды), каналы, разрешения и делегированное администрирование.
  • Системные атрибуты: пользовательские атрибуты профиля и доступ на основе атрибутов.
  • Окружение: веб-сервер, база данных, файловое хранилище, прокси изображений, SMTP, push-уведомления, ограничение частоты запросов, ведение журналов, длительность сессий, мониторинг производительности.
  • Настройки сайта: фирменный стиль, пользователи и команды, уведомления, сообщения, обмен файлами и другие параметры, влияющие на весь сервер.
  • Аутентификация: регистрация, вход по электронной почте и паролю, MFA, AD/LDAP, SAML 2.0, OAuth 2.0, OpenID Connect и доступ для гостей.
  • ИИ: подключения к моделям и встроенные функции ИИ (перефразирование, краткие изложения, автоматический перевод, синтез речи). Подробнее см. ИИ.
  • Плагины: управление приложениями и параметры каждого установленного приложения.
  • Интеграции: вебхуки, команды с косой чертой, аккаунты ботов, GIF, синтез речи, CORS.
  • Комплаенс: хранение данных, экспорт и мониторинг комплаенса, журналы аудита, пользовательские условия использования.
  • Экспериментальные: функции, которые могут измениться.

В этом руководстве параметр указывается как его путь в Системной консоли, затем его метка, а затем ключ конфигурации. Например, Системная консоль › Настройки сайта › Пользователи и команды › Включить игнорирование, блокировку и запросы сообщений (PrivacySettings.EnableUserBlocking).

Большинство изменений вступают в силу сразу после нажатия кнопки Сохранить. Для некоторых (адрес прослушивания, некоторые настройки базы данных и кэша) требуется перезапуск, и об этом указывается на странице.

Компания или сообщество

У каждого сообщества есть тип, который определяет некоторые значения по умолчанию:

  • Сообщество — для публичных или хобби-сообществ: звонки в каналах отключены (общение происходит в голосовых каналах), а архивировать каналы могут только администраторы сообщества и роли, управляющие каналами.
  • Компания — для корпораций или организаций: звонки в каналах включены, а архивировать канал могут его администраторы (создатель канала и те, кого он назначил администраторами).

Системная консоль › Настройки сайта › Пользователи и команды › Тип новых сообществ (TeamSettings.DefaultCommunityKind, AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND) определяет тип сообществ, создаваемых с этого момента: community (по умолчанию) или workplace. Предустановка макета, выбранная при создании сообщества, задаёт его собственный тип. Администраторы каждого сообщества могут изменить его тип позже в разделе Параметры сообщества › Каналы › Тип сообщества.

Для компании установите значение Компания до создания первого сообщества или до обновления существующего сервера до версии 0.9.0: при обновлении каждому существующему сообществу присваивается значение, которое имеет этот параметр в момент обновления (см. Обновление до версии 0.9.0).

Утилита командной строки amctl

amctl управляет сервером из командной строки: пользователи, сообщества, каналы, приложения, конфигурация, задания и многое другое. Она взаимодействует с сервером одним из двух способов.

Локальный режим, на сервере

Локальный режим позволяет amctl взаимодействовать с сервером через Unix-сокет без входа в систему. Он включён в Docker-образе, а также в пакетах .deb и .rpm. На сервере, установленном из архива, включите его с помощью ServiceSettings.EnableLocalMode (AM_SERVICESETTINGS_ENABLELOCALMODE=true). По умолчанию сокет находится в /var/tmp/antimatter_local.socket (ServiceSettings.LocalModeSocketLocation).

# with Docker Compose
docker compose exec antimatter amctl --local system status
# with a release archive
sudo -u antimatter /opt/antimatter/bin/amctl --local system status
# with the .deb or .rpm package
sudo -u antimatter amctl --local system status
Любой, кто может использовать сокет или выполнить docker compose exec на хосте, получает полные права системного администратора.

Удаленный, с учетной записью

С любого компьютера войдите с учетной записью системного администратора (или с помощью персонального токена доступа), а затем выполняйте команды для этого сервера:

amctl auth login https://chat.example.com --name prod --username admin
amctl system status

Команды конфигурации

КомандаНазначение
amctl config get ServiceSettings.SiteURLВыводит один параметр.
amctl config set TeamSettings.EnableOpenServer falseИзменяет один параметр. Параметры списка принимают несколько значений.
amctl config patch settings.jsonСливает файл JSON с параметрами в конфигурацию.
amctl config showВыводит всю конфигурацию в формате JSON.
amctl config editОткрывает конфигурацию в вашем редакторе ($EDITOR).
amctl config resetСбрасывает параметры к значениям по умолчанию.
amctl config reloadПерезагружает конфигурацию из места хранения после изменений, сделанных вне сервера.

Настройки приложений находятся в PluginSettings.Plugins.<app id>, с ключами в нижнем регистре. Например, чтобы установить URL и ключ службы приложения GIFs с Docker-хоста:

docker compose exec -T antimatter amctl --local config patch /dev/stdin <<'EOF'
{"PluginSettings": {"Plugins": {"com.antimatterchat.gifs": {
  "serviceurl": "http://gifs:8080/v2",
  "apikey": "the GIFS_API_KEY of your .env"
}}}}
EOF

Другие полезные команды: amctl user create, amctl user deactivate, amctl team create, amctl plugin list, amctl plugin enable, amctl system supportpacket и amctl logs. Для просмотра параметров каждой команды выполните amctl help <command>.

Журналы

Сервер записывает журнал в два места, каждое со своим уровнем (DEBUG, INFO, WARN или ERROR), который настраивается в Системная консоль › Окружение › Ведение журнала:

НазначениеПараметрыЗначения по умолчанию
Консоль (стандартный вывод)Исходящие журналы в консоль (LogSettings.EnableConsole), Уровень логирования в консоли (LogSettings.ConsoleLevel), Выводит логи в консоль в JSON (LogSettings.ConsoleJson)включено, DEBUG, JSON
Файл antimatter.logИсходящие журнали в файл (LogSettings.EnableFile), Файловый уровень логирования (LogSettings.FileLevel), Каталог с файлом журнала (LogSettings.FileLocation)включено, INFO, каталог logs/ рядом с bin/

Файлы журнала ротируются при достижении 100 МБ, а старые архивируются.

Файл compose сайта отключает ведение журнала в файл (AM_LOGSETTINGS_ENABLEFILE=false), поэтому логи доступны только в выводе контейнера:

docker compose logs -f antimatter
docker compose logs --since 1h antimatter | grep -i error

Уровень записи в консоль по умолчанию установлен на DEBUG, что приводит к подробному выводу. На загруженном сервере установите AM_LOGSETTINGS_CONSOLELEVEL=INFO. В файле config.json из архива релиза и из пакетов это значение уже установлено на INFO. При использовании архива релиза под управлением systemd вывод в консоль направляется в журнал (journalctl -u antimatter), а в файл — в /opt/antimatter/logs/antimatter.log. В пакетах файловая запись отключена, поэтому их логи доступны только в журнале.

Если ведение журнала в файл включено, системные администраторы также могут просматривать последние записи журнала в Системная консоль › Отчеты › Журнал сервера или с помощью команды amctl logs.