在雲伺服器安裝 Mattermost

Mattermost 是開放原始碼的軟體,是企業內部溝通的軟體平台。軟體設計的原則就是企業內部溝通與協作使用。

此教學文章將會引導您安裝並擁有自己的 Mattermost。

備註

此教學將會使用到下列軟體:

  • Debian 10.3

  • Postgresql

  • Mattermost 5.21

  • Nginx 1.14.2

根據您使用的版本,步驟可能會略為不同。

步驟 1:安裝相依套件與準備環境

我們假設您已經有 建立一台雲伺服器

使用 SSH 登入主機:

$ ssh admin@1.2.3.4

切換到 root 身份,並確認系統已經是最新的版本:

$ su
# apt update
# apt upgrade

之後,請安裝 postgresql、postgresql-contrib、sudo 與 nginx,都是 Mattermost 需要使用的套件:

# apt-get install postgresql postgresql-contrib sudo nginx

同時也建議另外建立一個使用者來執行 Mattermost:

# /sbin/useradd --system --user-group mattermost

伺服器已設定完畢,接者請建立資料庫。

步驟 2:建立資料庫

在本教學中,我們使用 Postgresql 資料庫。然而,您可以使用 MySQL 資料庫。

切換到使用者 postgres 並執行 psql 指令:

# sudo --login --user postgres
$ psql

建立 mattermost 資料庫,資料庫帳號 mmuser,密碼 mmuser-password,請修改成您的專屬密碼。

postgres=# CREATE DATABASE mattermost;
postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password';
postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
postgres=# \q
postgres=# exit

資料庫建立完成,現在只需要安裝 Mattermost 即可,記得申請一個 網域名稱 或建立一個子域名。

步驟 3:安裝與設定 Mattermost

下載最新版的 Mattermost:

# wget https://releases.mattermost.com/5.21.0/mattermost-5.21.0-linux-amd64.tar.gz

解壓縮至 /opt/ 目錄:

# tar -xvzf mattermost-5.21.0-linux-amd64.tar.gz
# mv mattermost /opt

建立 /opt/mattermost/data 目錄並且設定目錄權限給我們之前建立的使用者:

# mkdir /opt/mattermost/data
# chown -R mattermost:mattermost /opt/mattermost

編輯 /opt/mattermost/config/config.json 設定檔,設定資料庫名稱與資料庫使用者與密碼。

取代此設定:

"DriverName": "mysql",

取代此設定:

"DriverName": "postgres",

取代此設定:

"DataSource": "mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",

取代此設定:

"DataSource": "postgres://mmuser:<mmuser-password>@<host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10",

切換到 /opt/mattermost 目錄,測試執行 Mattermost:

# cd /opt/mattermost
# sudo -u mattermost ./bin/mattermost

如果設定都正確,您應該可以看到類似的訊息:

{"level":"info","ts":1585299574.1884124,"caller":"app/server.go:538","msg":"Server is listening on [::]:8065","address":"[::]:8065"}

Mattermost 執行後會使用埠 8065。

接者我們需建立 Mattermost 的系統檔,這樣就可以更容易的管理 Mattermost:

# touch /lib/systemd/system/mattermost.service
# vim /lib/systemd/system/mattermost.service

將下列的內容複製到上述建立的系統檔中:

[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
Requires=postgresql.service

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

重新載入系統檔並測試:

# systemctl daemon-reload
# systemctl status mattermost.service
# systemctl start mattermost.service

檢查 Mattermost 是否建立在埠 8065:

# curl http://localhost:8065

測試完成後,啟動 Mattermost 系統檔,在您的伺服器開啟時就會自動啟動:

systemctl enable mattermost.service

步驟 4:設定 Nginx

我們假設您已經有 SSL 憑證,所以我們會開始教您設定 Nginx。

需使用 root 身份,建立檔案:

# vim /etc/nginx/sites-available/mattermost.example.com.conf

將下列設定複製到設定檔中,並且將 mattermost.example.com 變更為您的實際網址,與 SSL 憑證的路徑:

upstream backend {
 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 default_server;
  server_name   mattermost.example.com;
  return 301 https://$server_name$request_uri;
  }

 server {
   listen 443 ssl http2;
     server_name    mattermost.example.com;

     ssl on;
     ssl_certificate /path/to/fullchain.cer;
     ssl_certificate_key /path/to/mattermost.example.com.key ;
     ssl_dhparam /etc/ssl/certs/dhparam.pem;
     ssl_session_cache shared:SSL:10m;
     ssl_session_tickets off;
     ssl_protocols TLSv1.2 TLSv1.3;
     ssl_ecdh_curve sect571r1:secp521r1:brainpoolP512r1:secp384r1:prime256v1:X25519;
     ssl_ciphers EECDH+AESGCM:EECDH+CHACHA20:EECDH+AES:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256;
     ssl_prefer_server_ciphers on;
     ssl_session_timeout 1d;
     ssl_stapling on;
     ssl_stapling_verify on;
     add_header Strict-Transport-Security max-age=15768000;

 location ~ /api/v[0-9]+/(users/)?websocket$ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    client_max_body_size 50M;
    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;
    proxy_buffers 256 16k;
    proxy_buffer_size 16k;
    client_body_timeout 60;
    send_timeout 300;
    lingering_timeout 5;
    proxy_connect_timeout 90;
    proxy_send_timeout 300;
    proxy_read_timeout 90s;
    proxy_pass http://backend;
 }

 location / {
    client_max_body_size 50M;
    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;
    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://backend;
    }
}

現在,啟用網站:

# ln -s /etc/nginx/sites-available/mattermost.example.com.conf /etc/nginx/sites-enabled/mattermost.example.com

確認設定檔正確:

nginx -t

重新啟動 Nginx:

# systemctl restart nginx

若都正常順利啟動,您就可以使用您的網址登入 Mattermost。首次登入時請先建立使用者帳戶。

參考資料: