Сборка из исходного кода

На этой странице описано, как собрать и запустить Antimatter из исходного кода, чтобы работать над ним или создавать собственные сборки. Рассматриваются сервер и веб-интерфейсы, которые находятся в одном репозитории, а также образ Docker и приложения.

Что понадобится

  • Перейти к версии в server/go.mod (1.26.7 на момент написания).
  • Node.js и npm версий, указанных в .nvmrc и webapp/package.json (Node 24.11.1 и npm 11.6.2). С помощью mise файл mise.toml в репозитории устанавливает нужную версию Node.
  • Docker с Compose: для среды разработки PostgreSQL и несколько других сервисов запускаются в контейнерах.
  • make, git и компьютер с Linux или macOS.
  • Оперативная память: сборка веб-интерфейсов — самая ресурсоёмкая часть процесса. Рекомендуется 16 ГБ ОЗУ; см. Сборка и память.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

В репозитории сервер находится в server/, веб-интерфейсы — в webapp/ (Fusion — в webapp/fusion, классический — в webapp/channels, общие пакеты — в webapp/platform), а сквозные тесты — в e2e-tests/.

Запуск сервера разработки

cd server
make run

make run запускает контейнеры для разработки (PostgreSQL, Redis, перехватчик почты и инструменты мониторинга), размещает сборки веб-приложения, запускает сервер в фоновом режиме с помощью go run и запускает наблюдатель веб-приложения, который пересобирает классический интерфейс при каждом изменении. Откройте http://localhost:8065 и создайте учётную запись: первая созданная становится системным администратором.

Команда (в server/)Назначение
make run-server, make run-clientЗапуск только сервера или только наблюдателя веб-приложения.
make restart-serverПерезапуск сервера после изменения кода на Go.
make stopОстановка сервера, наблюдателя и контейнеров.
make debug-serverЗапуск сервера в отладчике Delve.
make run-cli ARGS="-version"Выполнение команды сервера.
make config-resetСброс config/config.json к значениям по умолчанию.
make clean, make nukeУдаление файлов сборки; nuke также удаляет данные для разработки.

База данных для разработки: postgres://mmuser:mostest_password@localhost/mattermost_test (источник данных по умолчанию для сервера). Выбор контейнеров, которые будут запущены, осуществляется с помощью ENABLED_DOCKER_SERVICES в файле server/config.override.mk или в переменных окружения (см. server/config.mk).

Веб-интерфейсы

В webapp/:

npm install      # also builds the shared packages
npm run build    # the classic interface, then Fusion

Собранные файлы попадают в webapp/channels/dist (классический интерфейс) и webapp/fusion/dist (Fusion). Команда make client в каталоге server/ связывает их как server/client и server/client-fusion, откуда сервер их раздаёт: классический интерфейс по адресу /static/, Fusion — по адресу /static/fusion/.

  • npm run run (или make run в каталоге webapp/) отслеживает изменения и пересобирает классический интерфейс. Добавьте WATCH_FUSION=true, чтобы пересобирать также Fusion.
  • npm run dev-server (make dev) запускает сервер разработки webpack: классический интерфейс на порту 9005, Fusion — на порту 9006.
  • Чтобы открыть в браузере один из интерфейсов, добавьте ?webui=fusion или ?webui=classic к адресу любой страницы.

Тесты и проверки

КомандаГдеНазначение
make test-serverserver/Набор тестов сервера, выполняемый в контейнерах разработки. Это занимает много времени.
make test-server-quickserver/Только короткие тесты.
go test ./channels/app/... -run TestNameserver/Один пакет или тест, при запущенных контейнерах (make start-docker).
make check-styleserver/go vet, golangci-lint и другие проверки Go.
make testwebapp/Юнит-тесты веб-приложения (Jest) для всех пакетов.
npm run test -- <pattern>webapp/fusionНекоторые тесты Fusion.
make check-style, make check-typeswebapp/ESLint и TypeScript.
make i18n-extractserver/ и webapp/Обновляет файлы английских строк после добавления или изменения строк (см. Переводы).

В каталоге server/ используйте make modules-tidy вместо go mod tidy.

Архивы релизов

cd webapp && npm run build && cd ..
cd server
make build-linux       # the antimatter and amctl binaries
make package-linux     # dist/antimatter-linux-amd64.tar.gz and -arm64

Команда make build собирает веб-интерфейсы и бинарные файлы для Linux за один заход. Архив содержит bin/antimatter, bin/amctl, файл config/config.json с настройками по умолчанию, README.md с описанием изменения настроек, оба веб-интерфейса, шаблоны, шрифты и переводы. Для других платформ: make package-osx, make package-windows, make package-freebsd.

Встроенные приложения

Обычная команда make package-linux собирает архив без приложений. Чтобы включить их, как в официальных релизах, сначала загрузите подписанные пакеты приложений и укажите их папку:

build/package/fetch-apps.sh "$HOME/release-apps"   # needs gh, python3 and gpg
make package-linux PREPACKAGED_PLUGINS_DIR="$HOME/release-apps"

Скрипт fetch-apps.sh загружает последний релиз каждого приложения, перечисленного в файле plugins.json репозитория antimatter-docker, вместе с подписью, и проверяет её по ключу плагина Antimatter. По умолчанию загружаются Whiteboard, Voice channels, Calls, Agents, Todo, Polls, Notes, GIFs и Memes; переменная AM_BUNDLED_APPS (имена репозиториев, разделённые пробелами) позволяет изменить этот список. Приложения без релиза или без подписи пропускаются с предупреждением. Пакеты приложений помещаются в папку prepackaged_plugins/ архива.

Пакеты .deb и .rpm

Скрипт build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> превращает архив релиза в универсальные пакеты .deb и .rpm с помощью nfpm. В руководстве администратора описано, что устанавливается этими пакетами: см. Установка пакета .deb или .rpm.

Процесс выпуска релиза

Workflow antimatter-release.yml в репозитории сервера выполняет все эти действия на GitHub: при теге v* он собирает архивы и пакеты для amd64 и arm64, создаёт файл SHA256SUMS и публикует их как GitHub-релиз для данного тега (предварительный релиз, если в версии есть символ -). При ручном запуске workflow присваивает сборке номер 0.9.0-dev.<run> и сохраняет файлы как артефакты workflow. В каждом репозитории приложений есть workflow release.yml, который публикует подписанный пакет приложения аналогичным образом.

Docker-образ

Репозиторий antimatter-docker собирает публикуемые образы, сервер с его приложениями, полностью внутри Docker:

git clone https://github.com/AntimatterChat/antimatter-docker.git
cd antimatter-docker
scripts/build-all.sh                     # from the main branches on GitHub
SOURCES=local scripts/build-all.sh       # from your checkouts next to this folder
VARIANT=next scripts/build-all.sh        # the "next" image, with every Antimatter app

Для этого требуется Docker с buildx, Python 3, git и gpg, около 16 ГБ ОЗУ и 30 ГБ на диске. Результат загружается как ghcr.io/antimatterchat/antimatter:dev; попробуйте его с помощью ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. Файл plugins.json содержит список приложений и собранных версий, а README репозитория описывает варианты.

Скрипт build-all.sh подписывает встроенные приложения ключом подписи Antimatter, а сборка образа отклоняет неподписанные приложения. Если у вас нет этого закрытого ключа, которым располагают только сопровождающие, выполните первые шаги по отдельности: scripts/fetch-sources.sh, scripts/build-plugins.sh (пакеты приложений в out/plugins/) и scripts/build-server.sh (архивы сервера в out/server/).

Сборка и память

Веб-интерфейсы представляют собой крупные сборки webpack, и нехватка памяти — самая частая причина сбоя сборки.

  • Команда npm run build собирает классический интерфейс и Fusion последовательно, а не одновременно, чтобы снизить пиковое потребление. Не запускайте их параллельно самостоятельно.
  • Минификатор запускает по одному рабочему процессу на каждое ядро. На машине с большим числом ядер и небольшим объёмом памяти ограничьте число процессоров, доступных для сборки: taskset -c 0-5 npm run build.
  • Если у Node.js заканчивается куча, увеличьте её лимит: NODE_OPTIONS=--max-old-space-size=6144. Сборка в Docker использует это значение (BUILD_NODE_OPTIONS в build.env).
  • Избегайте одновременного запуска полного набора тестов сервера, сборки веб-интерфейса и сборки Docker на машине с ограниченными ресурсами.

Приложения

У каждого приложения (плагина) есть собственный репозиторий и Makefile; команда make dist собирает его пакет. См. Сборка, установка и отладка.

Десктопное приложение

Десктопное приложение — это приложение на Electron. При использовании Node.js 24 или новее:

npm install --allow-git=all
npm run build          # development build, into dist/
npm start              # run it
npm run package:linux  # packages into release/ (also package:windows, package:mac)

Настройки времени сборки, такие как серверы для предварительной настройки, находятся в src/common/config/buildConfig.ts. Если нет сертификата Apple, установите AM_MAC_ADHOC_SIGN=true, чтобы подписать приложение для macOS ad hoc, без нотариализации: Mac на чипе Apple отклоняют неподписанный код. Workflow release.yml в репозитории собирает неподписанные пакеты для Linux, Windows и macOS при теге v*.

Мобильное приложение

Мобильное приложение — это приложение на React Native; в его README перечислены команды (npm run ios, npm run android). Для сборки собственной копии также потребуются собственные ключи подписи, проект Firebase для уведомлений на Android, ключ APNs для iOS и push proxy, хранящий эти учетные данные. Workflow release.yml в репозитории собирает APK и AAB для Android и неподписанный iOS .ipa при теге v*, без учетных записей магазинов; в его README перечислены секреты, необходимые для подписи сборки Android и настройки Firebase.