DEV Community

Cover image for 在本機安裝 Mattermost:打造自主控制的團隊通訊平台
Let's Write
Let's Write

Posted on • Originally published at letswrite.tw

在本機安裝 Mattermost:打造自主控制的團隊通訊平台

本篇要解決的問題

工作上,各家公司用的通訊軟體,常聽到的是以下三種:LINE、Teams、Slack。

如果稍微比較一下,用起來的經驗如下(以下為 August 個人體感,不代表本台立場 XD):

LINE、Telegram:適合閒聊

這兩個工具雖然方便,尤其台灣人幾乎都有 LINE,但主要設計給日常聊天使用。

面對工程團隊需要更結構化的溝通方式時,比如:頻道分類、討論串、檔案管理、發送程式碼……等功能就不太行。

還容易讓生活 + 工作的訊息都摻在一起作灑尿牛丸,重要資訊很容易被淹沒。

Slack、Teams:貴

Slack 夠強大,也是專門針對開發團隊用,但免費版只能保留最近 90 天的訊息記錄,而且發送訊息的數量每個月有上限,想要完整保存對話歷史就必須付費。

對小團隊或個人專案來說,魔法小卡沒辦法說發動就發動。

Microsoft Teams 需要企業或教育機構的授權才能充分使用,個人或小團隊要獨立使用並不方便,比如想要用 Webhook,家庭方案還無法使用。

Discord:資料及傳檔限制

雖然 Discord 免費且功能豐富,但所有資料都存放在 Discord 的伺服器上,對於重視資料隱私或需要完全掌控資料的人來說,這是一個重要的考量點。

傳檔案時,如果是免費方案有 10 MB 的限制,想傳大一點的檔案就會被擋下來。

因為使用上述幾個通訊軟體的體感,在詢問了 Gemini 3 Pro 有沒有更適合的工具後,才知道了今天要筆記的這個 Mattermost。

Mattermost 優勢

  1. 開源,可以完全安裝在自己的電腦或伺服器上。
  2. 類似 Slack 的使用方式,支援頻道分類、討論串、檔案分享等功能,還能透過外掛擴充更多能力。
  3. 可以整合 Webhook、機器人帳號。
  4. 所有資料都在本地,不用擔心第三方服務終止或資料外洩的問題。

本機安裝 Mattermost

事前準備

在開始之前,請確認電腦已經安裝:

  • Docker Desktop(包含 Docker Compose)
  • 一個行動硬碟(選用,用來存放圖片和檔案)

Docker Compose 設定檔

建立一個工作目錄,在裡面新增 docker-compose.yml 檔案。

可以直接複製貼上以下:

services:
  db:
    image: postgres:16-alpine
    restart: "no"
    volumes:
      - ./volumes/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=mattermost
      - POSTGRES_USER=mmuser
      - POSTGRES_PASSWORD=mmuser_password

  mattermost:
    depends_on:
      - db
    image: mattermost/mattermost-team-edition:latest
    restart: "no"
    security_opt:
      - no-new-privileges:true
    pids_limit: 200
    volumes:
      - ./volumes/config:/mattermost/config:rw
      - ./volumes/logs:/mattermost/logs:rw
      - ./volumes/plugins:/mattermost/plugins:rw
      - ./volumes/client/plugins:/mattermost/client/plugins:rw
      - /Volumes/backup/mattermost_data:/mattermost/data:rw
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MM_SQLSETTINGS_DRIVERNAME=postgres
      - MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable&connect_timeout=10
      - MM_SERVICESETTINGS_SITEURL=http://localhost:8065
      - MM_PLUGINSETTINGS_ENABLEUPLOADS=true
      - MM_PLUGINSETTINGS_ENABLEMARKETPLACE=true
      - MM_SERVICESETTINGS_ALLOWCORSFROM=*
      - MM_WEBSERVER_WEBSOCKETSECUREPORT=8065
      - MM_SERVICESETTINGS_ENABLEINSECUREOUTGOINGCONNECTIONS=true
      - MM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS=true
      - MM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER=https://push-test.mattermost.com
      - MM_EMAILSETTINGS_PUSHNOTIFICATIONCONTENTS=full
      - MM_LOGSETTINGS_FILEMAXAGEDAYS=30
      - MM_LOGSETTINGS_FILECOMPRESS=true

    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"

    ports:
      - "8065:8065"
Enter fullscreen mode Exit fullscreen mode

以下逐段說明設定內容:

資料庫服務

db:
  image: postgres:16-alpine
  restart: "no"
  volumes:
    - ./volumes/db:/var/lib/postgresql/data
  environment:
    - POSTGRES_DB=mattermost
    - POSTGRES_USER=mmuser
    - POSTGRES_PASSWORD=mmuser_password
Enter fullscreen mode Exit fullscreen mode

這段設定建立了 PostgreSQL 16 資料庫容器。使用輕量的 Alpine Linux 版本可以減少映像檔大小。

restart: "no" 表示電腦重開機後不會自動啟動,需要手動執行啟動指令,主要是避免重新開機時,行動硬碟沒有插在主機上。

資料庫檔案存放在 ./volumes/db 目錄,這樣即使容器被刪除,資料也不會遺失。

環境變數設定了資料庫名稱、使用者名稱和密碼,這些資訊稍後會被 Mattermost 用來連線。

Mattermost 服務

mattermost:
  depends_on:
    - db
  image: mattermost/mattermost-team-edition:latest
  restart: "no"
  security_opt:
    - no-new-privileges:true
  pids_limit: 200
Enter fullscreen mode Exit fullscreen mode

Mattermost 服務依賴資料庫,Docker 會確保資料庫先啟動。

使用 Team Edition 免費版本,已經足夠小型團隊使用。

security_optpids_limit 是安全性設定,限制容器的權限提升和程序數量。

儲存策略

volumes:
  - ./volumes/config:/mattermost/config:rw
  - ./volumes/logs:/mattermost/logs:rw
  - ./volumes/plugins:/mattermost/plugins:rw
  - ./volumes/client/plugins:/mattermost/client/plugins:rw
  - /Volumes/backup/mattermost_data:/mattermost/data:rw
  - /etc/localtime:/etc/localtime:ro
Enter fullscreen mode Exit fullscreen mode

這裡採用混合儲存策略,解決 Mattermost 不刪檔特性帶來的空間問題:

存放在本機的檔案

設定檔(config)、日誌(logs)、外掛(plugins)都存在本機的 ./volumes/ 目錄。這些檔案體積小且需要頻繁讀取,放在 Volume 可以確保系統反應速度,避免操作介面卡頓。

存放在行動硬碟的靜態資源

圖片和檔案(data)存在行動硬碟的 /Volumes/backup/mattermost_data 路徑。這是整個設定的關鍵考量點:Mattermost 預設不會刪除任何上傳的檔案,即使訊息被刪除,檔案依然保留在伺服器上。

隨著時間累積,照片、文件、影片……會越來越多,如果全部存在本機,很快就會面臨空間不足的問題。

將這些靜態資源檔案改存到行動硬碟,既能完整保留所有歷史檔案,又不會壓縮主機空間。

請記得修改硬碟路徑:將 /Volumes/backup 改成行動硬碟在 Mac 上的實際掛載位置。

在 Finder 中打開「前往」→「電腦」就能看到硬碟名稱。如果你的行動硬碟名稱是「My Passport」,路徑就是 /Volumes/My Passport/mattermost_data

最後一行掛載系統時間檔案,確保容器內的時間與主機同步。

資料庫連線設定

environment:
  - MM_SQLSETTINGS_DRIVERNAME=postgres
  - MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable&connect_timeout=10
Enter fullscreen mode Exit fullscreen mode

指定使用 PostgreSQL 資料庫,連線字串包含使用者名稱、密碼、主機名稱(db 就是前面定義的資料庫服務名稱)、Port 和資料庫名稱。在區域網路環境下,為了簡化設定,這裡停用了 SSL 加密。

網站網址設定

- MM_SERVICESETTINGS_SITEURL=http://localhost:8065
Enter fullscreen mode Exit fullscreen mode

這是 Mattermost 對外的網址。如果你只在本機使用,就維持 http://localhost:8065

如果要讓區域網路內其他裝置存取,可以設定為你電腦的區域網路 IP,例如 http://192.168.1.100:8065

如果想用 Cloudflare Tunnel 進行內網穿透,可以設定為對外的網址,例如 https://mattermost.yourdomain.com

外掛市集功能

- MM_PLUGINSETTINGS_ENABLEUPLOADS=true
- MM_PLUGINSETTINGS_ENABLEMARKETPLACE=true
Enter fullscreen mode Exit fullscreen mode

開啟外掛上傳和市集功能,這樣才能安裝 Boards、Todo 等擴充功能。

預設情況下這些功能可能被關閉,需要明確啟用。

WebSocket 連線設定

- MM_SERVICESETTINGS_ALLOWCORSFROM=*
- MM_WEBSERVER_WEBSOCKETSECUREPORT=8065
- MM_SERVICESETTINGS_ENABLEINSECUREOUTGOINGCONNECTIONS=true
Enter fullscreen mode Exit fullscreen mode

WebSocket 是實現即時訊息的關鍵技術,而且後續使用 Boards 看版功能時也需要。

ALLOWCORSFROM=* 允許所有來源的跨域請求,方便在不同裝置上存取。

ENABLEINSECUREOUTGOINGCONNECTIONS 允許 Mattermost 連接到沒有 HTTPS 的外部服務,這在測試環境中很實用。

推播通知設定

- MM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS=true
- MM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER=https://push-test.mattermost.com
- MM_EMAILSETTINGS_PUSHNOTIFICATIONCONTENTS=full
Enter fullscreen mode Exit fullscreen mode

開啟推播通知功能,使用 Mattermost 官方提供的測試推播伺服器(TPNS)。這是免費服務,讓你的手機 App 能收到即時通知。

PUSHNOTIFICATIONCONTENTS=full 表示通知會顯示發訊者姓名和訊息內容;如果改成 generic 則只顯示「您有一則新訊息」。

日誌管理

- MM_LOGSETTINGS_FILEMAXAGEDAYS=30
- MM_LOGSETTINGS_FILECOMPRESS=true

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "5"
Enter fullscreen mode Exit fullscreen mode

Mattermost 內部的日誌檔案會保留 30 天,超過後自動壓縮舊檔案。

Docker 容器輸出的日誌則限制每個檔案最大 10MB,最多保留 5 個檔案,避免日誌無限膨脹佔用硬碟空間。

對外 Port

ports:
  - "8065:8065"
Enter fullscreen mode Exit fullscreen mode

將容器內的 8065 Port 對應到主機的 8065 Port。

啟動後可以透過 http://localhost:8065 存取 Mattermost。

啟動服務

docker-compose.yml 所在目錄執行:

docker compose up -d
Enter fullscreen mode Exit fullscreen mode

-d 參數表示在背景執行。第一次啟動會需要下載映像檔,可能需要幾分鐘時間。

啟動完成後,打開瀏覽器前往 http://localhost:8065,就會看到 Mattermost 的初始設定頁面。按照指示建立管理員帳號、設定團隊名稱,就能開始使用了。

停止服務

當不需要使用時,可以執行:

docker compose down
Enter fullscreen mode Exit fullscreen mode

這會停止並移除容器,但所有資料都保留在 volumes 目錄中,下次啟動時會自動載入。


切換介面語言為繁體中文

預設安裝後,Mattermost 的介面是英文。如果想改成繁體中文,只需要簡單幾個步驟:

  1. 點擊畫面右上角的齒輪圖示(Settings)
  2. 在設定選單中找到「Display」(顯示設定)
  3. 往下捲動到底部,會看到「Language」(語言)選項
  4. 點擊「Edit」,從下拉選單中選擇「繁體中文(台灣)」
  5. 點擊「Save」儲存

介面會立即切換成繁體中文,所有選單、按鈕、提示訊息都會變成中文顯示。


安裝擴充功能

Mattermost 跟 LINE 很不同的地方,在於可以安裝另外的擴充功能。

以下介紹兩個實用的擴充功能。

Focalboard

Focalboard 是內建的看板工具,類似 Jira 或 Notion,可以用來管理專案任務、追蹤進度。

安裝步驟:

  1. 進到 Focalboard 的 GitHub Releases 頁面。
  2. 下載最新版本的檔案,因為 Docker 是 Linux,要選擇 mattermost-plugin-focalboard-vxxxx-linux-xxx.tar.gz 的檔案。
  3. Mattermost 點擊左上角的 Mattermost Logo,選擇「System Console」(系統控制台)。
  4. 在左側選單找到「Plugins」(擴充程式)→「Plugin Management」(擴充程式管理)。
  5. 在上傳擴充程式中,點擊「選擇檔案」,接著選擇剛剛下載的檔案後,點擊「上傳」。
  6. 安裝完成後,左側選單會出現「Mattermost Boards」的選項,點擊進去,再啟用擴充程式功能。

使用 Boards:

回到主畫面,點擊左上角的 Mattermost Logo 會出現「Boards」圖示。點擊後可以建立新的看板。

選擇範本(如待辦清單、專案追蹤、內容行事曆等),或從空白看板開始。

看板支援卡片拖曳、自訂欄位、篩選排序等功能。

Todo

Todo 外掛可以讓你在對話中直接建立待辦事項,並在側邊欄追蹤所有未完成的任務。

安裝步驟:

安裝方式跟上面的 Boards 相同。

Todo 的 GitHub Releases

使用 Todo:

在任何頻道或私訊中,右側會出現更多 Todo 的圖示(三個點 + 三條線)。

點擊後選擇「Add Todo」。

實用技巧:

你可以在任何頻道輸入 /todo add [任務內容] 快速建立待辦事項,不需要依附在特定訊息上。例如:

/todo add 下週一前完成專案提案
Enter fullscreen mode Exit fullscreen mode

4 使用整合的機器人帳號

機器人帳號可以讓 Mattermost 與其他系統整合,執行像是自動化通知等的訊息發送。

建立機器人帳號

步驟:

  1. 進入「System Console」(系統控製台)→「Integrations」(整合)→「Bot Accounts」(機器人帳號)。
  2. 點擊「Add Bot Account」(新增機器人帳號)。
  3. 填寫機器人資訊:
    • Username:例如 notification-bot
    • Bot Icon:上傳機器人的頭像圖片(選用)
    • Display Name:顯示名稱,例如「通知機器人」
    • Description:說明這個機器人的用途
    • Role:選擇「Member」即可
  4. 點擊「Create Bot Account」

建立完成後,頁面會顯示一個 Token(存取權杖)。請務必複製並妥善保存這個 Token,它只會顯示一次。如果遺失,需要重新產生新的 Token。

用 n8n 發送訊息

n8n 是一個開源的工作流程自動化工具,可以串接各種服務。

以下示範如何讓 n8n 透過機器人帳號發送訊息到 Mattermost。

前置作業:

首先需要在 Mattermost 建立一個接收訊息的頻道,例如「系統通知」。

在 n8n 中設定:

  1. 在 n8n 工作流程中新增「Mattermost」節點
  2. 建立 Credential(憑證):
    • Base URL:填入你的 Mattermost 網址,例如 http://localhost:8065
    • Access Token:貼上前面複製的機器人 Token。
  3. 設定要執行的動作:
    • Operation:選擇「Post Message」。
    • Channel ID:下拉式選單選取。
    • Message:輸入要發送的訊息內容。

簡單的測試範例:

建立一個「Schedule Trigger」節點,設定每天早上 9 點執行,連接到 Mattermost 節點發送「早安!今天也要加油」的訊息。這樣就完成了一個簡單的每日問候機器人。

進階應用:

你可以組合更多節點,例如:

  • 監控網站是否正常運作,異常時發送警告訊息
  • 從 Google Sheets 讀取資料,定期發送報表摘要
  • 串接 Webhook,當特定事件發生時自動通知團隊
  • 整合 RSS 閱讀器,自動分享新文章到頻道

機器人帳號讓 Mattermost 不只是通訊軟體,還能執行自動化流程的訊息中心。


結語

透過 Docker Compose,我們可以在本機快速部署 Mattermost,擁有完整的團隊協作功能,同時保有資料的完全控制權。合理的儲存策略配置(本機設定、行動硬碟存檔)讓系統既快速又節省空間。

搭配 Boards 和 Todo 等外掛,以及機器人帳號的自動化整合,Mattermost 可以滿足從團隊溝通到專案管理的各種需求。

而且,以上這些功能都是免費且開源的,不用擔心訂閱費用或資料隱私問題。

最後,August 其實也還用不到一個月,但覺得好用,又能保有隱私,所以先寫了這篇筆記,紀錄一下安裝、使用的過程。

如果有更好的通訊軟體,歡迎留言提供。

Top comments (0)