Създаване от изходния код

Тази страница обяснява как да създадете и стартирате 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 GB 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-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/Обновява файловете с английски текстове след добавяне или промяна на текстове (вижте Преводи).

Изпълнете 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 release-ите, изброени в plugins.json на antimatter-docker, заедно с неговия подпис, и проверява подписа срещу ключа за плъгини на Antimatter. По подразбиране се изтеглят Whiteboard, Гласови канали, Обаждания, AI чат (Агенти), Задачи, Анкети, Бележки, GIF-ове и Memes; променливата AM_BUNDLED_APPS (имена на хранилища, разделени с интервали) променя списъка. Приложенията без release или без подпис се пропускат с предупреждение. Пакетите се поставят в 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 GB RAM и 30 GB дисково пространство. Резултатът се зарежда като 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 чип отхвърлят неподписан код. 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 в репозиторията създава Android APK и AAB, както и неподписан iOS .ipa при таг v*, без сметки в магазините; в README-то са изброени тайните, които подписват Android изграждането и настройват Firebase.