Cách Cài Mattermost Trên VPS Bằng Docker, Nginx & SSL Từ A Đến Z
Tìm hiểu cách cài Mattermost trên VPS là giải pháp tối ưu giúp doanh nghiệp giải quyết triệt để bài toán rò rỉ dữ liệu nội bộ và áp lực chi phí leo thang của các dịch vụ SaaS như Slack. Thay vì phụ thuộc vào bên thứ ba, bạn hoàn toàn có thể làm […]
Tìm hiểu cách cài Mattermost trên VPS là giải pháp tối ưu giúp doanh nghiệp giải quyết triệt để bài toán rò rỉ dữ liệu nội bộ và áp lực chi phí leo thang của các dịch vụ SaaS như Slack. Thay vì phụ thuộc vào bên thứ ba, bạn hoàn toàn có thể làm chủ hạ tầng giao tiếp bảo mật với nền tảng máy chủ riêng tại ThueVPSGiaRe.vn, thiết lập không gian trò chuyện chuyên nghiệp, linh hoạt và vận hành bền bỉ. Bài viết sẽ đưa bạn đi trọn quy trình triển khai Mattermost trên VPS bằng Docker Compose, Nginx reverse proxy và SSL Let’s Encrypt, từ khâu chuẩn bị đến khi vận hành.
Tổng quan về Mattermost và lý do nên tự host chat nội bộ
Mattermost là nền tảng nhắn tin và cộng tác mã nguồn mở tự lưu trữ (self-hosted), được xây dựng bằng ngôn ngữ Go kết hợp hệ quản trị cơ sở dữ liệu cơ sở dữ liệu PostgreSQL. Nền tảng này cung cấp đầy đủ các tiện ích tương tự Slack như kênh thảo luận trực tiếp, tin nhắn riêng, luồng trao đổi, chia sẻ tệp và kết nối webhook.

Ra mắt từ năm 2015 với xuất phát điểm là công cụ nội bộ của một công ty trò chơi, Mattermost nhanh chóng phát triển thành một trong những giải pháp nhắn tin tự triển khai phổ biến nhất toàn cầu. Bản miễn phí Team Edition mang lại trải nghiệm không giới hạn lịch sử trò chuyện, số lượng kênh và tệp đính kèm. Đối với các tổ chức thuộc khối tài chính, y tế hay quốc phòng, đây là lựa chọn hàng đầu nhờ khả năng đáp ứng nghiêm ngặt các quy định về chủ quyền dữ liệu (data sovereignty).
- Bảo vệ quyền riêng tư: Toàn bộ dữ liệu nằm trên hạ tầng của bạn, loại bỏ rủi ro bị khai thác hoặc phân tích hội thoại từ các bên thứ ba.
- Đóng gói đồng nhất: Nhờ công nghệ container, toàn bộ mã nguồn Go và cơ sở dữ liệu hoạt động độc lập, hỗ trợ triển khai nhanh chóng giữa các ứng dụng self-host phổ biến trên máy chủ.
Ưu điểm vượt trội của Mattermost so với Slack
Dù Slack là tiêu chuẩn vàng trong ngành, Mattermost đang dần chiếm ưu thế trong các doanh nghiệp ưu tiên tính bảo mật và tùy biến cao:
- Kiểm soát dữ liệu tuyệt đối: Mọi tin nhắn và tài liệu được lưu trữ trên VPS của bạn, không thông qua bên thứ ba. Điều này đặc biệt quan trọng với các ngành tài chính, y tế hoặc công nghệ.
- Tối ưu hóa chi phí: Thay vì trả phí theo đầu người (per-user) hàng tháng như Slack, với Mattermost, bạn chỉ cần trả chi phí thuê VPS. Khi số lượng nhân viên tăng lên, chi phí vận hành hầu như không thay đổi.
- Khả năng tùy biến không giới hạn: Vì là mã nguồn mở, đội ngũ kỹ thuật có thể tùy chỉnh giao diện, tính năng và tích hợp sâu vào hệ thống quản lý hiện có của công ty thông qua API mạnh mẽ.
- Tính tương đồng cao: Giao diện của Mattermost được thiết kế rất giống Slack, giúp nhân viên làm quen nhanh chóng mà không cần tốn nhiều thời gian đào tạo lại.
So sánh Mattermost với Slack: Đâu là lợi thế thực tế?
Việc sử dụng các dịch vụ SaaS như Slack thường đem lại sự tiện lợi ban đầu, nhưng khi quy mô nhân sự mở rộng, chi phí tính theo từng người dùng (per-user) hàng tháng sẽ trở thành gánh nặng tài chính đáng kể. Doanh nghiệp cũng phải đối mặt với nguy cơ bị khóa chặt vào nhà cung cấp (vendor lock-in) và sự thay đổi đột ngột về biểu phí dịch vụ.

Khi chuyển sang Mattermost trên máy chủ riêng, doanh nghiệp sẽ nhận được những giá trị khác biệt:
- Tiết kiệm ngân sách: Thay vì trả tiền theo số lượng tài khoản mỗi tháng, bạn chỉ cần chi trả phí duy trì cấu hình phần cứng VPS. Khi số lượng nhân sự tăng lên, ngân sách hạ tầng gần như không biến động.
- Quyền kiểm soát máy chủ tuyệt đối: Tất cả tin nhắn văn bản, hình ảnh, tài liệu lưu hành nội bộ đều nằm trong tầm kiểm soát của quản trị viên hệ thống.
- Giao diện thân thuộc: Bố cục của Mattermost có độ tương đồng cao với Slack, hỗ trợ chuyển đổi mượt mà mà không làm gián đoạn hiệu suất làm việc của nhân sự.
- Khả năng tích hợp mở rộng: Cung cấp hệ thống REST API phong phú, cho phép kết nối sâu vào các công cụ nội bộ của công ty.
Yêu cầu cấu hình hệ thống trước khi triển khai Mattermost
Để cụm ứng dụng Mattermost cùng cơ sở dữ liệu PostgreSQL hoạt động mượt mà, hạn chế tình trạng máy chủ bị đầy tài nguyên RAM và CPU khi có nhiều phiên kết nối cùng lúc, bạn nên lựa chọn thông số phần cứng phù hợp:
| Tài nguyên | Mức tối thiểu | Khuyến nghị (Production) |
|---|---|---|
| Hệ điều hành | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
| Bộ vi xử lý (CPU) | 2 Cores | 4 Cores trở lên |
| Bộ nhớ RAM | 4 GB | 8 GB |
| Ổ cứng lưu trữ | 20 GB SSD | 50 GB SSD (NVMe) |
| Cấu hình mạng | Bản ghi A trỏ về IP VPS | Subdomain chuyên dụng (ví dụ: chat.tenmien.com) |
Bên cạnh phần cứng, bạn cần có quyền tài khoản root hoặc sudo. Hãy đảm bảo bạn đã thực hiện trỏ tên miền về địa chỉ IP của VPS từ trước, bởi công cụ cấp chứng chỉ SSL Certbot bắt buộc phải xác thực được tên miền trên Internet.
Hướng dẫn từng bước cài đặt Mattermost bằng Docker & Nginx
Quy trình dưới đây sử dụng ngăn xếp Docker hiện đại kết hợp Nginx làm Reverse Proxy, giúp chuyển tiếp các gói tin WebSocket nhanh chóng và hỗ trợ bảo mật SSL tự động.

Bước 1: Cập nhật hệ thống máy chủ
Trước hết, hãy dùng giao thức kết nối truy cập SSH vào Linux và nâng cấp tất cả các gói phần mềm lên phiên bản mới nhất:
sudo apt-get update && sudo apt-get upgrade -y
Nếu hệ thống cập nhật hạt nhân Linux Kernel, hãy khởi động lại máy chủ để nạp trạng thái mới:
sudo reboot
Bước 2: Cài đặt Docker Engine và Docker Compose
Kho lưu trữ mặc định của hệ điều hành có thể chứa phiên bản container cũ. Bạn nên tham khảo quy trình cấu hình chuẩn theo tài liệu cài đặt Docker Engine trên hệ điều hành Ubuntu để lấy gói cài đặt từ kho chính thức:
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Thêm tài khoản hiện tại vào nhóm quản trị Docker để thao tác lệnh mà không cần quyền sudo liên tục:
sudo usermod -aG docker $USER
newgrp docker
Kiểm tra lại trạng thái cài đặt của Docker và Docker Compose:
docker --version
docker compose version
Bước 3: Thiết lập tường lửa UFW
Thiết lập bảo vệ mạng máy chủ bằng việc cấu hình tường lửa UFW mở cổng kết nối nhằm cho phép lưu lượng SSH, HTTP và HTTPS:
sudo ufw allow OpenSSH
sudo ufw allow "Nginx Full"
sudo ufw enable
Xác nhận lại danh sách quy tắc đang hoạt động:
sudo ufw status
Lưu ý: Mattermost chạy ngầm trên cổng 8065 nhưng chỉ liên kết với địa chỉ loopback nội bộ 127.0.0.1, do đó bạn không cần mở cổng 8065 ra Internet. Toàn bộ lưu lượng truy cập công khai sẽ đi qua Nginx.
Bước 4: Tạo thư mục chứa dự án
Khởi tạo một thư mục riêng biệt để quản lý cấu hình và phân quyền sở hữu cho tài khoản hiện tại:
sudo mkdir -p /opt/mattermost
sudo chown $USER:$USER /opt/mattermost
cd /opt/mattermost
Bước 5: Thiết lập tệp biến môi trường (.env)
Để đảm bảo tính bảo mật và dễ quản lý thông số, tạo tệp .env để lưu thông tin cơ sở dữ liệu:
nano /opt/mattermost/.env
Dán nội dung sau vào và thay thế mật khẩu cũng như tên miền của bạn:
POSTGRES_USER=mattermost
POSTGRES_PASSWORD=mat_khau_ngau_nhien_rat_manh
POSTGRES_DB=mattermost
SITE_URL=https://chat.yourdomain.com
Lưu tệp bằng tổ hợp Ctrl+O, nhấn Enter và thoát bằng Ctrl+X. Sau đó, phân quyền chặt chẽ để chỉ tài khoản hiện tại có quyền đọc:
chmod 600 /opt/mattermost/.env
Bước 6: Khởi tạo tệp cấu hình docker-compose.yml
Tạo tệp điều phối vùng chứa tại thư mục dự án:
nano /opt/mattermost/docker-compose.yml
Nhập toàn bộ cấu hình container bên dưới:
version: "3.9"
services:
postgres:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
mattermost:
image: mattermost/mattermost-team-edition:9
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
ports:
- "127.0.0.1:8065:8065"
environment:
MM_SQLSETTINGS_DRIVERNAME: postgres
MM_SQLSETTINGS_DATASOURCE: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable
MM_SERVICESETTINGS_SITEURL: ${SITE_URL}
MM_BLEVESETTINGS_INDEXDIR: /mattermost/bleve-indexes
volumes:
- mattermost-config:/mattermost/config
- mattermost-data:/mattermost/data
- mattermost-logs:/mattermost/logs
- mattermost-plugins:/mattermost/plugins
- mattermost-client-plugins:/mattermost/client/plugins
- mattermost-bleve:/mattermost/bleve-indexes
ulimits:
nofile:
soft: 49152
hard: 49152
volumes:
postgres-data:
mattermost-config:
mattermost-data:
mattermost-logs:
mattermost-plugins:
mattermost-client-plugins:
mattermost-bleve:
Các thông số kỹ thuật cần chú ý trong cấu hình:
- Cơ chế khởi động an toàn (Healthcheck): Điều kiện
service_healthyngăn chặn tình trạng xung đột khởi động (race condition), đảm bảo Mattermost chỉ vận hành khi cơ sở dữ liệu PostgreSQL đã sẵn sàng. - Giới hạn lắng nghe nội bộ: Cổng 8065 gắn với
127.0.0.1ngăn việc truy cập trực tiếp từ mạng Internet. - Mở rộng giới hạn tệp (ulimits): Mức 49,152 tệp mở giúp hệ thống duy trì hàng nghìn kết nối WebSocket cùng lúc mà không bị đứt đoạn.
Bước 7: Kích hoạt Mattermost
Khởi động các dịch vụ chạy ngầm thông qua lệnh Compose:
docker compose up -d
Kiểm tra trạng thái container xem cả hai dịch vụ đã ở trạng thái chạy ổn định hay chưa:
docker compose ps
Theo dõi tệp nhật ký hệ thống để xác nhận máy chủ đã hoạt động hoàn toàn:
docker compose logs mattermost --follow
Khi màn hình xuất hiện thông báo Server is listening on :8065, bạn có thể nhấn Ctrl+C để thoát luồng theo dõi.
Bước 8: Cài đặt và cấu hình máy chủ Nginx
Cài đặt phần mềm máy chủ chuyển tiếp web server Nginx tốc độ cao để xử lý chuyển hướng tên miền:
sudo apt-get install -y nginx
Khởi tạo khối cấu hình HTTP cơ bản để phục vụ việc xác thực tên miền khi cấp chứng chỉ SSL:
sudo nano /etc/nginx/sites-available/mattermost
Thêm khối cấu hình mẫu, thay chat.yourdomain.com bằng tên miền thực tế của bạn:
server {
listen 80;
server_name chat.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8065;
proxy_set_header Host $host;
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;
}
}
Kích hoạt cấu hình, kiểm tra cú pháp và tải lại Nginx:
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Bước 9: Thiết lập chứng chỉ bảo mật SSL Let’s Encrypt
Cài đặt tiện ích Certbot và thực hiện kích hoạt chứng chỉ SSL Let’s Encrypt bằng Certbot hoàn toàn miễn phí:
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d chat.yourdomain.com
Khi màn hình hiển thị lời nhắc chuyển hướng HTTP sang HTTPS, hãy chọn lựa chọn số 2 (Redirect). Tiếp theo, kiểm tra tiến trình tự động gia hạn chứng chỉ:
sudo systemctl status certbot.timer
Bước 10: Tối ưu Nginx cho WebSocket và bộ nhớ đệm Cache
Cấu hình cơ bản của Certbot chưa hỗ trợ truyền dữ liệu theo thời gian thực (WebSocket) và bộ nhớ đệm. Bạn cần mở lại tệp cấu hình Nginx để nâng cấp toàn diện:
sudo nano /etc/nginx/sites-available/mattermost
Thay thế toàn bộ nội dung tệp bằng đoạn mã tối ưu hóa chuẩn sau:
upstream mattermost {
server 127.0.0.1:8065;
keepalive 32;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
server {
listen 80;
server_name chat.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name chat.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/chat.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/chat.yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# Kết nối WebSocket phục vụ gửi tin nhắn tức thời
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
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;
proxy_set_header X-Frame-Options SAMEORIGIN;
client_max_body_size 50M;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 90s;
proxy_send_timeout 300s;
proxy_connect_timeout 90s;
proxy_pass http://mattermost;
}
# Xử lý lưu lượng web thông thường và bộ nhớ đệm
location / {
proxy_set_header Connection "";
proxy_set_header Host $http_host;
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;
proxy_set_header X-Frame-Options SAMEORIGIN;
client_max_body_size 50M;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache mattermost_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_http_version 1.1;
proxy_pass http://mattermost;
}
}
Kiểm tra và áp dụng cấu hình mới:
sudo nginx -t
sudo systemctl reload nginx
Khối định tuyến WebSocket chuyên biệt sử dụng biểu thức chính quy (regex) để khớp với các đường dẫn API thời gian thực. Nếu thiếu thiết lập này, tin nhắn mới sẽ không tự hiển thị trừ khi người dùng nhấn F5 làm mới lại trang web.
Bước 11: Hoàn tất thiết lập ban đầu trên trình duyệt
Truy cập vào địa chỉ https://chat.yourdomain.com trên trình duyệt web để tiến hành các thao tác khởi tạo cuối cùng:
- Tạo tài khoản quản trị (System Administrator): Thiết lập địa chỉ email quản trị và đặt mật khẩu có độ phức tạp cao.
- Đặt tên tổ chức: Điền tên công ty hoặc nhóm làm việc và tạo không gian làm việc (workspace) đầu tiên.
- Mời thành viên: Bạn có thể gửi lời mời tham gia ngay hoặc bỏ qua bước này để cấu hình thêm trong bảng điều khiển Admin Console.
Cách cập nhật phiên bản Mattermost mới an toàn
Nhờ việc đóng gói ứng dụng qua Docker, việc cập nhật Mattermost lên bản vá mới được thực hiện vô cùng đơn giản chỉ với hai câu lệnh tại thư mục dự án:
cd /opt/mattermost
docker compose pull
docker compose up -d
Lệnh docker compose pull sẽ tải về bản dựng mới nhất theo thẻ phiên bản đã chọn, trong khi docker compose up -d tiến hành tái tạo lại container mà vẫn giữ nguyên dữ liệu trên các ổ đĩa Docker Volume. Mattermost sẽ tự động thực hiện di chuyển cấu trúc bảng dữ liệu (schema migration) khi khởi động. Đối với các đợt nâng cấp phiên bản lớn (major upgrade), bạn nên tham khảo tài liệu hướng dẫn nâng cấp của hãng để rà soát thay đổi quan trọng trước khi chạy.
Tổng hợp lỗi hay gặp khi chạy Mattermost trên VPS và cách xử lý
Dưới đây là năm sự cố xuất hiện nhiều nhất khi vận hành Mattermost trên VPS, kèm cách chẩn đoán nhanh và hướng xử lý tương ứng.
Container Mattermost liên tục khởi động lại
Một vòng lặp restart hầu như luôn trỏ về lỗi kết nối database. Xem log của container ngay lập tức:
docker compose logs mattermost
Tìm các thông báo dạng pq: password authentication failed hoặc dial tcp: connection refused. Loại đầu nghĩa là thông tin đăng nhập không khớp; loại hai nghĩa là PostgreSQL chưa sẵn sàng khi Mattermost cố kết nối — hiếm khi xảy ra nhờ cơ chế healthcheck nhưng vẫn có thể trên hạ tầng yếu. Xác nhận các giá trị trong file .env chính xác rồi khởi động lại stack:
docker compose down
docker compose up -d
Nếu thông tin đăng nhập trông đã đúng, hãy kiểm tra lại chuỗi MM_SQLSETTINGS_DATASOURCE trong file Compose. Chỉ một ký tự sai vị trí trong connection string đó cũng tạo ra chính xác vòng lặp restart này.
Tin nhắn chỉ hiện sau khi tải lại trang
Nhắn tin thời gian thực phụ thuộc hoàn toàn vào một kết nối WebSocket bền vững. Nếu tin nhắn mới chỉ xuất hiện sau khi người dùng chủ động refresh, Nginx đang không proxy đúng endpoint WebSocket. Xác nhận khối location WebSocket — với header Upgrade và Connection — tồn tại trong cấu hình Nginx, rồi reload sau mỗi thay đổi:
sudo nginx -t && sudo systemctl reload nginx
Bạn có thể xác minh kết nối WebSocket trực tiếp trên trình duyệt: mở Developer Tools, vào tab Network, lọc theo WS rồi tải lại trang Mattermost. Một kết nối WebSocket hoạt động tới tên miền của bạn sẽ xuất hiện ngay lập tức.
Lỗi 502 Bad Gateway khi mở Mattermost
Lỗi 502 nghĩa là Nginx vẫn đang chạy nhưng không nhận được phản hồi nào từ Mattermost. Kiểm tra xem các container có thực sự sống không:
docker compose ps
Nếu Mattermost hiển thị unhealthy hoặc exited, log container sẽ giải thích nguyên nhân. Đồng thời xác nhận khối upstream trong cấu hình Nginx trỏ tới 127.0.0.1:8065 và các chỉ thị proxy_pass tham chiếu http://mattermost khớp tên upstream. Sai lệch cổng sẽ sinh ra lỗi 502 mỗi lần truy cập. Nếu muốn đào sâu thêm, bài cách khắc phục lỗi 502 Bad Gateway tổng hợp chi tiết các nguyên nhân tương tự.
Gia hạn chứng chỉ SSL thất bại
Chứng chỉ Let’s Encrypt chỉ có hạn 90 ngày. Timer systemd của Certbot lo phần gia hạn tự động, nhưng nó có thể thất bại nếu cổng 80 bị chặn hoặc Nginx đang dừng đúng lúc timer kích hoạt. Chạy dry-run để chẩn đoán mà không đụng tới chứng chỉ đang sử dụng:
sudo certbot renew --dry-run
Nếu dry-run thất bại, xác nhận cổng 80 đang mở (sudo ufw status) và Nginx đang hoạt động (sudo systemctl status nginx). Certbot cần cổng 80 truy cập được từ internet để hoàn tất HTTP-01 challenge trong quá trình gia hạn.
Tải file lên thất bại mà không có thông báo
Lỗi tải lên “âm thầm” hầu như luôn bắt nguồn từ sự lệch giới hạn dung lượng giữa Nginx và Mattermost. Chỉ thị client_max_body_size của Nginx đóng vai trò cổng chặn — nếu đặt thấp hơn giới hạn tải lên cấu hình trong Mattermost, tệp lớn sẽ bị chặn ngay ở tầng Nginx trước khi kịp tới ứng dụng, và người dùng không thấy bất kỳ báo cáo hữu ích nào.
Cấu hình trong bài đã đặt client_max_body_size 50M ở cả hai khối location. Muốn nâng giới hạn, hãy cập nhật đồng thời cấu hình Nginx và biến môi trường MM_FILESETTINGS_MAXFILESIZE trong file Compose (giá trị tính bằng byte), rồi áp dụng cả hai thay đổi:
docker compose up -d
sudo systemctl reload nginx
Việc nên làm tiếp sau khi Mattermost đã lên sóng
Mattermost chạy được chỉ là điểm khởi đầu. Dưới đây là các hướng mở rộng đáng làm ngay sau khi hệ thống ổn định:
- Gắn SMTP cho thông báo email: không có email, người dùng không thể đặt lại mật khẩu hay nhận bản tóm tắt tin nhắn. Điền thông tin SMTP của bạn tại System Console > Environment > SMTP để bật cả hai tính năng.
- Kết nối công cụ đang dùng: Mattermost có sẵn tích hợp gốc cho GitHub, GitLab, Jira, PagerDuty và Zapier; incoming webhook cho phép đẩy cảnh báo từ bất kỳ hệ thống nào có thể tạo một HTTP request.
- Bật Mattermost Calls: plugin này mang gọi thoại và họp video vào ngay trong kênh. Nhóm nhỏ dùng TURN server tích hợp sẵn, các triển khai lớn hơn nên cân nhắc một instance RTCD riêng.
- Khai thác Playbooks: Mattermost Playbooks biến xử lý sự cố thành quy trình có cấu trúc, lặp lại được — định nghĩa runbook, giao việc, theo dõi tiến độ giải quyết mà không rời khỏi giao diện chat.
- Lên lịch backup database: toàn bộ dữ liệu nằm trong Docker named volumes và container PostgreSQL. Hãy xuất
pg_dumpđịnh kỳ rồi sao chép ra kho lưu trữ từ xa để phục hồi thảm họa; bạn có thể tham khảo cách backup dữ liệu VPS để dựng quy trình tự động.
Câu hỏi thường gặp (FAQ)
Mattermost có thực sự miễn phí để dùng lâu dài?
Có. Bản Team Edition miễn phí đã phủ đủ hầu hết nhu cầu thực tế: lịch sử tin nhắn không giới hạn, kênh thảo luận, tin nhắn riêng, tìm kiếm toàn văn, chia sẻ tệp, webhook và kho tích hợp. Bản Enterprise trả phí chỉ chồng thêm xác thực LDAP/SAML, xuất dữ liệu tuân thủ và báo cáo nâng cao — có giá trị khi quy mô lớn nhưng không bắt buộc khi mới bắt đầu.
VPS tối thiểu cần cấu hình nào để chạy Mattermost?
Theo khuyến nghị trong bài: Ubuntu 22.04 LTS (tốt nhất là 24.04 LTS), 2 core CPU, 4 GB RAM, 20 GB SSD cùng bản ghi A trỏ tên miền về máy chủ. Với nhóm đông người dùng đồng thời, nâng lên 4 core – 8 GB RAM – 50 GB SSD sẽ dư dả hơn cho dữ liệu tệp và index tìm kiếm.
Vì sao tin nhắn chỉ xuất hiện sau khi tải lại trang?
Bởi Nginx chưa proxy đúng endpoint WebSocket. Bạn cần khối location WebSocket với header Upgrade và Connection như ở Bước 10, rồi chạy sudo nginx -t && sudo systemctl reload nginx. Kiểm chứng nhanh bằng cách mở Developer Tools → tab Network → lọc WS và tải lại trang Mattermost: kết nối WebSocket tới tên miền của bạn sẽ hiện ngay nếu mọi thứ hoạt động đúng.
Chứng chỉ SSL có phải gia hạn thủ công mỗi 90 ngày?
Không cần. Chứng chỉ Let’s Encrypt hết hạn sau 90 ngày nhưng timer systemd của Certbot sẽ tự động gia hạn. Bạn có thể kiểm tra bằng sudo certbot renew --dry-run; nếu dry-run thất bại, hãy xác nhận cổng 80 đang mở (sudo ufw status) và Nginx đang chạy (sudo systemctl status nginx), vì HTTP-01 challenge yêu cầu cổng 80 truy cập được từ internet.
Kết luận: Mattermost tự chủ ngay trên hạ tầng của bạn
Vận hành Mattermost trên VPS riêng nghĩa là toàn bộ hội thoại của nhóm nằm đúng nơi nó thuộc về — trên hạ tầng do bạn kiểm soát, không có phí theo đầu người phình to khi tuyển thêm người, và không có nhà cung cấp nào tự tiện đổi giá hay bỏ tính năng giữa chừng. Nhìn lại cách cài Mattermost trên VPS vừa trình bày, ba điều cốt lõi cần nhớ gồm: chuẩn bị VPS Ubuntu đạt cấu hình tối thiểu cùng bản ghi DNS trước khi bắt đầu; triển khai bằng Docker Compose với Nginx reverse proxy đã tối ưu WebSocket; và duy trì thói quen cập nhật, backup dữ liệu định kỳ. Khi tổ chức lớn lên, kiến trúc của Mattermost còn sẵn sàng hỗ trợ high-availability clustering — một hướng đáng khám phá. Nếu chưa có máy chủ, hãy chọn một gói VPS phù hợp và bắt tay làm theo từng bước ngay hôm nay.
Cần một VPS giá rẻ để bắt đầu?
Chọn cấu hình vừa đủ nhu cầu, ưu tiên chi phí dễ tiếp cận và khả năng quản trị riêng.
Nội dung bài viết chỉ mang tính tham khảo. Các lệnh, cấu hình và phiên bản phần mềm (Docker, Mattermost, Nginx, Certbot) có thể thay đổi theo hệ điều hành, phiên bản và môi trường thực tế của từng người dùng. Trước khi áp dụng cho môi trường production, bạn nên kiểm thử trên môi trường thử nghiệm, sao lưu dữ liệu đầy đủ và tự đánh giá rủi ro liên quan.



