Збирання з початкового коду
На цій сторінці описано, як зібрати та запустити Antimatter з початкового коду — для роботи над ним або для створення власних збірок. Сторінка охоплює сервер і вебінтерфейси, які зберігаються в одному репозиторії, а також образ Docker і застосунки.
Що потрібно
- Go версії, зазначеної у
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 ГБ RAM; див. Збірки та пам’ять.
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/ | Оновлює файли англійських рядків після додавання або зміни рядків (див. Переклади). |
Виконуйте make modules-tidy замість go mod tidy у server/.
Архіви релізів
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 завантажує останній випуск GitHub для кожного застосунка зі списку в 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.
Процес випуску
Процес antimatter-release.yml у репозиторії сервера виконує все це на GitHub: за тегом v* він збирає архіви та пакети для amd64 і arm64, з SHA256SUMS, і публікує їх як випуск GitHub для цього тега (превипуск для версії з -). Якщо запустити вручну, він нумерує збірку як 0.9.0-dev.<run> і зберігає файли як артефакти процесу. Кожен репозиторій застосунка має процес 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 ГБ RAM та 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 вичерпує обсяг пам’яті, збільште його ліміт:
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 відмовляються запускати непідписаний код. Робочий процес release.yml у репозиторії збирає непідписані пакети для Linux, Windows та macOS за тегом v*.
Мобільний додаток
Мобільний застосунок — це застосунок на React Native; у його файлі README наведено команди (npm run ios, npm run android). Для збірки власної копії також потрібні власні ключі підпису, проєкт Firebase для сповіщень на Android, ключ APNs для iOS та проксі-сервер для push-сповіщень, що зберігає ці облікові дані. Робочий процес release.yml у репозиторії збирає Android APK та AAB, а також непідписаний iOS .ipa за тегом v*, без акаунтів магазинів; у його файлі README наведено секрети для підпису збірки Android та налаштування Firebase.