Kaynaktan derleme

Bu sayfa, Antimatter'ı kaynak kodundan nasıl derleyip çalıştıracağınızı, üzerinde çalışmak veya kendi derlemelerinizi oluşturmak için açıklar. Tek bir depoda barınan sunucu ve web arayüzlerini, ardından Docker imajını ve uygulamaları kapsar.

Gerekli olanlar

  • Go, server/go.mod içindeki sürüm (yazım sırasında 1.26.7).
  • Node.js ve npm, .nvmrc ve webapp/package.json içindeki sürümler (npm 11.6.2 ile Node 24.11.1). mise ile, depodaki mise.toml doğru Node sürümünü yükler.
  • Docker ve Compose: geliştirme ortamı, PostgreSQL ve birkaç diğer hizmeti konteynerlerde çalıştırır.
  • make, git ve bir Linux veya macOS makinesi.
  • Bellek: web arayüzlerini derlemek en ağır kısımdır. 16 GB RAM planlayın; bkz. Derlemeler ve bellek.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

Depo, sunucuyu server/ içinde, web arayüzlerini webapp/ içinde (Fusion webapp/fusion içinde, klasik webapp/channels içinde, ortak paketler webapp/platform içinde) ve uçtan uca testleri e2e-tests/ içinde barındırır.

Geliştirme sunucusu çalıştırma

cd server
make run

make run, geliştirme konteynerlerini (PostgreSQL, Redis, bir e-posta yakalayıcı ve izleme araçları) başlatır, web uygulaması derlemelerini yerine bağlar, sunucuyu arka planda go run ile başlatır ve web uygulamasının izleyicisini (watcher) başlatır; bu izleyici, düzenledikçe klasik arayüzü yeniden derler. http://localhost:8065 adresini açın ve bir hesap oluşturun: ilk hesap sistem yöneticisi olur.

Komut (server/ içinde)Ne işe yarar
make run-server, make run-clientYalnızca sunucuyu veya yalnızca web uygulaması izleyicisini başlatın.
make restart-serverGo kodunu değiştirdikten sonra sunucuyu yeniden başlatın.
make stopSunucuyu, izleyiciyi ve konteynerleri durdurun.
make debug-serverSunucuyu Delve hata ayıklayıcısı altında çalıştırın.
make run-cli ARGS="-version"Bir sunucu komutu çalıştırın.
make config-resetconfig/config.json dosyasını varsayılanlara sıfırlayın.
make clean, make nukeDerleme dosyalarını silin; nuke ayrıca geliştirme verilerini de siler.

Geliştirme veritabanı postgres://mmuser:mostest_password@localhost/mattermost_test olup sunucunun varsayılan veri kaynağıdır. Hangi konteynerlerin başlayacağını ENABLED_DOCKER_SERVICES ile seçin; bunu bir server/config.override.mk dosyasında veya ortamınızda yapın (bkz. server/config.mk).

Web arayüzleri

webapp/ içinde:

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

Derlemeler webapp/channels/dist (klasik) ve webapp/fusion/dist (Fusion) dizinlerine yerleştirilir. server/ dizininde çalıştırılan make client komutu, bu dosyaları sırasıyla server/client ve server/client-fusion olarak bağlar; sunucu da bunları klasik arayüz için /static/, Fusion için /static/fusion/ altında sunar.

  • npm run run (veya webapp/ dizininde make run) klasik arayüzü izleyerek yeniden derler. Fusion'ı da yeniden derlemek için WATCH_FUSION=true ekleyin.
  • npm run dev-server (make dev) bunun yerine webpack'in geliştirme sunucusunu çalıştırır: klasik arayüz 9005, Fusion 9006 portunda.
  • Tarayıcıda bir arayüzü diğerinden ayrı görmek için herhangi bir sayfanın adresine ?webui=fusion veya ?webui=classic ekleyin.

Testler ve denetimler

KomutNeredeNe işe yarar
make test-serverserver/Geliştirme konteynerlerine karşı sunucu test paketi. Uzun sürer.
make test-server-quickserver/Yalnızca kısa testler.
go test ./channels/app/... -run TestNameserver/Konteynerler çalışırken (make start-docker) tek bir paket veya test.
make check-styleserver/go vet, golangci-lint ve diğer Go denetimleri.
make testwebapp/Her pakette web uygulamasının birim testleri (Jest).
npm run test -- <pattern>webapp/fusionFusion'ın bazı testleri.
make check-style, make check-typeswebapp/ESLint ve TypeScript.
make i18n-extractserver/ ve webapp/Dizeler eklediğinizde veya değiştirdiğinizde İngilizce dize dosyalarını günceller (bkz. Çeviriler).

server/ dizininde go mod tidy yerine make modules-tidy çalıştırın.

Sürüm arşivleri

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 komutu, web arayüzlerini ve Linux ikili dosyalarını tek seferde derler. Arşiv, bin/antimatter, bin/amctl, ayarları değiştirme konusunda bir README.md içeren varsayılan config/config.json, her iki web arayüzü, şablonlar, yazı tipleri ve çevirileri barındırır. Diğer platformlar: make package-osx, make package-windows, make package-freebsd.

Paketlenmiş uygulamalar

Sadece make package-linux komutu, uygulamalar olmadan bir arşiv oluşturur. Yayınlanan sürümlerde yapıldığı gibi uygulamaları paketlemek için, önce imzalı uygulama paketlerini indirin ve klasörlerini iletin:

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, antimatter-docker'ın plugins.json dosyasında listelenen her uygulamanın en son GitHub sürümünü, imzasıyla birlikte indirir ve imzayı Antimatter'ın eklenti anahtarıyla karşılaştırır. Varsayılan olarak Whiteboard, Voice channels, Calls, Agents, Todo, Polls, Notes, GIFs ve Memes'ı alır; AM_BUNDLED_APPS (boşluklarla ayrılmış depo adları) bu listeyi değiştirir. Sürümü veya imzası olmayan uygulamalar, bir uyarıyla atlanır. Paketler, arşivin prepackaged_plugins/ klasörüne yerleştirilir.

.deb ve .rpm paketleri

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> komutu, nfpm aracılığıyla bir sürüm arşivini, her şeyi içeren .deb ve .rpm paketlerine dönüştürür. Yönetici kılavuzu, bu paketlerin neleri yüklediğini açıklar: bkz. .deb veya .rpm paketini yükleyin.

Sürüm iş akışı

Sunucu deposunun antimatter-release.yml iş akışı, tüm bunları GitHub üzerinde yapar: v* etiketiyle amd64 ve arm64 için arşivleri ve paketleri, SHA256SUMS ile birlikte oluşturur ve bunları etiketin GitHub sürümü olarak yayınlar (- içeren bir sürüm için ön sürüm). Manuel olarak çalıştırıldığında, derlemeyi 0.9.0-dev.<run> olarak numaralandırır ve dosyaları iş akışı artefaktları olarak saklar. Her uygulama deposu, imzalı paketini aynı şekilde yayınlayan bir release.yml iş akışına sahiptir.

Docker imajı

antimatter-docker deposu, sunucuyu ve uygulamalarını tamamen Docker içinde derleyerek yayımlanan imajları oluşturur:

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 ile), Python 3, git ve gpg gerektirir; yaklaşık 16 GB RAM ve 30 GB disk alanı gerekir. Sonuç, ghcr.io/antimatterchat/antimatter:dev olarak yüklenir; ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d komutuyla deneyebilirsiniz. plugins.json dosyası derlenen uygulamaları ve sürümlerini listeler, depoyun README dosyası ise varyantları açıklar.

build-all.sh, paketlenmiş uygulamaları Antimatter imzalama anahtarıyla imzalar ve görüntü derlemesi imzasız uygulamaları reddeder. Yalnızca bakımcıların sahip olduğu bu özel anahtar olmadan yalnızca ilk adımları çalıştırın: scripts/fetch-sources.sh, scripts/build-plugins.sh (uygulama paketleri out/plugins/ içinde) ve scripts/build-server.sh (sunucu arşivleri out/server/ içinde).

Derleme ve bellek

Web arayüzleri büyük webpack derlemeleridir ve bellek yetersizliği en yaygın derleme hatasıdır.

  • npm run build, tepe bellek kullanımını düşük tutmak için klasik arayüzü ve Fusion'u sırayla, birlikte değil derler. Bunları kendiniz paralel olarak çalıştırmayın.
  • Sıkıştırıcı, işlemci başına bir işçi başlatır. Çekirdeği çok ama belleği az olan bir makinede, derlemenin gördüğü işlemci sayısını sınırlayın: taskset -c 0-5 npm run build.
  • Node yığın (heap) belleği dolarsa, sınırını artırın: NODE_OPTIONS=--max-old-space-size=6144. Docker derlemesi bu değeri kullanır (build.env içindeki BUILD_NODE_OPTIONS).
  • Küçük bir makinede sunucunun tam test paketi, bir web derlemesi ve bir Docker derlemesini aynı anda çalıştırmaktan kaçının.

Uygulamalar

Her uygulamanın (eklentinin) kendi deposu ve Makefile'ı vardır; make dist paketini derler. Derleme, kurulum ve hata ayıklama bölümüne bakın.

Masaüstü uygulaması

Masaüstü uygulaması bir Electron uygulamasıdır. Node.js 24 veya üstü ile:

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)

Sunucuları önceden yapılandırmak gibi derleme zamanı ayarları src/common/config/buildConfig.ts dosyasında bulunur. Apple sertifikası yoksa, macOS uygulamasını onaylama (notarisation) işlemi olmadan ad hoc olarak imzalamak için AM_MAC_ADHOC_SIGN=true değerini ayarlayın: Apple silikonlu Mac'ler imzasız kodu reddeder. Deponun release.yml iş akışı, v* etiketiyle Linux, Windows ve macOS için imzasız paketleri oluşturur.

Mobil uygulama

Mobil uygulama bir React Native uygulamasıdır; README'si komutları (npm run ios, npm run android) listeler. Kendi kopyanızı oluşturmak için ayrıca kendi imzalama anahtarlarınıza, Android bildirimleri için bir Firebase projesine, iOS için bir APNs anahtarına ve bu kimlik bilgilerini barındıran bir push proxy'ye de ihtiyacınız vardır. Deponun release.yml iş akışı, mağaza hesapları olmadan v* etiketiyle Android APK ve AAB dosyalarını ile imzasız iOS .ipa dosyasını oluşturur; README'si Android derlemesini imzalayan ve Firebase'i yapılandıran gizli bilgileri listeler.