Създаване от изходния код
Тази страница обяснява как да създадете и стартирате 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-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 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.