نصب Antimatter

Antimatter را با فایل compose آماده، از بسته .deb یا .rpm نسخه منتشرشده، یا از آرشیو نسخه منتشرشده نصب کنید. سپس اولین حساب مدیر را ایجاد نمایید.

نصب با Docker Compose

این روش توصیه‌شده است. یک فایل compose، Antimatter، PostgreSQL، فضای ذخیره‌سازی فایل و سرویس GIF را اجرا می‌کند. شما به یک سرور لینوکس با Docker Engine و افزونه Compose آن (docker compose)، ۲ هسته پردازنده و ۴ گیگابایت حافظه یا بیشتر نیاز دارید.

۱. فایل compose را دانلود کنید

mkdir antimatter && cd antimatter
curl -fsSLO https://antimatter.chat/compose.yaml

۲. فایل .env را ایجاد کنید

فایل compose تنظیمات خود را از یک فایل .env در همان دایرکتوری می‌خواند. آن را با کلیدهای تصادفی ایجاد کنید:

cat > .env <<EOF
SITE_URL=http://localhost:8065
POSTGRES_PASSWORD=$(openssl rand -hex 24)
S3_SECRET_KEY=$(openssl rand -hex 24)
GIFS_API_KEY=$(openssl rand -hex 24)
AM_AI_ENCRYPTION_KEY=$(openssl rand -base64 32)
EOF
chmod 600 .env

مقدار SITE_URL را بر روی آدرسی که کاربران در مرورگر خود وارد می‌کنند تنظیم کنید، برای مثال http://192.168.1.20:8065 در یک شبکه محلی یا https://chat.example.com با یک دامنه. فایل .env را نگه دارید: پایگاه داده و فضای ذخیره‌سازی از همان اولین اجرا از این رمزهای عبور استفاده می‌کنند، کلیدهای API اتصالات مدل هوش مصنوعی با AM_AI_ENCRYPTION_KEY رمزنگاری می‌شوند، و شما برای بازگرداندن یک نسخه پشتیبان به همان فایل نیاز دارید.

۳. آن را اجرا کنید

docker compose up -d
docker compose ps

اجرای اول یک یا دو دقیقه طول می‌کشد: PostgreSQL پایگاه داده را ایجاد می‌کند، یک سرویس یک‌باره bucket سطل ذخیره‌سازی را ایجاد می‌کند، یک سرویس یک‌باره gifs-stickers بسته استیکر اولیه را وارد می‌کند، و Antimatter جداول خود را ایجاد می‌کند. روند را با docker compose logs -f antimatter دنبال کنید.

برای استفاده از نام دامنه و HTTPS از همان ابتدا، به دامنه و HTTPS مراجعه کنید: با فایل compose، این کار تنها دو خط اضافه در .env و پروفایل https است.

متغیرهای .env

متغیرمقدار پیش‌فرضعملکرد
SITE_URLضروریآدرس عمومی Antimatter (ServiceSettings.SiteURL).
POSTGRES_PASSWORDضروریرمز عبور کاربر پایگاه داده antimatter.
S3_SECRET_KEYضروریکلید محرمانه فضای ذخیره‌سازی فایل.
GIFS_API_KEYضروریکلیدی که Antimatter برای فراخوانی سرویس GIF استفاده می‌کند.
AM_AI_ENCRYPTION_KEYخالیکلیدی که کلیدهای API اتصالات مدل هوش مصنوعی را رمزنگاری می‌کند (openssl rand -base64 32). اگر خالی باشد: سرور یک فایل کلید در حجم data ایجاد می‌کند. به کلید رمزنگاری مراجعه کنید.
GIFS_UPLOAD_KEYخالیبه کاربران اجازه می‌دهد GIFها و استیکرهای خود را از انتخاب‌گر اضافه کنند و آن‌ها را حذف نمایند. اگر خالی باشد، بارگذاری غیرفعال می‌شود.
DOMAINخالینام دامنه شما، برای پروفایل https.
HTTP_PORT8065پورت میزبان برای وب‌سرور Antimatter.
CALLS_PORT8443پورت‌های UDP و TCP برای صوت و تصویر مکالمه.
EDGE_SUBNET172.29.71.0/28زیرشبکه شبکه بین Caddy و Antimatter. اگر با یکی از شبکه‌های شما همپوشانی دارد، آن را تغییر دهید.
TZUTCمنطقه زمانی کانتینرها.
ANTIMATTER_IMAGEghcr.io/antimatterchat/antimatter-next:latestتصویر Antimatter که اجرا می‌شود (در ادامه را ببینید).

اجزای در حال اجرا

سرویستصویرنقش
antimatterghcr.io/antimatterchat/antimatter-nextسرور، اپلیکیشن وب و اپلیکیشن‌های بسته‌بندی‌شده. پورت‌های HTTP_PORT و CALLS_PORT را منتشر می‌کند. دایرکتوری داده‌های آن حجم data است.
postgrespostgres:17-alpineپایگاه داده، در حجم postgres.
filesrustfs/rustfsمخزن سازگار با S3 برای فایل‌های بارگذاری‌شده و اپلیکیشن‌های نصب‌شده، در حجم files.
bucketamazon/aws-cliباکت antimatter را ایجاد می‌کند، سپس خارج می‌شود.
gifsghcr.io/antimatterchat/gifs-serverسرویس GIF و برچسب‌ها، در حجم gifs.
gifs-stickersghcr.io/antimatterchat/gifs-serverدر اولین اجرا، بسته برچسب‌های اولیه را وارد می‌کند، سپس خارج می‌شود.
httpscaddy:2-alpineفقط با پروفایل https: HTTPS روی پورت‌های 80 و 443.

PostgreSQL، سرویس ذخیره‌سازی و سرویس GIF در یک شبکه داخلی (private بدون دسترسی به اینترنت) قرار دارند که فقط Antimatter به آن می‌پیوندد. هیچ‌کدام از آن‌ها پورتی را منتشر نمی‌کنند.

کانتینر Antimatter هیچ چیزی روی دیسک نگه نمی‌دارد: تنظیمات آن در پایگاه داده است (AM_CONFIG به آن اشاره می‌کند) و فایل‌ها و اپلیکیشن‌های آن در سرویس ذخیره‌سازی قرار دارند. می‌توانید در هر زمان کانتینر را حذف و دوباره ایجاد کنید. حجم data آن فقط فایل کلید رمزنگاری هوش مصنوعی را نگه می‌دارد که سرور زمانی آن را می‌سازد که AM_AI_ENCRYPTION_KEY خالی باشد. همه چیزهایی که باید از آن‌ها نسخه پشتیبان تهیه کنید در حجم‌های postgres، files، gifs و data به همراه فایل .env شما قرار دارند.

انتخاب یک تصویر

دو تصویر Antimatter منتشر شده‌اند، هر دو برای linux/amd64 و linux/arm64، و هر دو از شاخه main تمام مخازن ساخته شده‌اند:

تصویراپلیکیشن‌های همراهبرچسب‌ها
ghcr.io/antimatterchat/antimatterچت هوش مصنوعی، مکالمات، GitHub، GitLab، Jira و Metrics.latest، X.Y.Z برای نسخه‌های منتشرشده، sha-<commit>
ghcr.io/antimatterchat/antimatter-nextمشابه مورد قبل، به علاوه کانال‌های صوتی، نظرسنجی‌ها، ایمیل، تقویم، یادداشت‌ها، تخته سفید، GIFها، کارهای در انتظار و میم‌ها. هر شب بازسازی می‌شود.latest, nightly, nightly-<YYYYMMDD>, sha-<commit>

بسته‌های تصویر دیگر شامل Kanban یا Playbooks نیستند: در صورت نیاز، هر یک را از انتشار GitHub مخصوص خود نصب کنید (بخش زیر را ببینید). سروری که از قبل یکی از آن‌ها را نصب دارد، پس از ارتقا همچنان آن را حفظ می‌کند.

فایل compose سایت از antimatter-next استفاده می‌کند، زیرا سرویس GIF و بیشتر اپلیکیشن‌های توضیح‌داده‌شده در این سایت فقط در آن تصویر وجود دارند. برای تغییر تصویر، ANTIMATTER_IMAGE را در .env تنظیم کنید و docker compose up -d را اجرا کنید.

برچسب latest به‌طور خودکار تغییر می‌کند. در محیط تولید، برچسبی مانند nightly-20261015 یا sha-<commit> را ثابت نگه دارید و هنگام ارتقا، آن را به‌صورت دستی تغییر دهید. سرور هنگام شروع به کار، پایگاه داده خود را ارتقا می‌دهد، بنابراین بدون بازگرداندن پشتیبان‌گیری که قبل از آن گرفته شده است، نمی‌توانید به تصویر قدیمی‌تر یا از antimatter-next به antimatter بازگردید. به پشتیبان‌گیری و ارتقاها مراجعه کنید.

داخل تصویر

  • سرور در /antimatter قرار دارد و فایل‌های اجرایی antimatter و amctl در /antimatter/bin (که در PATH قرار دارد) موجود هستند.
  • سرور با کاربر بدون دسترسی ادمین antimatter (شناسه کاربری ۲۰۰۰) روی یک پایه دایسترولس (distroless) حداقلی و بدون شل اجرا می‌شود.
  • پورت‌ها: ۸۰۶۵ (وب و API)، ۸۰۶۷ (متریک‌ها)، ۸۰۷۴ (خوشه)، ۸۴۴۳ UDP و TCP (مکالمات).
  • حالت محلی (ServiceSettings.EnableLocalMode) فعال است، بنابراین amctl --local داخل کانتینر کار می‌کند. بررسی سلامت با اجرای amctl system status --local انجام می‌شود.
  • اپلیکیشن‌های بسته‌بندی شده در /antimatter/prepackaged_plugins قرار دارند و با کلید امضای اپلیکیشن Antimatter امضا شده‌اند.
  • ابزارهای استخراج متن (pdftotext، wvText، unrtf، tidy) گنجانده شده‌اند، بنابراین محتوای اسناد بارگذاری شده قابل جستجو است.

فایل‌های compose دیگر

مخزن antimatter-docker شامل یک تنظیمات محیط تولید در deploy/compose/ است: nginx با گواهینامه‌های شخصی شما یا Let's Encrypt (certbot)، PostgreSQL، سرویس اختیاری GIF (پروفایل gifs) و حجم‌های نام‌گذاری شده برای پیکربندی، داده‌ها و لاگ‌های سرور که در README آن مستند شده است. این تنظیمات به‌طور پیش‌فرض از تصویر پایدار استفاده می‌کند و فایل‌ها را روی یک حجم محلی به جای فضای ذخیره‌سازی S3 ذخیره می‌کند. از این تنظیمات استفاده کنید اگر nginx را به Caddy ترجیح می‌دهید یا از قبل گواهینامه دارید.

ایجاد اولین مدیر

SITE_URL را در مرورگر خود باز کنید و یک حساب کاربری ایجاد کنید. اولین حساب کاربری ایجاد شده روی یک سرور جدید به مدیر سیستم تبدیل می‌شود و سپس مراحل نصب شما را در ایجاد اولین جامعه (نام Antimatter برای یک تیم یا فضای کاری) راهنمایی می‌کند.

این کار را بلافاصله پس از اولین شروع انجام دهید: تا زمانی که این کار انجام نشود، هر کسی که زودتر به سرور دسترسی پیدا کند به مدیر آن تبدیل می‌شود. برای ایجاد حساب کاربری از خط فرمان به جای رابط کاربری، قبل از اینکه سرور از بیرون قابل دسترسی باشد:

docker compose exec antimatter amctl --local user create --system-admin --email-verified \
    --email admin@example.com --username admin --password 'a-long-password'
docker compose exec antimatter amctl --local team create --name main --display-name "Main"
docker compose exec antimatter amctl --local team users add main admin

سپس در SITE_URL وارد شوید. دستور را با یک فاصله شروع کنید تا رمز عبور در تاریخچه شل شما ثبت نشود (با HISTCONTROL=ignorespace)، یا پس از ورود، رمز عبور را تغییر دهید.

مرحله‌های بعد از ورود:

  1. برای یک شرکت یا سازمان، نوع جوامع جدید را روی فضای کاری تنظیم کنید و نوع جامعه‌ای که از قبل ایجاد کرده‌اید را در تنظیمات آن تغییر دهید: Guild یا فضای کاری.
  2. تعیین کنید چه کسانی می‌توانند حساب کاربری ایجاد کنند: ورود و حساب‌های کاربری.
  3. ایمیل را پیکربندی کنید تا دعوت‌نامه‌ها و بازنشانی رمز عبور کار کنند: ایمیل و اعلان‌های پوش.
  4. پورت مکالمات را در فایروال خود باز کنید: مکالمات و صدا.
  5. بررسی کنید کدام برنامه‌ها فعال هستند: برنامه‌های همراه.

دانلود یک نسخه انتشار

بدون Docker، Antimatter را از فایل‌های یک نسخه انتشار در GitHub نصب کنید: github.com/AntimatterChat/antimatter/releases. هر نسخه انتشار دارای شماره نسخه‌ای مانند 0.9.0 است و برچسب آن همان عدد با پیشوند v است (v0.9.0).

Antimatter در مرحله بتا است: نسخه‌های انتشار آن در سری 0.9.0 قرار دارند. نسخه‌ای که شماره نسخه آن پس از خط تیره پسوندی دارد، مانند 0.9.0-rc.1، در GitHub با برچسب Pre-release مشخص شده است. این یک نسخه آزمایشی است که قبل از نسخه نهایی منتشر می‌شود.

هر نسخه انتشار دارای این فایل‌ها برای سرورهای amd64 و arm64 است:

فایلتوضیحات
antimatter_<version>-1_amd64.deb, antimatter_<version>-1_arm64.debبسته برای Debian، Ubuntu و توزیع‌های مبتنی بر آن‌ها.
antimatter-<version>-1.x86_64.rpm, antimatter-<version>-1.aarch64.rpmبسته برای Fedora، RHEL و توزیع‌های سازگار با RHEL.
antimatter-<version>-linux-amd64.tar.gz, antimatter-<version>-linux-arm64.tar.gzآرشیو نسخه انتشار، برای هر توزیع لینوکس، که به صورت دستی راه‌اندازی می‌شود.
SHA256SUMSچک‌سام SHA-256 هر فایل از نسخه انتشار.

بسته‌ها و آرشیو شامل همان برنامه هستند: سرور (antimatter)، ابزار خط فرمان (amctl)، هر دو برنامه وب (رابط پیش‌فرض و کلاسیک)، برنامه‌های همراه، قالب‌های ایمیل و ترجمه‌ها. بسته‌ها یک سرویس systemd و یک فایل تنظیمات اضافه می‌کنند، بنابراین هر کدام یک نصب یکپارچه هستند: شما فقط باید یک پایگاه داده PostgreSQL اضافه کنید. دانلودهای جداگانه باینری وجود ندارد: باینری‌ها در آرشیو، در antimatter/bin/ قرار دارند. آن‌ها استاتیک هستند، بنابراین روی هر توزیع لینوکس با معماری مربوطه اجرا می‌شوند.

در نام بسته‌ها، خط تیرهٔ نسخهٔ پیش‌انتشار به علامت تیلدا تبدیل می‌شود تا مدیر بسته، نسخهٔ پیش‌انتشار را قبل از نسخهٔ نهایی مرتب کند: نسخهٔ 0.9.0-rc.1 منجر به antimatter_0.9.0~rc.1-1_amd64.deb و antimatter-0.9.0~rc.1-1.x86_64.rpm می‌شود. فایل آرشیو خط تیره را حفظ می‌کند.

دستور antimatter version نسخهٔ انتشار را به‌عنوان شمارهٔ بیلد و کامیتی که از آن ساخته شده است را به‌عنوان هش ساخت چاپ می‌کند. خط نسخه آن، نسخهٔ خط Mattermost است که Antimatter بر اساس آن ساخته شده است.

بررسی دانلود

فایل مورد نیاز و SHA256SUMS را از صفحهٔ انتشار یا با استفاده از curl در یک دایرکتوری دانلود کنید، سپس فایل را بررسی کنید:

curl -fLO https://github.com/AntimatterChat/antimatter/releases/download/v<version>/antimatter_<version>-1_amd64.deb
curl -fLO https://github.com/AntimatterChat/antimatter/releases/download/v<version>/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS

هر فایلی که دانلود کرده‌اید باید با وضعیت OK فهرست شده باشد. هر نتیجهٔ دیگری نشان‌دهندهٔ آسیب‌دیده یا ناقص بودن فایل است: آن را دوباره دانلود کنید و نصب نکنید. فایل SHA256SUMS امضا نشده است: این فایل فقط دانلود آسیب‌دیده را تشخیص می‌دهد و چیزی بیش از آنچه دانلود HTTPS از GitHub انجام می‌دهد، اثبات نمی‌کند.

نصب بستهٔ .deb یا .rpm

بسته، Antimatter را به‌عنوان یک سرویس systemd نصب می‌کند که فقط برای شروع به یک پایگاه داده نیاز دارد. از آن روی سرورهای ۶۴ بیتی Debian، Ubuntu، Fedora یا سازگار با RHEL که systemd دارند استفاده کنید.

بسته چه چیزی را نصب می‌کند

مسیرمحتوا
/opt/antimatterبرنامه: bin/antimatter، bin/amctl، اپلیکیشن‌های وب (client/، client-fusion/)، اپلیکیشن‌های همراه (prepackaged_plugins/)، قالب‌ها، ترجمه‌ها و فونت‌ها. هر به‌روزرسانی آن را جایگزین می‌کند.
/etc/antimatter/antimatter.envتنظیمات سرویس به‌صورت متغیرهای AM_: پایگاه داده، URL سایت، سرویس GIF. فقط برای root قابل خواندن است. به‌روزرسانی‌ها آن را حفظ می‌کنند.
/etc/antimatter/config/config.jsonفایل پیکربندی، جایی که سرور تنظیمات تغییر یافته در کنسول سیستم را ذخیره می‌کند. این فایل در اولین نصب از /opt/antimatter/defaults/config.json ایجاد می‌شود و پس از آن هرگز جایگزین نمی‌شود.
/var/lib/antimatterفایل‌های بارگذاری شده (data/) و اپلیکیشن‌های نصب شده (plugins/، client-plugins/).
/var/log/antimatterفایل‌های لاگ، اگر لاگ‌نویسی فایل را فعال کنید. این حالت غیرفعال است: لاگ‌ها به ژورنال ارسال می‌شوند.
/usr/lib/systemd/system/antimatter.serviceسرویس.
/usr/bin/amctlیک لینک به /opt/antimatter/bin/amctl.

دایرکتوری‌هایی که سرور در /opt/antimatter در آن‌ها می‌نویسد (config، data، plugins، client/plugins و logs) پیوندی به /etc/antimatter، /var/lib/antimatter و /var/log/antimatter هستند. بنابراین، به‌روزرسانی‌ای که /opt/antimatter را جایگزین می‌کند، هرگز داده‌های شما را دستکاری نمی‌کند. این بسته همچنین کاربر سیستمی antimatter را ایجاد می‌کند که سرور را اجرا می‌کند و مالک این دایرکتوری‌ها است.

این بسته به ca-certificates وابسته است. همچنین نصب postgresql (در دبیان و اوبونتو) یا postgresql-server (در فدورا و RHEL)، media-types (mailcap برای بسته‌های .rpm) و gifs-server (سرویس GIF که انتشار مستقلی دارد؛ به بخش زیر مراجعه کنید) توصیه می‌شود. ابزارهای apt و dnf در صورت وجود، بسته‌های توصیه‌شده را نصب می‌کنند. همچنین نصب poppler-utils، wv، unrtf و tidy پیشنهاد می‌شود (در بسته‌های .rpm، wv وجود ندارد): این ابزارها متن اسناد بارگذاری‌شده را استخراج می‌کنند تا جستجو بتواند کلمات را درون آن‌ها پیدا کند. اگر این قابلیت را می‌خواهید، آن‌ها را به صورت دستی نصب کنید.

۱. نصب بسته‌ها

بسته Antimatter و بسته سرویس GIF را متناسب با معماری سیستم خود دانلود کنید، آن‌ها را مطابق توضیحات بالا بررسی کنید و هر دو را با یک دستور نصب کنید تا توصیه مربوط به gifs-server برآورده شود (این بسته در مخازن توزیع‌ها موجود نیست):

# Debian, Ubuntu
sudo apt install ./antimatter_<version>-1_amd64.deb ./gifs-server_*_amd64.deb
# Fedora, RHEL
sudo dnf install ./antimatter-<version>-1.x86_64.rpm ./gifs-server-*.x86_64.rpm

پیشوند ./ را حذف نکنید؛ این پیشوند به apt و dnf می‌گوید که یک فایل محلی را نصب کنند. برای نصب بدون سرویس GIF، بسته مربوط به آن را از دستور حذف کنید. این بسته سرویس antimatter را فعال می‌کند اما آن را اجرا نمی‌کند و مراحل بعدی را نمایش می‌دهد.

۲. ایجاد پایگاه داده

Antimatter به PostgreSQL نسخه ۱۵ یا جدیدتر نیاز دارد، چه روی همین سرور و چه روی سروری دیگر. نسخه PostgreSQL توزیع خود را با دستور psql --version بررسی کنید. اگر نسخه قدیمی است، نسخه جدیدتر را از مخازن اختصاصی پروژه PostgreSQL نصب کنید یا از پایگاه داده‌ای روی سروری دیگر استفاده کنید. در Debian و Ubuntu، بسته postgresql پایگاه داده را اجرا می‌کند. در Fedora و RHEL، ابتدا آن را ایجاد و اجرا کنید:

sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql

سپس برای Antimatter یک کاربر و یک پایگاه داده ایجاد کنید:

sudo -u postgres psql -c "CREATE USER antimatter WITH PASSWORD 'a-long-password'"
sudo -u postgres psql -c "CREATE DATABASE antimatter OWNER antimatter"

PostgreSQL باید اتصالات با رمز عبور از 127.0.0.1 را بپذیرد؛ یعنی خطوط host در فایل pg_hba.conf باید از روش scram-sha-256 استفاده کنند.

۳. تنظیم پایگاه داده و نشانی سایت

فایل /etc/antimatter/antimatter.env را ویرایش کنید (sudoedit /etc/antimatter/antimatter.env). علامت # را از ابتدای خطوطی که استفاده می‌کنید حذف کنید و پایگاه داده و آدرسی که کاربران برای باز کردن آن استفاده خواهند کرد را تنظیم کنید:

AM_SQLSETTINGS_DRIVERNAME=postgres
AM_SQLSETTINGS_DATASOURCE=postgres://antimatter:a-long-password@localhost:5432/antimatter?sslmode=disable&connect_timeout=10
AM_SERVICESETTINGS_SITEURL=https://chat.example.com

Any setting of the configuration can go in this file, as AM_<SECTION>_<SETTING>: for example, SqlSettings.DataSource is AM_SQLSETTINGS_DATASOURCE. A setting set here can't be changed in the System Console. See Configuration. Restart the server after each change: sudo systemctl restart antimatter.

این سرویس همچنین چند مقدار پیش‌فرض را تنظیم می‌کند که با خطوط موجود در antimatter.env بازنویسی می‌شوند: ثبت لاگ در فایل غیرفعال است (AM_LOGSETTINGS_ENABLEFILE=false، AM_NOTIFICATIONLOGSETTINGS_ENABLEFILE=false) و حالت محلی فعال است (AM_SERVICESETTINGS_ENABLELOCALMODE=true) تا دستور amctl --local روی سرور کار کند.

۴. راه‌اندازی سرویس

sudo systemctl start antimatter
journalctl -u antimatter -f
sudo -u antimatter amctl --local system status

در اولین اجرا، سرور جداول خود را ایجاد می‌کند و سپس روی پورت ۸۰۶۵ گوش می‌دهد. آدرس http://<server>:8065 را باز کنید، یا پس از راه‌اندازی پروکسی معکوس، دامنه خود را باز کنید (به دامنه و HTTPS مراجعه کنید) و بلافاصله اولین حساب کاربری را ایجاد کنید؛ این حساب به عنوان مدیر سیستم در نظر گرفته خواهد شد. برای ایجاد آن از طریق خط فرمان، به جای docker compose exec antimatter amctl --local از دستورهای amctl بخش ایجاد اولین مدیر سیستم استفاده کنید و به جای آن از sudo -u antimatter amctl --local استفاده نمایید.

۵. فعال‌سازی GIFها

برنامه GIFها به صورت پیش‌فرض فعال است و antimatter.env از قبل آن را به سرویس GIF روی همان سرور اشاره می‌دهد (AM_GIFS_SERVICE_URL=http://127.0.0.1:8080/v2). با این حال، این برنامه به کلید API سرویس نیاز دارد. بسته gifs-server هنگام نصب، یک کلید تولید کرده است:

sudo systemctl start gifs-server-stickers    # imports the sticker pack, about a minute and a half
sudo systemctl start gifs-server
sudo grep -v '^#' /etc/gifs-server/api-keys

کلید را در antimatter.env به صورت AM_GIFS_API_KEY=<key> قرار دهید و Antimatter را مجدداً راه‌اندازی کنید، یا آن را به عنوان کلید API در کنسول سیستم › پلاگین ها › GIFها وارد کنید. اگر سرویس GIF روی سرور دیگری اجرا می‌شود، مقدار AM_GIFS_SERVICE_URL را به آدرس آن سرور تغییر دهید. برای اجازه دادن به کاربران جهت افزودن GIFها و استیکرهای شخصی خود، به GIFها مراجعه کنید.

سرویس

  • این سرویس با کاربر antimatter در مسیر /opt/antimatter اجرا می‌شود و فایل /etc/antimatter/antimatter.env را می‌خواند. systemd هر زمان که سرور متوقف شود، آن را مجدداً راه‌اندازی می‌کند و تا یک ساعت فرصت می‌دهد تا شروع به کار کند، زیرا مهاجرت‌های پایگاه داده نسخه جدید ممکن است زمان‌بر باشد.
  • لاگ‌های آن در ژورنال ثبت می‌شوند: journalctl -u antimatter.
  • این سرویس ایمن‌سازی شده است: مسیرهای /usr و /etc برای سرور فقط‌خواندنی هستند، به جز /etc/antimatter/config، و سرور دسترسی به /home، /root یا /run/user ندارد. اگر محل ذخیره فایل‌ها (FileSettings.Directory) را تغییر می‌دهید، مسیری خارج از این محدوده‌ها انتخاب کنید که متعلق به کاربر antimatter باشد.
  • ارتقا فایل سرویس را جایگزین می‌کند. برای تغییر آن، از sudo systemctl edit antimatter استفاده کنید تا تغییرات شما در یک فایل جداگانه حفظ شود.

ارتقای بسته

  1. یک پشتیبان تهیه کنید (بخش پشتیبان‌گیری و ارتقا را ببینید).
  2. بسته جدید و فایل SHA256SUMS را دانلود کنید و صحت آن‌ها را بررسی نمایید.
  3. سرور را متوقف کنید، بسته جدید را به جای بسته قبلی نصب کنید و دوباره آن را راه‌اندازی نمایید:
    sudo systemctl stop antimatter
    sudo apt install ./antimatter_<new version>-1_amd64.deb     # or: sudo dnf install ./antimatter-<new version>-1.x86_64.rpm
    sudo systemctl start antimatter
    journalctl -u antimatter -f

بسته به خودی خود سرور را مجدداً راه‌اندازی نمی‌کند. پس از ارتقا، پیام Antimatter was upgraded; restart it to run the new version: sudo systemctl restart antimatter را چاپ می‌کند: اگر قبل از نصب سرور را متوقف نکرده‌اید، فوراً آن را مجدداً راه‌اندازی کنید. فرآیند ارتقا /opt/antimatter و فایل سرویس را جایگزین می‌کند و فایل‌های antimatter.env، config.json، /var/lib/antimatter و لاگ‌ها را حفظ می‌کند. هنگام راه‌اندازی، سرور پایگاه داده را ارتقا می‌دهد و نسخه‌های جدیدتر برنامه‌های همراه را نصب می‌کند.

اگر نسخه جدید فایل پیش‌فرض antimatter.env را تغییر دهد، apt می‌پرسد که آیا نسخه فعلی شما حفظ شود یا خیر: نسخه خودتان را نگه دارید. dnf نسخه شما را حفظ می‌کند و نسخه جدید را به عنوان /etc/antimatter/antimatter.env.rpmnew ذخیره می‌کند. ارتقاها فقط به جلو انجام می‌شوند: هرگز نسخه قدیمی‌تری را روی نسخه جدیدتر نصب نکنید.

حذف بسته

دستور sudo apt remove antimatter یا sudo dnf remove antimatter سرویس را متوقف و غیرفعال می‌کند و برنامه را حذف می‌کند. داده‌ها (/var/lib/antimatter)، تنظیمات (/etc/antimatter)، پایگاه داده و کاربر antimatter حفظ می‌شوند: برای حذف کامل Antimatter، آن‌ها را به صورت دستی پاک کنید.

برنامه‌ها در بسته‌ها و آرشیو

بسته‌ها و آرشیو شامل آخرین نسخه امضاشده این برنامه‌ها در prepackaged_plugins/ هستند: گفتگوی هوش مصنوعی، مکالمات، گیف‌ها، میم‌ها، یادداشت‌ها، نظرسنجی‌ها، کارهای در انتظار، کانال‌های صوتی و تخته سفید. برنامه‌ای که هنگام ساخت نسخه سرور هنوز منتشر نشده بود، حذف می‌شود: دستور ls /opt/antimatter/prepackaged_plugins نشان می‌دهد که نسخه شما شامل چه چیزی است. میم‌ها و کارهای در انتظار گنجانده شده‌اند اما فعال نیستند: برنامه‌های پیش‌فرض توضیح می‌دهد که چگونه آن‌ها را نصب و فعال کنید.

کانبان و پلی‌بوک‌ها دیگر با سرور یا هیچ‌یک از ایمیج‌های Docker همراه نیستند: سروری که از قبل یکی از آن‌ها را نصب کرده است، در طول ارتقا آن را حفظ می‌کند و سایر کاربران می‌توانند آن را از انتشار مستقل خود، مانند برنامه‌های زیر، نصب کنند. سایر برنامه‌های ایمیج‌های Docker نیز در بسته‌ها یا آرشیو موجود نیستند: ایمیل، تقویم، GitHub، GitLab، Jira و Metrics. هر یک از آن‌ها، از جمله کانبان و پلی‌بوک‌ها را از انتشارهای مستقل خود نصب کنید:

اپلیکیشنانتشارهاشناسه اپلیکیشن
Kanbanantimatter-plugin-boardsfocalboard
Playbooksantimatter-plugin-playbooksplaybooks
ایمیلantimatter-plugin-mailcom.antimatterchat.mail
تقویمantimatter-plugin-calendarcom.antimatterchat.calendar
GitHubantimatter-plugin-githubgithub
GitLabantimatter-plugin-gitlabcom.github.manland.mattermost-plugin-gitlab
Jiraantimatter-plugin-jirajira
MetricsAntimatter-plugin-metricscom.mattermost.mattermost-plugin-metrics

هر انتشار برنامه شامل بسته‌ی برنامه (فایل .tar.gz)، امضای آن (همان نام با پسوند .sig) و یک فایل SHA256SUMS است. برای نصب یک برنامه، ابتدا اجازه بارگذاری را فعال کنید، سپس بسته را با amctl اضافه کنید:

# 1. In /etc/antimatter/antimatter.env, add this line, then restart Antimatter
AM_PLUGINSETTINGS_ENABLEUPLOADS=true
sudo systemctl restart antimatter
# 2. Download the bundle where the antimatter user can read it, and install it
cd /tmp
curl -fLO https://github.com/AntimatterChat/antimatter-plugin-boards/releases/download/v<version>/<bundle>.tar.gz
sudo -u antimatter amctl --local plugin add <bundle>.tar.gz
sudo -u antimatter amctl --local plugin enable focalboard

برای ارتقای برنامه‌ای که به این روش نصب شده است، بسته جدید را با plugin add --force اضافه کنید: ارتقای بسته‌ها فقط برنامه‌های پیش‌فرض را ارتقا می‌دهند. می‌توانید خط AM_PLUGINSETTINGS_ENABLEUPLOADS را پس از آن دوباره حذف کنید. برای سایر روش‌های نصب برنامه‌ها، به نصب سایر برنامه‌ها مراجعه کنید.

امضاهای برنامه

بسته‌های برنامه با کلید امضای آنتی‌متر امضا شده‌اند: هر فایل .tar.gz.sig یک امضای جداگانه GPG از بسته مربوطه است. سرور قبل از نصب یک برنامه بسته‌بندی‌شده، این امضاها را بررسی می‌کند. برای بررسی خودتان یک بسته:

curl -fsSLO https://raw.githubusercontent.com/AntimatterChat/antimatter-docker/main/keys/antimatter-plugin-signing.asc
gpg --import antimatter-plugin-signing.asc
gpg --verify <bundle>.tar.gz.sig <bundle>.tar.gz

gpg باید امضای معتبری از Antimatter Plugin Signing با اثر انگشت 06C8 1032 4677 0F08 BBA7 78B9 E69B 05C3 92A6 9A45 را گزارش کند. همچنین هشدار می‌دهد که کلید با امضای مورد اعتماد گواهی نشده است: این موضوع برای کلیدی که خودتان آن را امضا نکرده‌اید، طبیعی است. انتشار یک برنامه بدون فایل‌های .sig امضا نشده است و یادداشت‌های انتشار آن نیز همین را ذکر می‌کنند.

نصب از آرشیو انتشار

آرشیو antimatter-<version>-linux-<arch>.tar.gz (به عنوان مثال antimatter-0.9.0-linux-amd64.tar.gz) برای توزیع‌هایی که بسته‌های .deb یا .rpm ندارند، یا برای چیدمان دلخواه شما مناسب است. این آرشیو شامل یک دایرکتوری antimatter/ است که شامل bin/antimatter، bin/amctl، config/config.json، برنامه‌های وب (client/ و client-fusion/)، برنامه‌های بسته‌بندی‌شده (prepackaged_plugins/، به بالا مراجعه کنید)، قالب‌های ایمیل و ترجمه‌ها می‌شود.

۱. آماده‌سازی PostgreSQL

آنتی‌متر فقط از PostgreSQL نسخه ۱۵ یا جدیدتر پشتیبانی می‌کند (نسخه‌های قدیمی‌تر اجرا می‌شوند اما با خطایی در لاگ همراه هستند). یک کاربر و یک پایگاه داده ایجاد کنید:

sudo -u postgres psql <<'EOF'
CREATE USER antimatter WITH PASSWORD 'a-long-password';
CREATE DATABASE antimatter OWNER antimatter;
EOF

۲. استخراج و پیکربندی

sudo tar -xzf antimatter-<version>-linux-amd64.tar.gz -C /opt
sudo useradd --system --user-group antimatter
sudo mkdir -p /opt/antimatter/data
sudo chown -R antimatter:antimatter /opt/antimatter

سرور را به پایگاه داده متصل کنید، یا در /opt/antimatter/config/config.json (SqlSettings.DataSource) یا با متغیرهای محیطی، و آدرس سایت را تنظیم کنید:

AM_SQLSETTINGS_DRIVERNAME=postgres
AM_SQLSETTINGS_DATASOURCE=postgres://antimatter:a-long-password@localhost:5432/antimatter?sslmode=disable&connect_timeout=10
AM_SERVICESETTINGS_SITEURL=https://chat.example.com

فایل config.json در آرشیو، یک پیکربندی پیش‌فرض کامل است: تنظیماتی که در کنسول سیستم تغییر می‌دهید، در آن ذخیره می‌شوند. برای نگهداری پیکربندی در پایگاه داده به جای این فایل، به پیکربندی مراجعه کنید.

۳. اجرا به عنوان سرویس

یک واحد systemd در /etc/systemd/system/antimatter.service:

[Unit]
Description=Antimatter
After=network.target postgresql.service

[Service]
Type=notify
User=antimatter
Group=antimatter
WorkingDirectory=/opt/antimatter
ExecStart=/opt/antimatter/bin/antimatter
EnvironmentFile=-/etc/antimatter.env
TimeoutStartSec=3600
Restart=always
RestartSec=10
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

متغیرهای AM_ خود را در /etc/antimatter.env قرار دهید (فقط قابل خواندن توسط root)، سپس:

sudo systemctl daemon-reload
sudo systemctl enable --now antimatter
journalctl -u antimatter -f

سرور روی پورت ۸۰۶۵ گوش می‌دهد. http://<server>:8065 را باز کنید، یا دامنه خود را پس از راه‌اندازی پروکسی معکوس (به دامنه و HTTPS مراجعه کنید)، و اولین حساب کاربری را ایجاد کنید: این حساب به مدیر سیستم تبدیل می‌شود.

bin/amctl سرور در حال اجرا را از طریق خط فرمان مدیریت می‌کند. روی خود سرور، این ابزار بدون نیاز به ورود از طریق حالت محلی کار می‌کند: مقدار AM_SERVICESETTINGS_ENABLELOCALMODE=true را تنظیم کنید، سپس دستور sudo -u antimatter /opt/antimatter/bin/amctl --local system status را اجرا کنید.

برای تصاویر متحرک GIF، سرویس GIF را نصب کنید (به بخش زیر مراجعه کنید) و متغیرهای AM_GIFS_SERVICE_URL و AM_GIFS_API_KEY را مطابق با مرحله ۵ بخش بسته‌ها تنظیم کنید.

بسته‌های سرویس GIF و پروکسی پوش

سرویس GIF و پروکسی پوش (Push Proxy) نسخه‌های مستقلی دارند که از همان قوانین سرور پیروی می‌کنند: یک آرشیو .tar.gz، یک بسته .deb و یک بسته .rpm برای amd64 و arm64، و یک فایل SHA256SUMS. نسخه‌هایی که دارای خط تیره هستند، پیش‌نشره (Prerelease) محسوب می‌شوند. همانند سرور، صحت فایل‌های دانلودی را با sha256sum --check --ignore-missing SHA256SUMS بررسی کنید.

سرویس GIF (gifs-server)

نسخه‌های انتشار: github.com/AntimatterChat/gifs-server/releases. نام آرشیو gifs-server-<version>-linux-<arch>.tar.gz است؛ نام بسته‌ها gifs-server است.

sudo apt install ./gifs-server_*_amd64.deb      # Debian, Ubuntu
sudo dnf install ./gifs-server-*.x86_64.rpm     # Fedora, RHEL

بسته موارد زیر را نصب می‌کند:

  • /usr/bin/gifs-server و سرویس gifs-server که با کاربر gifs-server اجرا می‌شود و کاتالوگ خود را در /var/lib/gifs-server نگه می‌دارد؛
  • سرویس gifs-server-stickers که هنگام شروع به کار، بسته استیکر موجود در /usr/share/gifs-server/stickers را وارد یا به‌روزرسانی می‌کند و سپس متوقف می‌شود؛
  • تنظیمات آن شامل /etc/gifs-server/gifs-server.env (متغیرهای AM_GIFS_ که در هنگام به‌روزرسانی حفظ می‌شوند) و /etc/gifs-server/api-keys که هر خط شامل یک کلید API است و در اولین نصب، یک کلید تصادفی برای آن تولید می‌شود.

این سرویس روی 127.0.0.1:8080 گوش می‌دهد، بنابراین فقط Antimatter موجود در همان سرور می‌تواند به آن دسترسی داشته باشد. اگر Antimatter در جای دیگری اجرا می‌شود، مقدار AM_GIFS_LISTEN=:8080 را در gifs-server.env تنظیم کنید و دسترسی به پورت را با فایروال خود محدود کنید. این فایل سایر تنظیمات را نیز فهرست می‌کند: AM_GIFS_UPLOAD_KEYS (کلیدهایی که اجازه افزودن GIF و استیکرها و حذف مواردی را که با آن‌ها اضافه شده‌اند دارند)، AM_GIFS_PUBLIC_URL، AM_GIFS_TRUST_PROXY و AM_GIFS_LOG_LEVEL. این بسته استفاده از ffmpeg، gifsicle، librsvg2-bin (librsvg2-tools برای بسته‌های .rpm) و یک فونت DejaVu را توصیه می‌کند؛ سرویس از این ابزارها برای ایجاد فرمت‌های GIF، ویدیو و استیکر هنگام وارد کردن یا دریافت فایل‌ها استفاده می‌کند و بدون آن‌ها نیز به کار خود ادامه می‌دهد.

مانند سرور، این سرویس در زمان نصب فعال می‌شود اما اجرا نمی‌گردد. آن را طبق مرحله ۵ بخش بسته‌ها راه‌اندازی کنید. پس از به‌روزرسانی، سرویس را مجدداً راه‌اندازی کنید: sudo systemctl restart gifs-server. حذف بسته، کاتالوگ را در /var/lib/gifs-server حفظ می‌کند.

پراکسی پوش

انتشارات: github.com/AntimatterChat/push-proxy/releases. آرشیو با نام antimatter-push-proxy-<version>-linux-<arch>.tar.gz است؛ نام بسته‌ها antimatter-push-proxy می‌باشد. بسته، فایل /usr/bin/antimatter-push-proxy و سرویس antimatter-push-proxy را نصب می‌کند. این سرویس با کاربر antimatter-push-proxy اجرا می‌شود و فایل /etc/antimatter-push-proxy/antimatter-push-proxy.json را می‌خواند (که در به‌روزرسانی‌ها حفظ می‌شود). اعتبارنامه‌های Apple و Firebase در /etc/antimatter-push-proxy/certs قرار می‌گیرند: اعلان‌های پوش توضیح می‌دهد که این اعتبارنامه‌ها از کجا تهیه می‌شوند.

sudo apt install ./antimatter-push-proxy_*_amd64.deb      # or: sudo dnf install ./antimatter-push-proxy-*.x86_64.rpm
sudo install -o root -g antimatter-push-proxy -m 0640 \
    AuthKey_ABCDE12345.p8 firebase-service-account.json /etc/antimatter-push-proxy/certs/
sudoedit /etc/antimatter-push-proxy/antimatter-push-proxy.json
sudo systemctl start antimatter-push-proxy
journalctl -u antimatter-push-proxy -f

در فایل تنظیمات، مسیرها نسبت به /etc/antimatter-push-proxy تعریف می‌شوند؛ به عنوان مثال "AppleAuthKeyFile": "./certs/AuthKey_ABCDE12345.p8" و "ServiceFileLocation": "./certs/firebase-service-account.json". سپس Push Notification Server را در Antimatter روی http://<proxy host>:8066 تنظیم کنید. پس از به‌روزرسانی، سرویس را مجدداً راه‌اندازی کنید: sudo systemctl restart antimatter-push-proxy.

پراکسی پوش روی پورت ۸۰۶۶ در تمام آدرس‌ها گوش می‌دهد و هویت درخواست‌کننده را بررسی نمی‌کند. این پورت را در یک شبکه خصوصی نگه دارید یا آن را پشت یک پراکسی معکوس قرار دهید که دسترسی را محدود می‌کند.

سایر دستورات سرور

علاوه بر اجرای سرور (antimatter یا antimatter server)، فایل اجرایی دارای چند دستور نگهداری است. این دستورات از همان پیکربندی سرور استفاده می‌کنند.

دستورعملکرد
antimatter versionنسخه، شماره ساخت، تاریخ ساخت و هش ساخت را چاپ می‌کند.
antimatter db pingدسترسی به پایگاه داده را بررسی می‌کند.
antimatter db initپیکربندی را در پایگاه داده ایجاد می‌کند (با تنظیم AM_CONFIG روی یک آدرس postgres://).
antimatter db migrateمهاجرت‌های پایگاه داده را بدون راه‌اندازی سرور اعمال می‌کند.
antimatter db versionآخرین مهاجرت اعمال‌شده روی پایگاه داده را چاپ می‌کند.
antimatter import bulk, antimatter export bulkداده‌ها را در قالب دسته‌ای وارد یا صادر می‌کند (به پشتیبان‌گیری و ارتقا مراجعه کنید).