คำตอบสั้น ๆ: สร้างระบบแชทขององค์กรที่ข้อมูลอยู่บนเซิร์ฟเวอร์ตัวเอง ไม่จำกัดประวัติข้อความ พร้อมเชื่อมกับระบบอื่นผ่าน Webhook
คู่มือนี้อธิบาย Mattermost ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
บริการแชทสำเร็จรูปแบบฟรีมักจำกัดประวัติข้อความย้อนหลัง ซึ่งเป็นปัญหาเมื่อต้องการค้นหาข้อตกลงที่คุยกันไว้เมื่อหลายเดือนก่อน Mattermost ทำงานบนเซิร์ฟเวอร์ของคุณเอง จึงเก็บประวัติได้ไม่จำกัดและข้อมูลไม่ออกนอกองค์กร
หน้าตาและการใช้งานคล้ายกับโปรแกรมแชทที่ทีมพัฒนาคุ้นเคย มีแอปสำหรับทุกแพลตฟอร์ม และเชื่อมกับระบบอื่นผ่าน Webhook ได้
สิ่งที่ต้องเตรียม
- Cloud VPS ที่มี RAM อย่างน้อย 2 GB
- โดเมนที่ชี้มาที่เซิร์ฟเวอร์
- บัญชี SMTP สำหรับส่งอีเมลเชิญและรีเซ็ตรหัสผ่าน
ขั้นตอนที่ 1: เตรียมไฟล์
sudo mkdir -p /opt/mattermost/{config,data,logs,plugins,client-plugins,bleve-indexes,db}
sudo chown -R 2000:2000 /opt/mattermost/{config,data,logs,plugins,client-plugins,bleve-indexes}
cd /opt/mattermost
sudo nano .env
DOMAIN=chat.example.com
POSTGRES_USER=mmuser
POSTGRES_PASSWORD=รหัสผ่านที่ยาวและสุ่ม
POSTGRES_DB=mattermost
sudo chmod 600 .env
sudo nano docker-compose.yml
services:
db:
image: postgres:16-alpine
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 10s
retries: 5
mattermost:
image: mattermost/mattermost-team-edition:latest
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "127.0.0.1:8065:8065"
volumes:
- ./config:/mattermost/config
- ./data:/mattermost/data
- ./logs:/mattermost/logs
- ./plugins:/mattermost/plugins
- ./client-plugins:/mattermost/client/plugins
- ./bleve-indexes:/mattermost/bleve-indexes
environment:
TZ: Asia/Bangkok
MM_SQLSETTINGS_DRIVERNAME: postgres
MM_SQLSETTINGS_DATASOURCE: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?sslmode=disable&connect_timeout=10
MM_SERVICESETTINGS_SITEURL: https://${DOMAIN}
MM_BLEVESETTINGS_INDEXDIR: /mattermost/bleve-indexes
MM_FILESETTINGS_MAXFILESIZE: 104857600
sudo docker compose up -d
sudo docker compose logs -f mattermost
ขั้นตอนที่ 2: ตั้ง Nginx และ SSL
sudo nano /etc/nginx/sites-available/mattermost
upstream mattermost {
server 127.0.0.1:8065;
keepalive 32;
}
server {
listen 80;
server_name chat.example.com;
client_max_body_size 100M;
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_pass http://mattermost;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
proxy_read_timeout 600s;
}
location / {
proxy_pass http://mattermost;
proxy_http_version 1.1;
proxy_set_header Connection "";
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;
proxy_read_timeout 600s;
}
}
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d chat.example.com --agree-tos -m [email protected] --redirect
บล็อกแยกสำหรับ WebSocket จำเป็น ไม่เช่นนั้นข้อความใหม่จะไม่ขึ้นจนกว่าจะรีเฟรชหน้า
ขั้นตอนที่ 3: ตั้งค่าครั้งแรก
เปิด https://chat.example.com บัญชีแรกที่สมัครจะกลายเป็นผู้ดูแลระบบอัตโนมัติ สร้างทีมแล้วเข้าหน้า System Console
สิ่งที่ควรตั้งทันที
- ปิดการสมัครด้วยอีเมลทั่วไป ที่ Authentication แล้ว Signup ตั้ง Enable Account Creation เป็น false แล้วเชิญคนด้วยลิงก์แทน
- จำกัดโดเมนอีเมลที่สมัครได้ เช่น
example.comเท่านั้น - เปิดการยืนยันตัวตนสองขั้นตอน
- ตั้งนโยบายเก็บข้อความย้อนหลังตามที่องค์กรกำหนด
ขั้นตอนที่ 4: ตั้งอีเมล
ใน System Console แล้ว Environment แล้ว SMTP
SMTP Server: smtp.example.com
SMTP Port: 587
Connection Security: STARTTLS
Enable SMTP Authentication: true
SMTP Username: [email protected]
SMTP Password: รหัสผ่าน
Notification From Address: [email protected]
กดปุ่ม Test Connection เพื่อยืนยัน อีเมลจำเป็นสำหรับการเชิญสมาชิกและรีเซ็ตรหัสผ่าน หากไม่ตั้งจะใช้งานลำบากมาก