Δημιουργία από πηγή
Σε αυτήν τη σελίδα εξηγείται πώς να δημιουργήσετε και να εκτελέσετε το 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 και μερικές άλλες υπηρεσίες σε containers.
- 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 ξεκινά τα containers ανάπτυξης (PostgreSQL, Redis, έναν παγιδευτή αλληλογραφίας και εργαλεία παρακολούθησης), συνδέει τις δημιουργίες της διαδικτυακής εφαρμογής στη σωστή θέση, ξεκινά τον διακομιστή σε segundo plano με go run, και ξεκινά τον παρατηρητή (watcher) της διαδικτυακής εφαρμογής, ο οποίος ξαναδημιουργεί την κλασική επιφάνεια καθώς την επεξεργάζεστε. Ανοίξτε το http://localhost:8065 και δημιουργήστε έναν λογαριασμό: ο πρώτος γίνεται διαχειριστής συστήματος.
Εντολή (στο server/) | Λειτουργία |
|---|---|
make run-server, make run-client | Ξεκινήστε μόνο τον διακομιστή, ή μόνο τον παρατηρητή της διαδικτυακής εφαρμογής. |
make restart-server | Επανεκκινήστε τον διακομιστή μετά από αλλαγές στον κώδικα Go. |
make stop | Διακόψτε τον διακομιστή, τον παρατηρητή και τα containers. |
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, η προεπιλεγμένη πηγή δεδομένων του διακομιστή. Επιλέξτε ποια containers ξεκινούν με το 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
Τα builds αποθηκεύονται στο webapp/channels/dist (classic) και στο webapp/fusion/dist (Fusion). Η εντολή make client στο server/ τα συνδέει ως server/client και server/client-fusion, από όπου ο server τα σερβίρει: το classic κάτω από /static/, το Fusion κάτω από /static/fusion/.
- Η εντολή
npm run run(ήmake runστοwebapp/) παρακολουθεί και ξαναδημιουργεί το classic interface. ΠροσθέστεWATCH_FUSION=trueγια να ξαναδημιουργηθεί και το Fusion. - Η εντολή
npm run dev-server(make dev) εκτελεί τον development server του webpack: το classic στην θύρα 9005, το Fusion στην θύρα 9006. - Για να δείτε το ένα ή το άλλο interface στον browser, προσθέστε
?webui=fusionή?webui=classicστη διεύθυνση οποιασδήποτε σελίδας.
Δοκιμές και έλεγχοι
| Εντολή | Πού | Λειτουργία |
|---|---|---|
make test-server | server/ | Το suite δοκιμών του server, ενάντια στα development containers. Απαιτεί πολύ χρόνο. |
make test-server-quick | server/ | Μόνο οι σύντομες δοκιμές. |
go test ./channels/app/... -run TestName | server/ | Ένα πακέτο ή δοκιμή, με τα containers σε λειτουργία (make start-docker). |
make check-style | server/ | go vet, golangci-lint και οι υπόλοιποι έλεγχοι Go. |
make test | webapp/ | Οι unit tests (Jest) της web app, σε κάθε πακέτο. |
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 binaries σε μία κίνηση. Το αρχείο περιέχει bin/antimatter, bin/amctl, ένα προεπιλεγμένο config/config.json με ένα README.md για την αλλαγή ρυθμίσεων, και τις δύο διαδικτυακές διεπαφές, τα templates, τις γραμματοσειρές και τις μεταφράσεις. Άλλες πλατφόρμες: make package-osx, make package-windows, make package-freebsd.
Ενσωματωμένες εφαρμογές
Μια απλή make package-linux δημιουργεί ένα αρχείο χωρίς εφαρμογές. Για να τις συμπεριλάβετε, όπως κάνουν οι δημοσιευμένες εκδόσεις, κατεβάστε πρώτα τα υπογεγραμμένα bundles των εφαρμογών και περάστε τον φάκελό τους:
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 για κάθε εφαρμογή που αναφέρεται στο plugins.json του antimatter-docker, μαζί με την υπογραφή της, και ελέγχει την υπογραφή έναντι του κλειδιού plugin του Antimatter. Από προεπιλογή, περιλαμβάνει τα Whiteboard, Φωνητικά κανάλια, Κλήσεις, Συνομιλία AI (Πράκτορες), Εκκρεμότητες, Ψηφοφορίες, Σημειώσεις, GIFs και Memes. Η μεταβλητή AM_BUNDLED_APPS (ονομασίες αποθετηρίων, διαχωρισμένες με κενά) αλλάζει τη λίστα. Οι εφαρμογές χωρίς έκδοση ή χωρίς υπογραφή παραλείπονται με μια προειδοποίηση. Τα πακέτα αποθηκεύονται στον φάκελο 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 release της ετικέτας (prerelease για έκδοση με -). Όταν εκτελείται χειροκίνητα, αριθμεί τη δημιουργία ως 0.9.0-dev.<run> και διατηρεί τα αρχεία ως artifacts της ροής εργασίας. Κάθε αποθετήριο εφαρμογής έχει μια ροή εργασίας release.yml που δημοσιεύει το υπογεγραμμένο bundle της με τον ίδιο τρόπο.
Το Docker image
Το repository antimatter-docker δημιουργεί τα δημοσιευμένα images, τον server με τις apps του, εντελώς μέσα στο 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 αναφέρει τις apps και τις εκδόσεις που δημιουργήθηκαν, ενώ το README του repository εξηγεί τις παραλλαγές.
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 εξαντλήσει τη στήλη (heap), αυξήστε το όριο του:
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, χωρίς notarisation: οι Mac με chip Apple απορρίπτουν μη υπογεγραμμένο κώδικα. Η ροή release.yml του αποθετηρίου δημιουργεί μη υπογεγραμμένα πακέτα για Linux, Windows και macOS σε tag v*.
Εφαρμογή για κινητό
Η εφαρμογή για κινητά είναι μια εφαρμογή React Native· το README της αναφέρει τις εντολές (npm run ios, npm run android). Για να δημιουργήσετε το δικό σας αντίγραφο, χρειάζεστε επίσης τα δικά σας κλειδιά υπογραφής, ένα έργο Firebase για ειδοποιήσεις Android, ένα κλειδί APNs για iOS και έναν push proxy που να διατηρεί αυτές τις διαπιστευτήριες πληροφορίες. Η ροή release.yml του αποθετηρίου δημιουργεί το APK και το AAB για Android και ένα μη υπογεγραμμένο .ipa για iOS σε tag v*, χωρίς λογαριασμούς σε καταστήματα· το README της αναφέρει τα μυστικά που υπογράφουν τη δημιουργία για Android και ρυθμίζουν το Firebase.