ساخت از سورس
این صفحه توضیح میدهد که چگونه Antimatter را از کد منبع آن بسازید و اجرا کنید، چه برای کار روی آن و چه برای ساخت بیلدهای اختصاصی. این صفحه سرور و رابطهای وب را پوشش میدهد که در یک مخزن قرار دارند، و سپس تصویر Docker و اپلیکیشنها را.
چه چیزهایی نیاز دارید
- برو، در نسخهای که در
server/go.modآمده (۱.۲۶.۷ در زمان نگارش). - 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 گیگابایت 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 | فقط سرور را شروع کنید، یا فقط watcher اپلیکیشن وب را. |
make restart-server | سرور را پس از تغییر کد Go مجدداً راهاندازی کنید. |
make stop | سرور، watcher و کانتینرها را متوقف کنید. |
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/) رابط کاربری کلاسیک را زیر نظر میگیرد و پس از هر تغییر، دوباره آن را میسازد. برای اینکه Fusion هم بهطور خودکار بازسازی شود، متغیرWATCH_FUSION=trueرا اضافه کنید. - دستور
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 شامل go vet، golangci-lint و موارد دیگر. |
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/ | بهروزرسانی فایلهای رشتههای انگلیسی پس از افزودن یا تغییر متنها (به بخش ترجمهها مراجعه کنید). |
بهجای اجرای go mod tidy در server/، از دستور 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 رابطهای وب و باینریهای لینوکس را در یک مرحله میسازد. آرشیو شامل 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، کانالهای صوتی، مکالمات، چت هوش مصنوعی (عاملها)، کارهای در انتظار، نظرسنجیها، یادداشتها، GIF و میمها را دریافت میکند؛ متغیر 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> تعیین میشود و فایلها به عنوان آثار گردش کار (Artifacts) حفظ میشوند. هر مخزن اپلیکیشن دارای گردش کار 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، حدود ۱۶ گیگابایت RAM و ۳۰ گیگابایت فضای دیسک نیاز دارید. نتیجه به صورت 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 را یکی پس از دیگری، نه همزمان، میسازد تا اوج مصرف حافظه پایینتر بماند. خودتان آنها را موازی اجرا نکنید.- مینیفایر برای هر پردازنده یک worker شروع میکند. روی دستگاهی با هستههای زیاد و حافظه کم، پردازندههایی که ساخت میبیند را محدود کنید:
taskset -c 0-5 npm run build. - اگر Node از نظر heap به پایان برسد، حد آن را افزایش دهید:
NODE_OPTIONS=--max-old-space-size=6144. ساخت Docker از این مقدار استفاده میکند (BUILD_NODE_OPTIONSدرbuild.env). - اجرای همزمان مجموعه کامل تستهای سرور، یک ساخت وب و یک ساخت Docker را روی دستگاه کوچک اجتناب کنید.
برنامهها
هر برنامه (plugin) مخزن و 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 قرار دارند. بدون گواهی اپل، مقدار AM_MAC_ADHOC_SIGN=true را تنظیم کنید تا اپلیکیشن macOS به صورت ad hoc و بدون تأییدیه (notarisation) امضا شود؛ مکهای مبتنی بر Apple Silicon کد امضانشده را رد میکنند. گردش کار release.yml در مخزن، بستههای امضانشده برای لینوکس، ویندوز و macOS را در تگ v* میسازد.
برنامه موبایل
اپلیکیشن موبایل یک اپلیکیشن React Native است؛ فایل README آن دستورات (npm run ios، npm run android) را فهرست کرده است. برای ساخت نسخه شخصی خود، به کلیدهای امضای اختصاصی، یک پروژه Firebase برای اعلانهای اندروید، یک کلید APNs برای iOS و یک پراکسی پوش که این اعتبارنامهها را نگهداری میکند، نیاز دارید. گردش کار release.yml در مخزن، فایلهای APK و AAB اندروید و فایل .ipa امضانشده iOS را در تگ v* بدون حسابهای فروشگاه میسازد؛ فایل README آن اسرار (secrets) مورد نیاز برای امضای نسخه اندروید و راهاندازی Firebase را فهرست میکند.