Membina dari sumber

Laman ini menerangkan cara membina dan menjalankan Antimatter dari kod sumbernya, sama ada untuk bekerja dengannya atau untuk membuat binaan anda sendiri. Ia merangkumi pelayan dan antara muka web, yang berada dalam satu repositori, kemudian imej Docker dan aplikasi.

Apa yang anda perlukan

  • Go, pada versi dalam server/go.mod (1.26.7 pada masa penulisan).
  • Node.js dan npm, pada versi dalam .nvmrc dan webapp/package.json (Node 24.11.1 dengan npm 11.6.2). Dengan mise, fail mise.toml repositori memasang Node yang betul.
  • Docker dengan Compose: persediaan pembangunan menjalankan PostgreSQL dan beberapa perkhidmatan lain dalam kontena.
  • make, git, dan mesin Linux atau macOS.
  • Kekuatan: membina antara muka web adalah bahagian yang berat. Rancang untuk 16 GB RAM; lihat Binaan dan memori.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

Repositori menyimpan pelayan dalam server/, antara muka web dalam webapp/ (Fusion dalam webapp/fusion, klasik dalam webapp/channels, pakej bersama dalam webapp/platform), dan ujian hujung-ke-hujung dalam e2e-tests/.

Jalankan pelayan pembangunan

cd server
make run

make run memulakan kontena pembangunan (PostgreSQL, Redis, penangkap e-mel dan alat pemantauan), mengaitkan binaan aplikasi web ke tempatnya, memulakan pelayan di latar belakang dengan go run, dan memulakan pengamat aplikasi web, yang membina semula antara muka klasik semasa anda menyuntingnya. Buka http://localhost:8065 dan cipta akaun: akaun pertama menjadi pentadbir sistem.

Arahan (dalam server/)Fungsinya
make run-server, make run-clientMulakan hanya pelayan, atau hanya pengamat aplikasi web.
make restart-serverMula semula pelayan selepas mengubah kod Go.
make stopHentikan pelayan, pengamat dan kontena.
make debug-serverJalankan pelayan di bawah penyahpepijat Delve.
make run-cli ARGS="-version"Jalankan arahan pelayan.
make config-resetSet semula config/config.json ke lalai.
make clean, make nukeBuang fail binaan; nuke juga memadam data pembangunan.

Pangkalan data pembangunan ialah postgres://mmuser:mostest_password@localhost/mattermost_test, sumber data lalai pelayan. Pilih kontena yang bermula dengan ENABLED_DOCKER_SERVICES, dalam fail server/config.override.mk atau dalam persekitaran anda (lihat server/config.mk).

Antara muka web

Dalam webapp/:

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

Binaan akan diletakkan di webapp/channels/dist (klasik) dan webapp/fusion/dist (Fusion). make client di server/ akan memautkannya sebagai server/client dan server/client-fusion, di mana pelayan akan melayanannya: klasik di bawah /static/, dan Fusion di bawah /static/fusion/.

  • npm run run (atau make run di webapp/) akan memantau dan membina semula antara muka klasik. Tambahkan WATCH_FUSION=true untuk membina semula Fusion juga.
  • npm run dev-server (make dev) akan menjalankan pelayan pembangunan webpack sebaliknya: klasik pada port 9005, dan Fusion pada port 9006.
  • Untuk melihat antara muka klasik atau Fusion dalam pelayar web, tambahkan ?webui=fusion atau ?webui=classic ke alamat mana-mana halaman.

Ujian dan semakan

ArahanDi manaFungsinya
make test-serverserver/Sijil ujian pelayan, menentang bekas pembangunan. Ia mengambil masa yang lama.
make test-server-quickserver/Hanya ujian yang singkat.
go test ./channels/app/... -run TestNameserver/Satu pakej atau ujian, dengan bekas dalam keadaan berjalan (make start-docker).
make check-styleserver/go vet, golangci-lint dan semakan Go yang lain.
make testwebapp/Ujian unit aplikasi web (Jest), dalam setiap pakej.
npm run test -- <pattern>webapp/fusionSebahagian daripada ujian Fusion.
make check-style, make check-typeswebapp/ESLint dan TypeScript.
make i18n-extractserver/ dan webapp/Mengemas kini fail string bahasa Inggeris selepas anda menambah atau mengubah string (lihat Terjemahan).

Jalankan make modules-tidy bukannya go mod tidy di server/.

Arkib keluaran

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 membina antara muka web dan binari Linux serentak. Arkib mengandungi bin/antimatter, bin/amctl, config/config.json lalai dengan README.md tentang cara mengubah tetapan, kedua-dua antara muka web, templat, fon dan terjemahan. Platform lain: make package-osx, make package-windows, make package-freebsd.

Aplikasi terpalit

make package-linux biasa membina arkib tanpa aplikasi. Untuk membundelkannya, seperti yang dilakukan oleh keluaran yang diterbitkan, dapatkan bundel aplikasi bertandatangan dahulu dan lalukan foldernya:

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 memuat turun keluaran GitHub terkini bagi setiap aplikasi yang disenaraikan dalam plugins.json antimatter-docker, beserta tandatangan, dan menyemak tandatangan tersebut terhadap kunci plugin Antimatter. Secara lalai, ia mengambil Whiteboard, Saluran Suara, Panggilan, Ejen, Senarai tugasan, Undian, Nota, GIF dan Memes; AM_BUNDLED_APPS (nama repositori, dipisahkan dengan ruang) mengubah senarai ini. Aplikasi tanpa keluaran, atau tanpa tandatangan, akan dilepaskan dengan amaran. Bundel diletakkan dalam prepackaged_plugins/ arkib.

Pakej .deb dan .rpm

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> menukar arkib keluaran kepada pakej .deb dan .rpm semua-dalam-satu, menggunakan nfpm. Panduan pentadbir menerangkan apa yang dipasang: lihat Pasang pakej .deb atau .rpm.

Aliran kerja keluaran

Aliran kerja antimatter-release.yml dalam repositori pelayan melakukan semua ini di GitHub: pada tag v*, ia membina arkib dan pakej untuk amd64 dan arm64, dengan SHA256SUMS, dan menerbitkannya sebagai keluaran GitHub bagi tag tersebut (keluaran prapenerbitan untuk versi dengan -). Jika dijalankan secara manual, ia menombolkan pembinaan sebagai 0.9.0-dev.<run> dan menyimpan fail sebagai artifak aliran kerja. Setiap repositori aplikasi mempunyai aliran kerja release.yml yang menerbitkan bundel bertandatangannya dengan cara yang sama.

Imej Docker

Repositori antimatter-docker membina imej yang diterbitkan, iaitu pelayan beserta aplikasinya, sepenuhnya di dalam 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

Anda memerlukan Docker dengan buildx, Python 3, git dan gpg, kira-kira 16 GB RAM dan 30 GB ruang cakera. Hasilnya dimuat sebagai ghcr.io/antimatterchat/antimatter:dev; cuba jalankan dengan ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. Fail plugins.json menyenaraikan aplikasi dan versi yang dibina, manakala README repositori menerangkan pelbagai variasi.

build-all.sh menandatangani aplikasi terikat dengan kunci penandatanganan Antimatter, dan pembinaan imej akan menolak aplikasi yang tidak ditandatangani. Tanpa kunci peribadi tersebut, yang hanya dimiliki oleh penyelenggara, jalankan langkah-langkah awal sahaja: scripts/fetch-sources.sh, scripts/build-plugins.sh (bundle aplikasi dalam out/plugins/) dan scripts/build-server.sh (arkib pelayan dalam out/server/).

Pembinaan dan memori

Antara muka web adalah pembinaan webpack yang besar, dan kehabisan memori adalah kegagalan pembinaan yang paling kerap berlaku.

  • npm run build membina antara muka klasik dan Fusion secara berurutan, bukan serentak, untuk mengekalkan puncak penggunaan yang lebih rendah. Jangan jalankan kedua-duanya secara selari.
  • Penyusut (minifier) memulakan satu pekerja untuk setiap pemproses. Pada mesin dengan banyak teras tetapi memori terhad, hadkan bilangan pemproses yang dilihat oleh pembinaan: taskset -c 0-5 npm run build.
  • Jika Node kehabisan ruang timbunan (heap), naikkan hadnya: NODE_OPTIONS=--max-old-space-size=6144. Pembinaan Docker menggunakan nilai ini (BUILD_NODE_OPTIONS dalam build.env).
  • Elakkan menjalankan suite ujian penuh pelayan, pembinaan web dan pembinaan Docker secara serentak pada mesin kecil.

Aplikasi

Setiap aplikasi (plugin) mempunyai repositori dan Makefile sendiri; make dist membina bundle-nya. Lihat Bina, pasang dan nyahpepijat.

Aplikasi desktop

Aplikasi desktop ialah aplikasi Electron. Dengan Node.js 24 atau lebih baru:

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)

Tetapan masa bina, seperti pelayan yang perlu dikonfigurasikan awal, terdapat dalam src/common/config/buildConfig.ts. Tanpa sijil Apple, tetapkan AM_MAC_ADHOC_SIGN=true untuk menandatangani aplikasi macOS secara ad hoc, tanpa notarisation: Mac berasalan Apple menolak kod yang tidak ditandatangani. Aliran kerja release.yml dalam repositori membina pakej tanpa tanda tangan untuk Linux, Windows dan macOS pada tag v*.

Aplikasi mudah alih

Aplikasi mudah alih ialah aplikasi React Native; README senaraikan arahan (npm run ios, npm run android). Untuk membina salinan anda sendiri, anda juga perlu kunci penandatanganan anda sendiri, projek Firebase untuk pemberitahuan Android, kunci APNs untuk iOS, dan proksi tolakan yang memegang kelayakan tersebut. Aliran kerja release.yml dalam repositori membina APK dan AAB Android serta .ipa iOS tanpa tanda tangan pada tag v*, tanpa akaun kedai; README senaraikan rahsia yang menandatangani binaan Android dan menetapkan Firebase.