Установка Antimatter

Установите Antimatter с помощью готового файла compose, из пакета .deb или .rpm релиза или из архива релиза. Затем создайте учётную запись первого администратора.

Установка с помощью Docker Compose

Это рекомендуемый способ. Один файл compose запускает Antimatter, PostgreSQL, хранилище файлов и службу GIF. Вам понадобится сервер на Linux с Docker Engine и его плагином Compose (docker compose), 2 ядра CPU и 4 ГБ оперативной памяти или больше.

1. Скачайте файл compose

mkdir antimatter && cd antimatter
curl -fsSLO https://antimatter.chat/compose.yaml

2. Создайте файл .env

Файл compose читает свои настройки из файла .env в той же директории. Создайте его со случайными секретами:

cat > .env <<EOF
SITE_URL=http://localhost:8065
POSTGRES_PASSWORD=$(openssl rand -hex 24)
S3_SECRET_KEY=$(openssl rand -hex 24)
GIFS_API_KEY=$(openssl rand -hex 24)
AM_AI_ENCRYPTION_KEY=$(openssl rand -base64 32)
EOF
chmod 600 .env

Укажите в SITE_URL адрес, который пользователи будут вводить в браузере, например http://192.168.1.20:8065 в локальной сети или https://chat.example.com с доменом. Сохраните файл .env: база данных и хранилище используют из него пароли, заданные при первом запуске, ключи API для подключений моделей ИШ шифруются с помощью AM_AI_ENCRYPTION_KEY, а тот же файл необходим для восстановления из резервной копии.

3. Запустите

docker compose up -d
docker compose ps

Первый запуск занимает минуту-две: PostgreSQL создаёт базу данных, одноразовая служба bucket создаёт хранилище, одноразовая служба gifs-stickers импортирует стартовый набор стикеров, а Antimatter создаёт свои таблицы. Следите за процессом с помощью docker compose logs -f antimatter.

Чтобы использовать доменное имя и HTTPS с самого начала, см. Домен и HTTPS: с файлом compose это всего две дополнительные строки в .env и профиль https.

Переменные .env

ПеременнаяЗначение по умолчаниюНазначение
SITE_URLобязательныйПубличный адрес Antimatter (ServiceSettings.SiteURL).
POSTGRES_PASSWORDобязательныйПароль пользователя базы данных antimatter.
S3_SECRET_KEYобязательныйСекретный ключ хранилища файлов.
GIFS_API_KEYобязательныйКлюч, который Antimatter использует для обращения к службе GIF.
AM_AI_ENCRYPTION_KEYпустоКлюч, шифрующий ключи API для подключений моделей ИШ (openssl rand -base64 32). Если оставить пустым, сервер создаст файл с ключом в томе data. См. Ключ шифрования.
GIFS_UPLOAD_KEYпустоПозволяет пользователям добавлять собственные GIF и наклейки из панели выбора и удалять их. Если оставить пустым, загрузка отключается.
DOMAINпустоВаше доменное имя, для профиля https.
HTTP_PORT8065Порт хоста веб-сервера Antimatter.
CALLS_PORT8443UDP- и TCP-порт для аудио и видео звонков.
EDGE_SUBNET172.29.71.0/28Подсеть сети между Caddy и Antimatter. Измените, если она пересекается с одной из ваших сетей.
TZUTCЧасовой пояс контейнеров.
ANTIMATTER_IMAGEghcr.io/antimatterchat/antimatter-next:latestОбраз Antimatter для запуска (см. ниже).

Что запускается

СлужбаОбразРоль
antimatterghcr.io/antimatterchat/antimatter-nextСервер, веб-приложение и встроенные приложения. Публикует порты HTTP_PORT и CALLS_PORT. Каталог данных — том data.
postgrespostgres:17-alpineБаза данных, в томе postgres.
filesrustfs/rustfsХранилище, совместимое с S3, для загруженных файлов и установленных приложений, в томе files.
bucketamazon/aws-cliСоздаёт бакет antimatter, а затем завершает работу.
gifsghcr.io/antimatterchat/gifs-serverСервис GIF и стикеров, в томе gifs.
gifs-stickersghcr.io/antimatterchat/gifs-serverИмпортирует стартовый набор стикеров при первом запуске, а затем завершает работу.
httpscaddy:2-alpineТолько для профиля https: HTTPS на портах 80 и 443.

PostgreSQL, хранилище и сервис GIF находятся во внутренней сети (private) без доступа в Интернет, к которой присоединяется только Antimatter. Ни один из них не публикует порты.

Контейнер Antimatter ничего не хранит на диске: его настройки находятся в базе данных (на неё указывает AM_CONFIG), а файлы и приложения — в сервисе хранилища. Контейнер можно удалить и пересоздать в любой момент. В его томе data хранится только файл с ключом шифрования ИШ, который сервер создаёт, если AM_AI_ENCRYPTION_KEY пуст. Всё, что нужно для резервного копирования, находится в томах postgres, files, gifs и data, а также в вашем файле .env.

Выберите образ

Опубликованы два образа Antimatter, оба для linux/amd64 и linux/arm64, и оба собраны из ветки main каждого репозитория:

ОбразВстроенные приложенияТеги
ghcr.io/antimatterchat/antimatterАгенты, звонки, GitHub, GitLab, Jira, Kanban, метрики и плейбуки.latest, X.Y.Z для релизов, sha-<commit>
ghcr.io/antimatterchat/antimatter-nextТо же самое, плюс голосовые каналы, опросы, почта, календарь, заметки, доски для рисования, GIF, списки дел и мемы. Пересобирается каждую ночь.latest, nightly, nightly-<YYYYMMDD>, sha-<commit>

Файл compose сайта использует antimatter-next, потому что сервис GIF и большинство приложений, описанных на этом сайте, доступны только в этом образе. Чтобы сменить образ, задайте ANTIMATTER_IMAGE в .env и выполните docker compose up -d.

Содержимое тега latest может измениться. В продакшене закрепляйте за собой конкретный тег, например nightly-20261015 или sha-<commit>, и меняйте его осознанно при обновлении. Сервер обновляет свою базу данных при запуске, поэтому вы не сможете вернуться к более старому образу или перейти с antimatter-next на antimatter, не восстановив резервную копию, сделанную до этого. См. Резервное копирование и обновления.

Внутри образа

  • Сервер находится в /antimatter, бинарные файлы antimatter и amctl — в /antimatter/bin (в PATH).
  • Он работает от имени непривилегированного пользователя antimatter (uid 2000) на минималистичном distroless-базовом образе, без оболочки.
  • Порты: 8065 (веб и API), 8067 (метрики), 8074 (кластер), 8443 UDP и TCP (звонки).
  • Режим локального хранилища (ServiceSettings.EnableLocalMode) включён, поэтому amctl --local работает внутри контейнера. Проверка работоспособности выполняется с помощью команды amctl system status --local.
  • Встроенные приложения находятся в /antimatter/prepackaged_plugins и подписаны ключом подписи приложений Antimatter.
  • Инструменты для извлечения текста (pdftotext, wvText, unrtf, tidy) включены в состав, что позволяет искать по содержимому загруженных документов.

Другие файлы compose

В репозитории antimatter-docker есть конфигурация для продакшена в deploy/compose/: nginx с собственными сертификатами или Let's Encrypt (certbot), PostgreSQL, опциональный сервис GIF (профиль gifs) и именованные тома для конфигурации, данных и журналов сервера, описанные в README. По умолчанию используется стабильный образ, а файлы хранятся на локальном томе, а не в S3. Используйте этот вариант, если предпочитаете nginx Caddy или уже имеете сертификаты.

Создание первого администратора

Откройте SITE_URL в браузере и создайте аккаунт. Первый аккаунт, созданный на новом сервере, становится системным администратором, после чего мастер настройки проведёт вас через создание первого сообщества (так в Antimatter называются команды или рабочие пространства).

Сделайте это сразу после первого запуска: до этого момента любой, кто первым достигнет сервера, станет его администратором. Чтобы создать аккаунт из командной строки, пока сервер недоступен извне:

docker compose exec antimatter amctl --local user create --system-admin --email-verified \
    --email admin@example.com --username admin --password 'a-long-password'
docker compose exec antimatter amctl --local team create --name main --display-name "Main"
docker compose exec antimatter amctl --local team users add main admin

Затем войдите на SITE_URL. Начните команду с пробела, чтобы пароль не попал в историю команд (при HISTCONTROL=ignorespace), либо смените пароль после входа.

Дальнейшие шаги после входа:

  1. Для компании или организации установите Тип новых сообществ в значение Компания. Тип уже созданного сообщества можно изменить в его параметрах: Компания или сообщество.
  2. Определите, кто может создавать аккаунты: Вход и аккаунты.
  3. Настройте электронную почту, чтобы приглашения и сброс пароля работали: Электронная почта и push-уведомления.
  4. Откройте порт для звонков в файрволе: Звонки и голосовые каналы.
  5. Проверьте, какие приложения включены: Встроенные приложения.

Скачать релиз

Без Docker установите Antimatter из файлов релиза на GitHub: github.com/AntimatterChat/antimatter/releases. У каждого релиза есть номер версии, например 0.9.0, а его тег — тот же номер с буквой v в начале (v0.9.0).

Antimatter находится в бета-версии: её релизы относятся к серии 0.9.0. Релиз, версия которого содержит суффикс после дефиса, например 0.9.0-rc.1, помечен на GitHub как Предварительный выпуск. Это тестовая версия, опубликованная перед финальным релизом.

Каждый релиз содержит следующие файлы для серверов amd64 и arm64:

ФайлОписание
antimatter_<version>-1_amd64.deb, antimatter_<version>-1_arm64.debПакет для Debian, Ubuntu и дистрибутивов на их основе.
antimatter-<version>-1.x86_64.rpm, antimatter-<version>-1.aarch64.rpmПакет для Fedora, RHEL и дистрибутивов, совместимых с RHEL.
antimatter-<version>-linux-amd64.tar.gz, antimatter-<version>-linux-arm64.tar.gzАрхив релиза для любого дистрибутива Linux, устанавливаемый вручную.
SHA256SUMSКонтрольные суммы SHA-256 для всех файлов релиза.

Пакеты и архив содержат одну и ту же программу: сервер (antimatter), командную утилиту (amctl), оба веб-приложения (стандартный и классический интерфейсы), встроенные приложения, шаблоны электронной почты и переводы. Пакеты добавляют службу systemd и файл конфигурации, поэтому каждый из них представляет собой комплексную установку: вам нужно только добавить базу данных PostgreSQL. Отдельных загрузок бинарных файлов нет: они находятся в архиве, в antimatter/bin/. Они статические, поэтому работают на любом дистрибутиве Linux соответствующей архитектуры.

В именах пакетов дефис в версии предварительного выпуска заменяется на тильду, чтобы менеджер пакетов сортировал предварительные выпуски перед финальными: версия 0.9.0-rc.1 дает antimatter_0.9.0~rc.1-1_amd64.deb и antimatter-0.9.0~rc.1-1.x86_64.rpm. В архиве дефис сохраняется.

Команда antimatter version выводит версию релиза как Номер сборки, а хэш коммита, из которого она была собрана, — как Хэш сборки. Строка Версия указывает версию линейки Mattermost, на которой основан Antimatter.

Проверка загрузки

Скачайте нужный файл и SHA256SUMS в одну и ту же директорию, со страницы релиза или с помощью curl, затем проверьте файл:

curl -fLO https://github.com/AntimatterChat/antimatter/releases/download/v<version>/antimatter_<version>-1_amd64.deb
curl -fLO https://github.com/AntimatterChat/antimatter/releases/download/v<version>/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS

Каждый скачанный файл должен быть указан со статусом OK. Любой другой результат означает, что файл поврежден или неполный: скачайте его снова и не устанавливайте. SHA256SUMS не подписан: он обнаруживает поврежденную загрузку, но не доказывает ничего больше, чем HTTPS-загрузка с GitHub.

Установка пакета .deb или .rpm

Пакет устанавливает Antimatter как службу systemd, которой для запуска требуется только база данных. Используйте его на 64-битном сервере Debian, Ubuntu, Fedora или совместимом с RHEL с systemd.

Что устанавливает пакет

ПутьСодержимое
/opt/antimatterПрограммы: bin/antimatter, bin/amctl, веб-приложения (client/, client-fusion/), встроенные приложения (prepackaged_plugins/), шаблоны, переводы и шрифты. При каждом обновлении этот каталог заменяется.
/etc/antimatter/antimatter.envНастройки службы в виде переменных AM_: база данных, URL сайта, служба GIF. Доступны только для чтения пользователем root. Обновления сохраняют этот файл.
/etc/antimatter/config/config.jsonФайл конфигурации, в котором сервер хранит настройки, изменённые в Системной консоли. Он создаётся из /opt/antimatter/defaults/config.json при первой установке и никогда не заменяется после этого.
/var/lib/antimatterЗагруженные файлы (data/) и установленные приложения (plugins/, client-plugins/).
/var/log/antimatterФайлы журналов, если вы включите ведение журнала в файл. По умолчанию это выключено: журналы пишутся в журнал системы.
/usr/lib/systemd/system/antimatter.serviceСлужба.
/usr/bin/amctlСсылка на /opt/antimatter/bin/amctl.

Каталоги, в которые сервер записывает данные в /opt/antimatter (config, data, plugins, client/plugins и logs), являются ссылками на /etc/antimatter, /var/lib/antimatter и /var/log/antimatter. Поэтому обновление, которое заменяет /opt/antimatter, никогда не затрагивает ваши данные. Пакет также создаёт системного пользователя antimatter, от имени которого работает сервер и которому принадлежат эти каталоги.

Пакет зависит от ca-certificates. Он рекомендует PostgreSQL (postgresql в Debian и Ubuntu, postgresql-server в Fedora и RHEL), media-types (mailcap для .rpm) и gifs-server — службу GIF, у которой есть собственный выпуск (см. ниже). apt и dnf устанавливают рекомендуемые пакеты, если они найдены. Пакет предлагает poppler-utils, wv, unrtf и tidy (без wv для .rpm): они извлекают текст из загруженных документов, чтобы поиск находил слова внутри них. Установите их самостоятельно, если вам это нужно.

1. Установка пакетов

Скачайте пакет Antimatter и пакет службы GIF для вашей архитектуры, проверьте их, как показано выше, и установите оба одной командой, чтобы выполнить рекомендацию по gifs-server (его нет в репозиториях дистрибутивов):

# Debian, Ubuntu
sudo apt install ./antimatter_<version>-1_amd64.deb ./gifs-server_*_amd64.deb
# Fedora, RHEL
sudo dnf install ./antimatter-<version>-1.x86_64.rpm ./gifs-server-*.x86_64.rpm

Сохрани ./: он указывает apt и dnf, что нужно установить локальный файл. Чтобы установить без сервиса GIF, исключите его пакет. Пакет активирует сервис antimatter, но не запускает его, а выводит следующие шаги.

2. Создайте базу данных

Antimatter требует PostgreSQL версии 15 или новее, на этом сервере или на другом. Проверьте версию PostgreSQL вашей дистрибуции с помощью psql --version. Если она старше, установите более новую версию из репозиториев проекта PostgreSQL или используйте базу данных на другом сервере. В Debian и Ubuntu пакет postgresql запускает базу данных. В Fedora и RHEL сначала создайте и запустите её:

sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql

Затем создайте пользователя и базу данных для Antimatter:

sudo -u postgres psql -c "CREATE USER antimatter WITH PASSWORD 'a-long-password'"
sudo -u postgres psql -c "CREATE DATABASE antimatter OWNER antimatter"

PostgreSQL должен принимать подключения с паролем с 127.0.0.1: строки host в файле pg_hba.conf с методом scram-sha-256.

3. Настройте базу данных и URL сайта

Отредактируйте /etc/antimatter/antimatter.env (sudoedit /etc/antimatter/antimatter.env). Уберите # перед строками, которые вы используете, и задайте параметры базы данных и адрес, который будут открывать пользователи:

AM_SQLSETTINGS_DRIVERNAME=postgres
AM_SQLSETTINGS_DATASOURCE=postgres://antimatter:a-long-password@localhost:5432/antimatter?sslmode=disable&connect_timeout=10
AM_SERVICESETTINGS_SITEURL=https://chat.example.com

В этот файл можно поместить любой параметр конфигурации в виде AM_<SECTION>_<SETTING>: например, SqlSettings.DataSource будет AM_SQLSETTINGS_DATASOURCE. Параметр, заданный здесь, нельзя изменить в Системной консоли. См. Конфигурация. Перезапускайте сервер после каждого изменения: sudo systemctl restart antimatter.

Сервис также устанавливает несколько значений по умолчанию, которые можно переопределить строкой в antimatter.env: ведение журнала в файлы отключено (AM_LOGSETTINGS_ENABLEFILE=false, AM_NOTIFICATIONLOGSETTINGS_ENABLEFILE=false), а локальный режим включен (AM_SERVICESETTINGS_ENABLELOCALMODE=true), чтобы amctl --local работал на сервере.

4. Запустите

sudo systemctl start antimatter
journalctl -u antimatter -f
sudo -u antimatter amctl --local system status

При первом запуске сервер создаёт таблицы, а затем начинает прослушивать порт 8065. Откройте http://<server>:8065 (или свой домен, если настроен reverse proxy, см. Домен и HTTPS) и сразу создайте первый аккаунт: он станет системным администратором. Чтобы создать его из командной строки, используйте команды amctl из раздела Создание первого администратора, заменив docker compose exec antimatter amctl --local на sudo -u antimatter amctl --local.

5. Включите GIFs

Приложение GIFs поставляется в комплекте и включено по умолчанию, а в antimatter.env уже указан адрес сервиса GIF на том же сервере (AM_GIFS_SERVICE_URL=http://127.0.0.1:8080/v2). Однако всё ещё требуется ключ API этого сервиса. Пакет gifs-server сгенерировал его при установке:

sudo systemctl start gifs-server-stickers    # imports the sticker pack, about a minute and a half
sudo systemctl start gifs-server
sudo grep -v '^#' /etc/gifs-server/api-keys

Впишите ключ в antimatter.env в виде AM_GIFS_API_KEY=<key> и перезапустите Antimatter, либо введите его в поле Ключ API в разделе Системная консоль › Плагины › GIFs. Если сервис GIF работает на другом сервере, укажите его адрес в AM_GIFS_SERVICE_URL. Чтобы пользователи могли добавлять собственные GIFs и стикеры, см. GIFs.

Служба

  • Служба работает от имени пользователя antimatter в каталоге /opt/antimatter и читает файл /etc/antimatter/antimatter.env. systemd перезапускает сервер при каждом его завершении и даёт ему до часа на запуск, поскольку миграции базы данных при обновлении версии могут занимать много времени.
  • Журналы службы доступны в journal: journalctl -u antimatter.
  • Служба защищена: каталоги /usr и /etc доступны серверу только для чтения (за исключением /etc/antimatter/config), а каталоги /home, /root и /run/user для него невидимы. Если вы переносите хранилище файлов (FileSettings.Directory), выберите каталог вне этих, принадлежащий пользователю antimatter.
  • При обновлении пакет заменяет файл службы. Чтобы его изменить, используйте sudo systemctl edit antimatter — ваши изменения сохранятся в отдельном файле.

Обновление пакета

  1. Сделайте резервную копию (см. Резервные копии и обновления).
  2. Скачайте новый пакет и файл SHA256SUMS, затем проверьте их.
  3. Остановите сервер, установите новый пакет поверх старого и запустите сервер снова:
    sudo systemctl stop antimatter
    sudo apt install ./antimatter_<new version>-1_amd64.deb     # or: sudo dnf install ./antimatter-<new version>-1.x86_64.rpm
    sudo systemctl start antimatter
    journalctl -u antimatter -f

Пакет не перезапускает сервер самостоятельно. После обновления он выводит Antimatter was upgraded; restart it to run the new version: sudo systemctl restart antimatter: если вы не остановили сервер заранее, перезапустите его немедленно. При обновлении заменяются /opt/antimatter и файл службы, а antimatter.env, config.json, /var/lib/antimatter и журналы сохраняются. При запуске сервер обновляет базу данных и устанавливает более новые версии встроенных приложений.

Если в новой версии изменён файл antimatter.env по умолчанию, apt спросит, нужно ли сохранить вашу версию: сохраните её. dnf сохраняет вашу версию и сохраняет новую как /etc/antimatter/antimatter.env.rpmnew. Обновления выполняются только вперёд: не устанавливайте более старую версию поверх более новой.

Удаление пакета

sudo apt remove antimatter или sudo dnf remove antimatter останавливает и отключает службу, а также удаляет программу. При этом сохраняются данные (/var/lib/antimatter), конфигурация (/etc/antimatter), база данных и пользователь antimatter: удалите их вручную, чтобы полностью удалить Antimatter.

Приложения в пакетах и архиве

Пакеты и архив содержат последнюю подписанную версию следующих приложений в prepackaged_plugins/: Agents, Calls, GIFs, Memes, Notes, Polls, Todo, Voice Channels и Whiteboard. Приложение, для которого на момент сборки сервера ещё не вышла релизная версия, не включается: ls /opt/antimatter/prepackaged_plugins показывает, что входит в вашу версию. Memes и Todo включены, но не активированы: Встроенные приложения объясняет, как их установить и включить.

Другие приложения из образов Docker не входят в пакеты или архив: Kanban, Playbooks, Mail, Calendar, GitHub, GitLab, Jira и Metrics. Установите каждое из них из собственных релизов:

ПриложениеРелизыИдентификатор приложения
Kanbanantimatter-plugin-boardsfocalboard
Плейбукиantimatter-plugin-playbooksplaybooks
Почтаantimatter-plugin-mailcom.antimatterchat.mail
Календарьantimatter-plugin-calendarcom.antimatterchat.calendar
GitHubantimatter-plugin-githubgithub
GitLabantimatter-plugin-gitlabcom.github.manland.mattermost-plugin-gitlab
Jiraantimatter-plugin-jirajira
МетрикиAntimatter-plugin-metricscom.mattermost.mattermost-plugin-metrics

Каждый выпуск приложения содержит его пакет (файл .tar.gz), его подпись (файл с тем же именем, но с добавлением .sig) и файл SHA256SUMS. Чтобы установить приложение, разрешите загрузку, а затем добавьте пакет с помощью amctl:

# 1. In /etc/antimatter/antimatter.env, add this line, then restart Antimatter
AM_PLUGINSETTINGS_ENABLEUPLOADS=true
sudo systemctl restart antimatter
# 2. Download the bundle where the antimatter user can read it, and install it
cd /tmp
curl -fLO https://github.com/AntimatterChat/antimatter-plugin-boards/releases/download/v<version>/<bundle>.tar.gz
sudo -u antimatter amctl --local plugin add <bundle>.tar.gz
sudo -u antimatter amctl --local plugin enable focalboard

Чтобы обновить приложение, установленное таким способом, добавьте новый пакет с помощью plugin add --force: обновление пакета обновляет только встроенные приложения. После этого вы можете снова удалить строку AM_PLUGINSETTINGS_ENABLEUPLOADS. О других способах установки приложений см. Установка других приложений.

Подписи приложений

Пакеты приложений подписаны ключом подписи приложений Antimatter: каждый файл .tar.gz.sig является отсоединённой GPG-подписью соответствующего пакета. Сервер проверяет эти подписи перед установкой встроенного приложения. Чтобы проверить пакет самостоятельно:

curl -fsSLO https://raw.githubusercontent.com/AntimatterChat/antimatter-docker/main/keys/antimatter-plugin-signing.asc
gpg --import antimatter-plugin-signing.asc
gpg --verify <bundle>.tar.gz.sig <bundle>.tar.gz

gpg должен сообщить о корректной подписи от Antimatter Plugin Signing с отпечатком 06C8 1032 4677 0F08 BBA7 78B9 E69B 05C3 92A6 9A45. Также будет предупреждение о том, что ключ не сертифицирован доверенной подписью: это нормально для ключа, который вы не подписали сами. Выпуск приложения без файлов .sig является неподписанным, и об этом говорится в его примечаниях к выпуску.

Установка из архива релиза

Архив antimatter-<version>-linux-<arch>.tar.gz (например, antimatter-0.9.0-linux-amd64.tar.gz) подходит для дистрибутивов без пакетов .deb или .rpm, а также для собственной конфигурации. Он содержит один каталог antimatter/ с файлами bin/antimatter, bin/amctl, config/config.json, веб-приложениями (client/ и client-fusion/), встроенными приложениями (prepackaged_plugins/, см. выше), шаблонами электронной почты и переводами.

1. Подготовка PostgreSQL

Antimatter поддерживает только PostgreSQL версии 15 и новее (более старые версии запускаются, но в журнале появляется ошибка). Создайте пользователя и базу данных:

sudo -u postgres psql <<'EOF'
CREATE USER antimatter WITH PASSWORD 'a-long-password';
CREATE DATABASE antimatter OWNER antimatter;
EOF

2. Распаковка и настройка

sudo tar -xzf antimatter-<version>-linux-amd64.tar.gz -C /opt
sudo useradd --system --user-group antimatter
sudo mkdir -p /opt/antimatter/data
sudo chown -R antimatter:antimatter /opt/antimatter

Укажите серверу базу данных, либо в /opt/antimatter/config/config.json (SqlSettings.DataSource), либо с помощью переменных окружения, и задайте URL сайта:

AM_SQLSETTINGS_DRIVERNAME=postgres
AM_SQLSETTINGS_DATASOURCE=postgres://antimatter:a-long-password@localhost:5432/antimatter?sslmode=disable&connect_timeout=10
AM_SERVICESETTINGS_SITEURL=https://chat.example.com

Файл config.json в архиве — это полная конфигурация по умолчанию: изменения, внесённые в Системной консоли, сохраняются обратно в этот файл. Чтобы хранить конфигурацию в базе данных, см. Конфигурация.

3. Запуск как службы

Единица systemd, файл /etc/systemd/system/antimatter.service:

[Unit]
Description=Antimatter
After=network.target postgresql.service

[Service]
Type=notify
User=antimatter
Group=antimatter
WorkingDirectory=/opt/antimatter
ExecStart=/opt/antimatter/bin/antimatter
EnvironmentFile=-/etc/antimatter.env
TimeoutStartSec=3600
Restart=always
RestartSec=10
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

Разместите переменные AM_ в файле /etc/antimatter.env (доступном только для root), затем выполните:

sudo systemctl daemon-reload
sudo systemctl enable --now antimatter
journalctl -u antimatter -f

Сервер слушает порт 8065. Откройте http://<server>:8065 или ваш домен, если настроен обратный прокси (см. Домен и HTTPS), и создайте первый аккаунт: он станет системным администратором.

Утилита bin/amctl управляет работающим сервером из командной строки. На самом сервере она работает без входа через локальный режим: установите AM_SERVICESETTINGS_ENABLELOCALMODE=true, затем выполните sudo -u antimatter /opt/antimatter/bin/amctl --local system status.

Для GIF установите службу GIF (см. ниже) и задайте AM_GIFS_SERVICE_URL и AM_GIFS_API_KEY, как в шаге 5 установки пакетов.

Пакеты службы GIF и прокси-сервера push-уведомлений

У службы GIF и прокси-сервера push-уведомлений есть собственные релизы, которые выпускаются по тем же правилам, что и сервер: архив .tar.gz, пакеты .deb и .rpm для amd64 и arm64, а также файл SHA256SUMS. Версии с дефисом являются предварительными. Проверьте загрузки с помощью команды sha256sum --check --ignore-missing SHA256SUMS, как это делается для сервера.

Служба GIF (gifs-server)

Релизы: github.com/AntimatterChat/gifs-server/releases. Архив называется gifs-server-<version>-linux-<arch>.tar.gz; пакеты имеют имя gifs-server.

sudo apt install ./gifs-server_*_amd64.deb      # Debian, Ubuntu
sudo dnf install ./gifs-server-*.x86_64.rpm     # Fedora, RHEL

Пакет устанавливает:

  • /usr/bin/gifs-server и службу gifs-server, которая выполняется от имени пользователя gifs-server и хранит свой каталог в /var/lib/gifs-server;
  • службу gifs-server-stickers, которая при запуске импортирует или обновляет набор стикеров в /usr/share/gifs-server/stickers, а затем останавливается;
  • файлы конфигурации: /etc/gifs-server/gifs-server.env (переменные AM_GIFS_, сохраняются при обновлении) и /etc/gifs-server/api-keys (по одному API-ключу на строке; при первой установке генерируется случайный ключ).

Служба слушает адрес 127.0.0.1:8080, поэтому к ней может обращаться только Antimatter, установленный на том же сервере. Если Antimatter работает на другом сервере, задайте AM_GIFS_LISTEN=:8080 в файле gifs-server.env и ограничьте доступ к порту с помощью файрвола. В файле перечислены остальные параметры: AM_GIFS_UPLOAD_KEYS (ключи, которым разрешено добавлять GIF и стикеры, а также удалять те, что были добавлены с их помощью), AM_GIFS_PUBLIC_URL, AM_GIFS_TRUST_PROXY и AM_GIFS_LOG_LEVEL. Пакет рекомендует установить ffmpeg, gifsicle, librsvg2-bin (librsvg2-tools для .rpm) и шрифт DejaVu: служба использует их для создания форматов GIF, видео и стикеров при импорте или получении файлов, но может работать и без них.

Как и в случае с сервером, служба активируется, но не запускается при установке. Запустите её, как показано в шаге 5 раздела «Пакеты». После обновления перезапустите службу: sudo systemctl restart gifs-server. При удалении пакета каталог в /var/lib/gifs-server сохраняется.

Прокси-сервер push-уведомлений

Выпуски: github.com/AntimatterChat/push-proxy/releases. Архив называется antimatter-push-proxy-<version>-linux-<arch>.tar.gz, пакеты — antimatter-push-proxy. Пакет устанавливает /usr/bin/antimatter-push-proxy и службу antimatter-push-proxy, которая выполняется от имени пользователя antimatter-push-proxy и читает файл /etc/antimatter-push-proxy/antimatter-push-proxy.json (сохраняется при обновлении). Удостоверения Apple и Firebase помещаются в /etc/antimatter-push-proxy/certs: о том, откуда они берутся, рассказано в разделе Push notifications.

sudo apt install ./antimatter-push-proxy_*_amd64.deb      # or: sudo dnf install ./antimatter-push-proxy-*.x86_64.rpm
sudo install -o root -g antimatter-push-proxy -m 0640 \
    AuthKey_ABCDE12345.p8 firebase-service-account.json /etc/antimatter-push-proxy/certs/
sudoedit /etc/antimatter-push-proxy/antimatter-push-proxy.json
sudo systemctl start antimatter-push-proxy
journalctl -u antimatter-push-proxy -f

В файле настроек пути указаны относительно /etc/antimatter-push-proxy: например, "AppleAuthKeyFile": "./certs/AuthKey_ABCDE12345.p8" и "ServiceFileLocation": "./certs/firebase-service-account.json". Затем установите значение Сервер push уведомлений в Antimatter: http://<proxy host>:8066. После обновления перезапустите службу: sudo systemctl restart antimatter-push-proxy.

Push-прокси слушает порт 8066 на всех адресах и не проверяет, кто к нему обращается. Держите порт в закрытой сети или за reverse proxy, который ограничивает доступ.

Другие команды сервера

Помимо запуска сервера (antimatter или antimatter server), бинарный файл содержит несколько служебных команд. Они читают ту же конфигурацию, что и сервер.

КомандаНазначение
antimatter versionВыводит версию, номер сборки, дату сборки и хэш сборки.
antimatter db pingПроверяет доступность базы данных.
antimatter db initСоздаёт конфигурацию в базе данных (при установленном AM_CONFIG с URL в формате postgres://).
antimatter db migrateПрименяет миграции базы данных без запуска сервера.
antimatter db versionВыводит последнюю применённую миграцию базы данных.
antimatter import bulk, antimatter export bulkИмпортирует или экспортирует данные в пакетном формате (см. Резервные копии и обновления).