
به اشتراک بگذارید

به اشتراک بگذارید
صفحه رسمی استقرار روی اوبونتو برای حدود ۱۰۰۰ کاربر فقط ۱ 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 ثبت میشوند و برنامه تنظیماتش را از config.json میخواند. پیوستها به پوشه data میروند و Nginx ترافیک HTTPS و WebSocket را به پورت 8065 میرساند.
وقتی WebSocket قطع است، پذیرش (Nginx)، دفتر مهمانان (PostgreSQL) و انبار چمدان (data) کار میکنند و هتل باز به نظر میرسد. فقط تلفن اتاق، همان که بیآنکه مهمان شماره بگیرد زنگ میزند، خاموش مانده و خبرها دیر میرسند.
راهنمای استقرار روی 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;
بسته رسمی برنامه را در /opt/mattermost میگذارد و پیوستها پیشفرض در زیرپوشه data آن میمانند. این کلیدها پیش از اولین start نوشته شوند:
SqlSettings.DriverName با مقدار "postgres"SqlSettings.DataSource به شکل postgres://mmuser:<password>@<host>:5432/mattermost?sslmode=disable&connect_timeout=10ServiceSettings.SiteURL با نشانی عمومی، مثل https://mattermost.example.comServiceSettings.ListenAddress با "127.0.0.1:8065" در مسیر APT با Nginx روی همین سرور؛ پیشفرض :8065 روی همه کارتهای شبکه باز است.
مستندات برای نصب Mattermost چهار مسیر آورده است: بسته APT، تاربال دستی، Kubernetes و Docker Compose. روی یک سرور، APT و داکر رایجترند. صفحه کانتینرها داکر را به آزمایش و توسعه محدود میکند، چون HA آماده ندارد.
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 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
صفحه نسخههای Mattermost میگوید Enterprise Edition بدون لایسنس در حالت رایگان Entry کار میکند: فقط ۱۰٬۰۰۰ پیام آخر دیده میشود و برای زیر ۵۰ نفر مناسب است. Team Edition با لایسنس MIT برای زیر ۲۵۰ کاربر فعال و بدون SSO است. ایمیج پیشفرض داکر Enterprise است و ایمیج Team نام mattermost-team-edition دارد. نسخه نصبشده در کنسول سیستم، About > Edition and License پیداست.
بخش کشورهای تحریمشده در پرسشهای متداول عمومی Mattermost میگوید شرکت بهدلیل تحریمهای دولت آمریکا، تا رفع آنها به سازمانهای این کشورها لایسنس، پشتیبانی، نرمافزار و بهروزرسانی نمیدهد. همان بخش خواسته حتی از نسخههای عمومی استفاده نکنند و برای پرسش، نشانی compliance@mattermost.com را داده است.

پروکسی 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;
}
}
/api/v4/websocket و نسخه users آن.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 آن را ۹۰ ثانیه کرده است.
به گفته راهنما، 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 بنویسید و سرویس را ریاستارت کنید. آزمون آخر: پیامی از گوشی بفرستید و ببینید بیرفرش در مرورگر میآید. آمد؟ کار پروکسی تمام است.

صفحه بکاپ و بازیابی Mattermost سه چیز میخواهد: دیتابیس، پوشه config که گواهیهای SAML را هم دارد، و پوشه data اگر فایلها محلیاند. سرویس در تمام مدت بکاپ خاموش میماند تا این سه همزمان بمانند.
حساب مدیر و تیم اول را بعد از نصب 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 upgrade متوقف کنید، چون ارتقا باینری در حال اجرا را عوض میکند. در داکر، استقرار را پایین بیاورید، git pull بزنید و MATTERMOST_IMAGE_TAG را عوض کنید. راهنمای ارتقا ثبت نقشه مهاجرت با mattermost db migrate --save-plan را پیشنهاد میکند.
⚠️ از روی چند نسخه یکجا نپرید
صفحه آمادهسازی ارتقا سازگاری را فقط تا ESR قبلی تضمین میکند: ESR1 به ESR2 و بعد ESR3، نه ESR1 مستقیم به ESR3. پشتیبانی v10.11 ESR در ۱۵ اوت ۲۰۲۶ تمام شد.
سه پرسش اول مال پیش از نصباند؛ پنجم و ششم مال شبی که پیامها فقط با رفرش میرسند.
برای حدود ۱۰۰۰ کاربر، یک 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 در فایل شما نیست؟
منابع