Сборка из исходного кода
На этой странице описано, как собрать и запустить 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-server | server/ | Набор тестов сервера, выполняемый в контейнерах разработки. Это занимает много времени. |
make test-server-quick | server/ | Только короткие тесты. |
go test ./channels/app/... -run TestName | server/ | Один пакет или тест, при запущенных контейнерах (make start-docker). |
make check-style | server/ | go vet, golangci-lint и другие проверки Go. |
make test | webapp/ | Юнит-тесты веб-приложения (Jest) для всех пакетов. |
npm run test -- <pattern> | webapp/fusion | Некоторые тесты Fusion. |
make check-style, make check-types | webapp/ | ESLint и TypeScript. |
make i18n-extract | server/ и 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.