सोर्स से बिल्ड करना
यह पेज बताता है कि Antimatter को उसके सोर्स कोड से कैसे बिल्ड और चलाया जाए, चाहे आप उस पर काम कर रहे हों या अपनी खुद की बिल्ड्स बना रहे हों। यह सर्वर और वेब इंटरफेसों को कवर करता है, जो एक ही रिपॉज़िटरी में मौजूद हैं, और फिर Docker इमेज और ऐप्स को।
आपको क्या चाहिए
- जाना,
server/go.modमें वर्जन (लेखन के समय 1.26.7)। - Node.js और npm,
.nvmrcऔरwebapp/package.jsonमें उल्लिखित संस्करण (Node 24.11.1 with npm 11.6.2)। mise के साथ, रिपॉज़िटरी काmise.tomlसही Node इंस्टॉल करता है। - Docker with Compose: डेवलपमेंट सेटअप PostgreSQL और कुछ अन्य सेवाओं को कंटेनरों में चलाता है।
- make, git, और एक Linux या macOS मशीन।
- मेमोरी: वेब इंटरफेसों को बिल्ड करना भारी हिस्सा है। 16 GB RAM की योजना बनाएं; देखें बिल्ड्स और मेमोरी।
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter
रिपॉज़िटरी सर्वर को server/ में, वेब इंटरफेसों को webapp/ में (Fusion in webapp/fusion, classic in webapp/channels, shared packages in webapp/platform), और एंड-टू-एंड टेस्ट्स को e2e-tests/ में रखती है।
एक डेवलपमेंट सर्वर चलाएं
cd server
make run
make run डेवलपमेंट कंटेनर (PostgreSQL, Redis, a mail catcher and monitoring tools) शुरू करता है, वेब ऐप बिल्ड्स को जगह पर जोड़ता है, सर्वर को बैकग्राउंड में go run के साथ शुरू करता है, और वेब ऐप के वॉचर को शुरू करता है, जो आपके संपादन के साथ क्लासिक इंटरफेस को पुनर्बिल्ड करता है। http://localhost:8065 खोलें और एक खाता बनाएं: पहला खाता सिस्टम एडमिन बन जाता है।
कमांड (in 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) में बनते हैं। server/ में make client इन्हें server/client और server/client-fusion के रूप में लिंक करता है, जहाँ सर्वर इन्हें सर्व करता है: क्लासिक /static/ के तहत, और Fusion /static/fusion/ के तहत।
npm run run(याwebapp/मेंmake run) क्लासिक इंटरफेस को वॉच करता है और पुनर्निर्माण (rebuild) करता है। Fusion को भी पुनर्निर्माण करने के लिएWATCH_FUSION=trueजोड़ें।npm run dev-server(make dev) के बजाय webpack के डेवलपमेंट सर्वर को चलाता है: क्लासिक पोर्ट 9005 पर, और Fusion पोर्ट 9006 पर।- ब्राउज़र में एक इंटरफेस या दूसरा देखने के लिए, किसी भी पेज के पता (address) में
?webui=fusionया?webui=classicजोड़ें।
टेस्ट और जाँचें
| Command | कहाँ | यह क्या करता है |
|---|---|---|
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/ | जब आप स्ट्रिंग्स जोड़ते या बदलते हैं, तब अंग्रेज़ी स्ट्रिंग फाइलों को अपडेट करता है (देखें अनुवाद)। |
server/ में go mod tidy के बजाय make modules-tidy चलाएँ।
रिलीज़ आर्काइव
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, सेटिंग्स बदलने के लिए README.md के साथ डिफ़ॉल्ट config/config.json, दोनों वेब इंटरफेस, टेम्पलेट, फ़ॉन्ट और अनुवाद शामिल हैं। अन्य प्लेटफ़ॉर्म: 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 antimatter-docker के plugins.json में सूचीबद्ध प्रत्येक ऐप की नवीनतम GitHub रिलीज़, उसके हस्ताक्षर के साथ, डाउनलोड करता है, और 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> nfpm के साथ एक रिलीज़ आर्काइव को ऑल-इन-वन .deb और .rpm पैकेज में बदलता है। एडमिन गाइड बताता है कि वे क्या इंस्टॉल करते हैं: देखें .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 विभिन्न भेदों (variants) की व्याख्या करता है।
build-all.sh Antimatter signing key से bundled apps को sign करता है, और image build unsigned apps को अस्वीकार कर देता है। यदि आपके पास वह private key नहीं है, जो केवल maintainers के पास है, तो केवल प्रारंभिक चरणों को अलग-अलग चलाएँ: scripts/fetch-sources.sh, scripts/build-plugins.sh (out/plugins/ में app bundles) और scripts/build-server.sh (out/server/ में server archives)।Builds और memory
वेब इंटरफेस बड़े webpack builds हैं, और memory की कमी सबसे आम build failure है।
npm run buildclassic interface और Fusion को एक के बाद एक build करता है, साथ में नहीं, ताकि peak memory कम रहे। इन्हें स्वयं parallel में न चलाएँ।- Minifier प्रत्येक processor के लिए एक worker शुरू करता है। यदि मशीन में बहुत सारे cores हैं लेकिन memory कम है, तो build के लिए उपलब्ध processors की संख्या सीमित करें:
taskset -c 0-5 npm run build। - यदि Node के heap की memory खत्म हो जाती है, तो उसकी सीमा बढ़ाएँ:
NODE_OPTIONS=--max-old-space-size=6144। Docker build इसी मान का उपयोग करता है (build.envमेंBUILD_NODE_OPTIONS)। - छोटी मशीन पर server का पूरा test suite, web build और Docker build एक साथ न चलाएँ।
Apps
प्रत्येक app (plugin) का अपना अलग repository और Makefile है; make dist इसका bundle build करता है। Build, install और debug देखें।
Desktop app
desktop app एक Electron app है। 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 सर्टिफिकेट उपलब्ध नहीं है, तो macOS ऐप को नोटरीज़ेशन के बिना अड होक साइन करने के लिए AM_MAC_ADHOC_SIGN=true सेट करें: Apple सिलिकॉन Macs असाइन्ड कोड को अस्वीकार कर देते हैं। रिपॉज़िटरी का release.yml वर्कफ़्लो v* टैग पर Linux, Windows और macOS के लिए असाइन्ड पैकेज बनाता है।
Mobile app
मोबाइल ऐप एक React Native ऐप है; इसके README में कमांड (npm run ios, npm run android) सूचीबद्ध हैं। अपनी खुद की कॉपी बनाने के लिए आपको अपनी साइनिंग कीज़, Android सूचनओं के लिए Firebase प्रोजेक्ट, iOS के लिए APNs की, और उन क्रेडेंशियल्स को रखने वाला पुश प्रॉक्सी भी चाहिए। रिपॉज़िटरी का release.yml वर्कफ़्लो v* टैग पर Android APK और AAB, साथ ही असाइन्ड iOS .ipa बनाता है, स्टोर अकाउंट्स के बिना; इसके README में Android बिल्ड को साइन करने और Firebase सेटअप करने वाले सीक्रेट्स सूचीबद्ध हैं।