صفحه رسمی استقرار روی اوبونتو برای حدود ۱۰۰۰ کاربر فقط ۱ vCPU و ۲ گیگابایت رم خواسته است. با این منابع، نصب Mattermost یعنی چهار کار جدا: PostgreSQL 15 به بالا، بسته رسمی APT با config.json، پوشه پیوست‌ها و Nginx با عبور WebSocket. هر خرابی نشانی یکی از همین اجزاست.

نقشه اجزا و جای هر کدام در بکاپ

جزءمسیر یا سرویساگر خراب شوددر بکاپ؟
دیتابیسسرویس postgresqlسرویس mattermost بالا نمی‌ماندبله، pg_dump
برنامهپوشه /opt/mattermostدستور curl روی 8065 جواب نمی‌دهدبله، پوشه config
فایل‌هاپوشه /opt/mattermost/dataپیام‌ها هستند، پیوست‌ها باز نمی‌شوندبله؛ روی S3 معمولاً نه
پروکسیسرویس Nginxصفحه باز است، پیام تازه فقط با رفرشخارج از فهرست رسمی؛ فایلش را نگه دارید

💡 صفحه باز است، اما پیام تازه نمی‌رسد

صفحه معماری Mattermost می‌گوید بدون WSS به‌روزرسانی‌ها فقط با رفرش می‌آیند.
✅ اول بلاک websocket فایل Nginx را ببینید.

پیام خطای اول را وقتی می‌شود خواند که بدانید از کدام جزء آمده است. همین سادگی، Mattermost را در مقایسه سه پیام‌رسان سازمانی متن‌باز گزینه‌ای با کمترین تعداد سرویس نشان داد؛ دستورهای زیر از مستندات نسخه 12 است.

📌 دیتابیس، برنامه، پروکسی، بکاپ

◀️ چهار جزء سرور
◀️ بسته رسمی یا داکر
◀️ پروکسی، SSL و WebSocket
◀️ بکاپ و ارتقا

نصب mattermost، نمودار چهار جزء سرور پیام‌رسان تیمی: PostgreSQL، سرویس اصلی، پوشه پیوست‌ها و Nginx با اتصال WebSocket

اجزای یک نصب Mattermost؛ دیتابیس، سرور، فایل‌ها و پروکسی

سرور Mattermost روی اوبونتو چهار جزء دارد. پیام‌ها و کاربران در PostgreSQL ثبت می‌شوند و برنامه تنظیماتش را از config.json می‌خواند. پیوست‌ها به پوشه data می‌روند و Nginx ترافیک HTTPS و WebSocket را به پورت 8065 می‌رساند.

وقتی WebSocket قطع است، پذیرش (Nginx)، دفتر مهمانان (PostgreSQL) و انبار چمدان (data) کار می‌کنند و هتل باز به نظر می‌رسد. فقط تلفن اتاق، همان که بی‌آنکه مهمان شماره بگیرد زنگ می‌زند، خاموش مانده و خبرها دیر می‌رسند.

پایگاه داده PostgreSQL 15 یا بالاتر

راهنمای استقرار روی Ubuntu و Debian برای نسخه 12 فقط PostgreSQL 15 به بالا را می‌پذیرد. روی اوبونتو 24.04 (نسخه 16) و 26.04 (نسخه 18) sudo apt install postgresql کافی است. اوبونتو 22.04 نسخه 14 دارد؛ آنجا مخزن PGDG را با اسکریپت postgresql.org بیفزایید یا اوبونتو را عوض کنید (تفاوت اوبونتو 26 با 24.04):

sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt install postgresql-18

بعد دیتابیس و کاربر را بسازید و رمز نمونه را عوض کنید؛ برای خطای locale، اول sudo locale-gen en_US.UTF-8:

sudo -u postgres psql
CREATE DATABASE mattermost WITH ENCODING 'UTF8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' TEMPLATE=template0;
CREATE USER mmuser WITH PASSWORD 'mmuser-password';
GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
ALTER DATABASE mattermost OWNER TO mmuser;
\c mattermost
ALTER SCHEMA public OWNER TO mmuser;
GRANT USAGE, CREATE ON SCHEMA public TO mmuser;

برنامه سرور و فایل config.json

بسته رسمی برنامه را در /opt/mattermost می‌گذارد و پیوست‌ها پیش‌فرض در زیرپوشه data آن می‌مانند. این کلیدها پیش از اولین start نوشته شوند:

  • کلید SqlSettings.DriverName با مقدار "postgres"
  • کلید SqlSettings.DataSource به شکل postgres://mmuser:<password>@<host>:5432/mattermost?sslmode=disable&connect_timeout=10
  • کلید ServiceSettings.SiteURL با نشانی عمومی، مثل https://mattermost.example.com
  • کلید ServiceSettings.ListenAddress با "127.0.0.1:8065" در مسیر APT با Nginx روی همین سرور؛ پیش‌فرض :8065 روی همه کارت‌های شبکه باز است.

اجزای یک نصب Mattermost؛ دیتابیس، سرور، فایل‌ها و پروکسی

نصب با بسته رسمی یا داکر؛ هر کدام چه چیزی را عوض می‌کند

مستندات برای نصب Mattermost چهار مسیر آورده است: بسته APT، تاربال دستی، Kubernetes و Docker Compose. روی یک سرور، APT و داکر رایج‌ترند. صفحه کانتینرها داکر را به آزمایش و توسعه محدود می‌کند، چون HA آماده ندارد.

مسیر بسته APT روی اوبونتو

curl -o- https://deb.packages.mattermost.com/repo-setup.sh | sudo bash -s mattermost
sudo apt update && sudo apt install mattermost -y
sudo install -C -m 600 -o mattermost -g mattermost \
  /opt/mattermost/config/config.defaults.json /opt/mattermost/config/config.json

حالا کلیدهای بالا را در config.json بنویسید. آرگومان mattermost برخلاف متن صفحه فقط مخزن خود Mattermost را می‌افزاید؛ اسکریپت مخزن nginx و PostgreSQL را فقط با all اضافه می‌کند. با PostgreSQL محلی، راهنما After= و BindsTo=postgresql.service را در [Unit] می‌خواهد؛ با sudo systemctl edit mattermost بنویسیدشان تا ارتقای بسته پاکشان نکند.

sudo systemctl start mattermost && curl http://localhost:8065
sudo systemctl enable mattermost.service

مسیر Docker Compose

پیش‌نیاز: Docker Engine و Docker Compose نسخه 1.28 به بالا.

git clone https://github.com/mattermost/docker && cd docker
cp env.example .env

پیش از بالا آوردن، در .env مقدار DOMAIN، رمز نمونه POSTGRES_PASSWORD=mmuser_password و APP_PORT=127.0.0.1:8065 را عوض کنید. مستندات Docker می‌گوید پورت منتشرشده از ufw رد می‌شود. نشانی 127.0.0.1 آن را به خود میزبان محدود می‌کند.

mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
sudo chown -R 2000:2000 ./volumes/app/mattermost
docker compose -f docker-compose.yml -f docker-compose.without-nginx.yml up -d

نسخه Team یا حالت Entry

صفحه نسخه‌های Mattermost می‌گوید Enterprise Edition بدون لایسنس در حالت رایگان Entry کار می‌کند: فقط ۱۰٬۰۰۰ پیام آخر دیده می‌شود و برای زیر ۵۰ نفر مناسب است. Team Edition با لایسنس MIT برای زیر ۲۵۰ کاربر فعال و بدون SSO است. ایمیج پیش‌فرض داکر Enterprise است و ایمیج Team نام mattermost-team-edition دارد. نسخه نصب‌شده در کنسول سیستم، About > Edition and License پیداست.

سیاست تحریم سازنده

بخش کشورهای تحریم‌شده در پرسش‌های متداول عمومی Mattermost می‌گوید شرکت به‌دلیل تحریم‌های دولت آمریکا، تا رفع آن‌ها به سازمان‌های این کشورها لایسنس، پشتیبانی، نرم‌افزار و به‌روزرسانی نمی‌دهد. همان بخش خواسته حتی از نسخه‌های عمومی استفاده نکنند و برای پرسش، نشانی compliance@mattermost.com را داده است.

نصب با بسته رسمی یا داکر؛ هر کدام چه چیزی را عوض می‌کند

پروکسی Nginx، SSL و اتصال WebSocket را درست کنید

پروکسی Nginx گواهی TLS را نگه می‌دارد، درخواست‌ها را به پورت 8065 می‌دهد و درخواست ارتقای WebSocket را جلو می‌فرستد. پشت پروکسی، نصب Mattermost فقط با کار آخر کامل است؛ اگر از قلم بیفتد، صفحه باز می‌شود ولی پیام‌ها زنده نمی‌رسند.

با sudo apt install nginx بسته را از مخزن اوبونتو نصب و فایل /etc/nginx/sites-available/mattermost را بسازید. نمونه زیر پیکربندی اولیه راهنمای پروکسی NGINX در مستندات Mattermost است، کوتاه‌شده و با یک خط اضافه:

upstream backend {
    server 127.0.0.1:8065;                          # [1]
    keepalive 32;
}
server {
    listen 80 default_server;
    server_name mattermost.example.com;

    location ~ /api/v[0-9]+/(users/)?websocket$ {   # [2]
        proxy_set_header Upgrade $http_upgrade;     # [3]
        proxy_set_header Connection "upgrade";      # [3]
        proxy_http_version 1.1;                     # [4]
        proxy_set_header Host $http_host;           # [5]
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 50M;                   # [6]
        proxy_read_timeout 90s;
        proxy_pass http://backend;
        # + buffers, timeouts (official file)
    }
    location / {
        proxy_set_header Connection "";             # [7]
        proxy_set_header Host $http_host;
        # + same X-Real-IP / X-Forwarded-* lines, buffers
        client_max_body_size 50M;
        proxy_read_timeout 600s;
        proxy_http_version 1.1;
        proxy_pass http://backend;
    }
}
  1. نشانی 127.0.0.1 به جای localhost.
  2. مسیر /api/v4/websocket و نسخه users آن.
  3. درخواست تغییر پروتکل.
  4. خط اضافه که نمونه اول صفحه ندارد و نمونه‌های SSL دارند. nginx پیش از 1.29.7 به آن نیاز دارد و اوبونتو نسخه 1.18 تا 1.28 را می‌دهد.
  5. هدر Host پویا؛ ناهمخوانی Origin و Host خطای 403 می‌دهد.
  6. سقف حجم پیوست، هم‌اندازه سقف فایل Mattermost.
  7. هدر Connection خالی برای اتصال keepalive به upstream.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
sudo nginx -t && sudo systemctl restart nginx

🔸 هدرهای Upgrade و Connection را چرا دستی می‌فرستیم

مستندات nginx این دو را هدر hop-by-hop می‌نامد که خودشان به سرور پشت پروکسی نمی‌رسند. سکوت ۶۰ ثانیه‌ای هم اتصال را می‌بندد و نمونه Mattermost آن را ۹۰ ثانیه کرده است.

گواهی SSL با Certbot

به گفته راهنما، sudo certbot فایل Nginx سایت انتخاب‌شده را خودش ویرایش می‌کند؛ dry-run پیش از آن رکورد DNS را می‌سنجد.

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --dry-run && sudo certbot

بعد SiteURL را با https بنویسید و سرویس را ری‌استارت کنید. آزمون آخر: پیامی از گوشی بفرستید و ببینید بی‌رفرش در مرورگر می‌آید. آمد؟ کار پروکسی تمام است.

پروکسی Nginx، SSL و اتصال WebSocket را درست کنید

بعد از ساخت تیم و کانال، بکاپ از کدام اجزا و ارتقا با چه ترتیبی؟

صفحه بکاپ و بازیابی Mattermost سه چیز می‌خواهد: دیتابیس، پوشه config که گواهی‌های SAML را هم دارد، و پوشه data اگر فایل‌ها محلی‌اند. سرویس در تمام مدت بکاپ خاموش می‌ماند تا این سه هم‌زمان بمانند.

اولین مدیر و تیم با mmctl

حساب مدیر و تیم اول را بعد از نصب Mattermost با mmctl بسازید. با ServiceSettings.EnableLocalMode روی true و یک ری‌استارت، mmctl از نسخه 10.8 بدون اطلاعات ورود کار می‌کند؛ آن را با کاربر سرور اجرا کنید:

cd /opt/mattermost/bin
sudo -u mattermost ./mmctl user create --email admin@example.com --username admin --password 'Str0ng!Pass' --system-admin
sudo -u mattermost ./mmctl team create --name office --display-name "Office"
sudo -u mattermost ./mmctl team users add office admin

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

در پوسته root (sudo -i) اجرا کنید؛ dump و config.json رمز دیتابیس را دارند و umask 077 آن‌ها را فقط برای root خواندنی می‌کند:

systemctl stop mattermost && umask 077
sudo -u postgres pg_dump mattermost > /var/backups/mm-db.sql
tar -czf /var/backups/mm-files.tar.gz -C /opt/mattermost config data
systemctl start mattermost

برای بازگردانی، دیتابیس خالی را مثل بلاک اول از template0 بسازید (مستندات PostgreSQL)، بعد:

systemctl stop mattermost
sudo -u postgres psql -X mattermost < /var/backups/mm-db.sql
tar -xzf /var/backups/mm-files.tar.gz -C /opt/mattermost
chown -R mattermost:mattermost /opt/mattermost && systemctl start mattermost

🔶 ارتقای نیمه‌کاره و نقطه برگشتش

ارتقایی که وسط مهاجرت دیتابیس بماند، با اسنپ‌شاتی که قبل از شروع از پنل سرور وب‌داده برداشته‌اید، به همان لحظه برمی‌گردد. اسنپ‌شات بکاپ داده نیست؛ مستندات Mattermost نسخه‌ای بیرون از سایت می‌خواهد.

ارتقا با بسته APT یا تگ داکر

در نصب با بسته APT، سرویس را قبل از apt upgrade متوقف کنید، چون ارتقا باینری در حال اجرا را عوض می‌کند. در داکر، استقرار را پایین بیاورید، git pull بزنید و MATTERMOST_IMAGE_TAG را عوض کنید. راهنمای ارتقا ثبت نقشه مهاجرت با mattermost db migrate --save-plan را پیشنهاد می‌کند.

⚠️ از روی چند نسخه یک‌جا نپرید

صفحه آماده‌سازی ارتقا سازگاری را فقط تا ESR قبلی تضمین می‌کند: ESR1 به ESR2 و بعد ESR3، نه ESR1 مستقیم به ESR3. پشتیبانی v10.11 ESR در ۱۵ اوت ۲۰۲۶ تمام شد.

سه پرسش اول مال پیش از نصب‌اند؛ پنجم و ششم مال شبی که پیام‌ها فقط با رفرش می‌رسند.

حداقل منابع سرور برای Mattermost چقدر است؟

برای حدود ۱۰۰۰ کاربر، یک vCPU با ۲ گیگابایت رم؛ برای ۲۰۰۰ کاربر، دو برابرِ هر دو.

فقط تا نسخه 11.11؛ نسخه 12 به glibc 2.34 نیاز دارد.

پشتیبانی MySQL از نسخه 11 در حال حذف است و MariaDB پشتیبانی نمی‌شود.

حالت Entry فقط ۱۰٬۰۰۰ پیام آخر را نشان می‌دهد؛ Team Edition کل تاریخچه را باز می‌کند، با امکانات کمتر.

اتصال WebSocket از پروکسی رد نمی‌شود؛ بلاک websocket را ببینید.

از بررسی cross-origin؛ Host را پویا بگذارید و AllowCorsFrom را با دامنه کاربران یکی کنید.

مستندات داکر را برای آزمایش و توسعه می‌داند؛ برای سرور تیمی بسته APT نزدیک‌تر است.

جمع‌بندی؛ چهار جزء، یک بکاپ سه‌تکه اجزای یک نصب Mattermost روی اوبونتو را جدا نگه دارید تا هر خطا نشانی داشته باشد. PostgreSQL باید 15 یا بالاتر باشد و روی 22.04 از مخزن PGDG بیاید. کلیدهای config.json پیش از اولین start نوشته می‌شوند و ListenAddress روی 127.0.0.1 پورت 8065 را از بیرون دور نگه می‌دارد. پیام زنده به بلاک websocket در Nginx بسته است: هدرهای Upgrade و Connection و خط proxy_http_version 1.1. بکاپ را با سرویس خاموش و umask 077 از دیتابیس و دو پوشه config و data بگیرید و ارتقا را ESR به ESR جلو ببرید. بند تحریم سازنده را پیش از تصمیم بخوانید.

🎯 قبل از نصب، انتخاب را قطعی کنید

لایسنس نسخه رایگان و منابع Mattermost، Rocket.Chat و Matrix در یک صفحه.

تیم شما چند نفر است و سرور را با بسته رسمی بالا آوردید یا داکر؟ اگر پیام‌ها هنوز فقط با رفرش می‌آیند، کدام شماره از فهرست Nginx در فایل شما نیست؟

منابع

وب داده
وب داده

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

مقاله‌ها: 275
پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *