בנייה מקוד המקור
עמוד זה מסביר כיצד לבנות ולהריץ את Antimatter מקוד המקור, לצורך עבודה עליו או ליצירת בנייה עצמאית. הוא מכסה את השרת ואת ממשקי האתר, המצויים במאגר אחד, ואחר כך את תמונת Docker ואת האפליקציות.
מה צריך
- Go, בגרסה המצוינת ב-
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), ובדיקות end-to-end ב-e2e-tests/.
הרצת שרת פיתוח
cd server
make run
make run מריץ את קונטיינרי הפיתוח (PostgreSQL, Redis, לכידת דוא"ל וכלי ניטור), מקשר את בניית אפליקציית האתר למקומה, מריץ את השרת ברקע באמצעות go run, ומריץ את מנהל השינויים (watcher) של אפליקציית האתר, המשחזר את הממשק הקלאסי בעת עריכה. פתחו את 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/ | בדיקות יחידה של אפליקציית ה־web (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 האחרון של כל אפליקציה המצוינת ב-plugins.json של antimatter-docker, יחד עם החתימה שלה, ובדוק את החתימה מול מפתח הפלאגינים של Antimatter. ברירת המחדל כוללת את Whiteboard, ערוצי קול, שיחות, סוכנים, משימות, סקרים, פתקים, GIFs ומימים; 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 של התג (שחרור מוקדם לגרסה עם -). כאשר מורצת ידנית, היא ממספרת את הבנייה 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, לא יחד, כדי להפחית את השיא. אל תריץ אותם במקביל בעצמך.- הממעיך (minifier) פותח עובד אחד לכל מעבד. במכונה עם הרבה ליבות וזיכרון מוגבל, יש להגביל את המעבדים שרואה הבנייה:
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), ללא אימות (notarisation): מחשבי Mac עם שבב Apple silicon דוחים קוד ללא חתימה. זרימת העבודה release.yml במאגר בונה חבילות ללא חתימה עבור Linux, Windows ו-macOS על תג v*.
אפליקציית נייד
האפליקציה ניידת היא אפליקציית React Native; קובץ ה-README שלה מפרט את הפקודות (npm run ios, npm run android). כדי לבנות עותק משלך, נדרשות גם מפתחות חתימה משלך, פרויקט Firebase להתראות ב-Android, מפתח APNs ל-iOS, ו-פרוקסי push שמאחסן את האישורים הללו. זרימת העבודה release.yml במאגר בונה את ה-APK וה-AAB של Android ואת ה-.ipa של iOS ללא חתימה על תג v*, ללא חשבונות חנויות; קובץ ה-README שלה מפרט את הסודות לחתימת בניית Android והגדרת Firebase.