本篇要解決的問題
工作上,各家公司用的通訊軟體,常聽到的是以下三種: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 優勢
- 開源,可以完全安裝在自己的電腦或伺服器上。
- 類似 Slack 的使用方式,支援頻道分類、討論串、檔案分享等功能,還能透過外掛擴充更多能力。
- 可以整合 Webhook、機器人帳號。
- 所有資料都在本地,不用擔心第三方服務終止或資料外洩的問題。
本機安裝 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"
以下逐段說明設定內容:
資料庫服務
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
這段設定建立了 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
Mattermost 服務依賴資料庫,Docker 會確保資料庫先啟動。
使用 Team Edition 免費版本,已經足夠小型團隊使用。
security_opt 和 pids_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
這裡採用混合儲存策略,解決 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
指定使用 PostgreSQL 資料庫,連線字串包含使用者名稱、密碼、主機名稱(db 就是前面定義的資料庫服務名稱)、Port 和資料庫名稱。在區域網路環境下,為了簡化設定,這裡停用了 SSL 加密。
網站網址設定
- MM_SERVICESETTINGS_SITEURL=http://localhost:8065
這是 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
開啟外掛上傳和市集功能,這樣才能安裝 Boards、Todo 等擴充功能。
預設情況下這些功能可能被關閉,需要明確啟用。
WebSocket 連線設定
- MM_SERVICESETTINGS_ALLOWCORSFROM=*
- MM_WEBSERVER_WEBSOCKETSECUREPORT=8065
- MM_SERVICESETTINGS_ENABLEINSECUREOUTGOINGCONNECTIONS=true
WebSocket 是實現即時訊息的關鍵技術,而且後續使用 Boards 看版功能時也需要。
ALLOWCORSFROM=* 允許所有來源的跨域請求,方便在不同裝置上存取。
ENABLEINSECUREOUTGOINGCONNECTIONS 允許 Mattermost 連接到沒有 HTTPS 的外部服務,這在測試環境中很實用。
推播通知設定
- MM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS=true
- MM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER=https://push-test.mattermost.com
- MM_EMAILSETTINGS_PUSHNOTIFICATIONCONTENTS=full
開啟推播通知功能,使用 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"
Mattermost 內部的日誌檔案會保留 30 天,超過後自動壓縮舊檔案。
Docker 容器輸出的日誌則限制每個檔案最大 10MB,最多保留 5 個檔案,避免日誌無限膨脹佔用硬碟空間。
對外 Port
ports:
- "8065:8065"
將容器內的 8065 Port 對應到主機的 8065 Port。
啟動後可以透過 http://localhost:8065 存取 Mattermost。
啟動服務
在 docker-compose.yml 所在目錄執行:
docker compose up -d
-d 參數表示在背景執行。第一次啟動會需要下載映像檔,可能需要幾分鐘時間。
啟動完成後,打開瀏覽器前往 http://localhost:8065,就會看到 Mattermost 的初始設定頁面。按照指示建立管理員帳號、設定團隊名稱,就能開始使用了。
停止服務
當不需要使用時,可以執行:
docker compose down
這會停止並移除容器,但所有資料都保留在 volumes 目錄中,下次啟動時會自動載入。
切換介面語言為繁體中文
預設安裝後,Mattermost 的介面是英文。如果想改成繁體中文,只需要簡單幾個步驟:
- 點擊畫面右上角的齒輪圖示(Settings)
- 在設定選單中找到「Display」(顯示設定)
- 往下捲動到底部,會看到「Language」(語言)選項
- 點擊「Edit」,從下拉選單中選擇「繁體中文(台灣)」
- 點擊「Save」儲存
介面會立即切換成繁體中文,所有選單、按鈕、提示訊息都會變成中文顯示。
安裝擴充功能
Mattermost 跟 LINE 很不同的地方,在於可以安裝另外的擴充功能。
以下介紹兩個實用的擴充功能。
Focalboard
Focalboard 是內建的看板工具,類似 Jira 或 Notion,可以用來管理專案任務、追蹤進度。
安裝步驟:
- 進到 Focalboard 的 GitHub Releases 頁面。
- 下載最新版本的檔案,因為 Docker 是 Linux,要選擇 mattermost-plugin-focalboard-vxxxx-linux-xxx.tar.gz 的檔案。
- Mattermost 點擊左上角的 Mattermost Logo,選擇「System Console」(系統控制台)。
- 在左側選單找到「Plugins」(擴充程式)→「Plugin Management」(擴充程式管理)。
- 在上傳擴充程式中,點擊「選擇檔案」,接著選擇剛剛下載的檔案後,點擊「上傳」。
- 安裝完成後,左側選單會出現「Mattermost Boards」的選項,點擊進去,再啟用擴充程式功能。
使用 Boards:
回到主畫面,點擊左上角的 Mattermost Logo 會出現「Boards」圖示。點擊後可以建立新的看板。
選擇範本(如待辦清單、專案追蹤、內容行事曆等),或從空白看板開始。
看板支援卡片拖曳、自訂欄位、篩選排序等功能。
Todo
Todo 外掛可以讓你在對話中直接建立待辦事項,並在側邊欄追蹤所有未完成的任務。
安裝步驟:
安裝方式跟上面的 Boards 相同。
Todo 的 GitHub Releases。
使用 Todo:
在任何頻道或私訊中,右側會出現更多 Todo 的圖示(三個點 + 三條線)。
點擊後選擇「Add Todo」。
實用技巧:
你可以在任何頻道輸入 /todo add [任務內容] 快速建立待辦事項,不需要依附在特定訊息上。例如:
/todo add 下週一前完成專案提案
4 使用整合的機器人帳號
機器人帳號可以讓 Mattermost 與其他系統整合,執行像是自動化通知等的訊息發送。
建立機器人帳號
步驟:
- 進入「System Console」(系統控製台)→「Integrations」(整合)→「Bot Accounts」(機器人帳號)。
- 點擊「Add Bot Account」(新增機器人帳號)。
- 填寫機器人資訊:
- Username:例如
notification-bot - Bot Icon:上傳機器人的頭像圖片(選用)
- Display Name:顯示名稱,例如「通知機器人」
- Description:說明這個機器人的用途
- Role:選擇「Member」即可
- Username:例如
- 點擊「Create Bot Account」
建立完成後,頁面會顯示一個 Token(存取權杖)。請務必複製並妥善保存這個 Token,它只會顯示一次。如果遺失,需要重新產生新的 Token。
用 n8n 發送訊息
n8n 是一個開源的工作流程自動化工具,可以串接各種服務。
以下示範如何讓 n8n 透過機器人帳號發送訊息到 Mattermost。
前置作業:
首先需要在 Mattermost 建立一個接收訊息的頻道,例如「系統通知」。
在 n8n 中設定:
- 在 n8n 工作流程中新增「Mattermost」節點
- 建立 Credential(憑證):
- Base URL:填入你的 Mattermost 網址,例如
http://localhost:8065。 - Access Token:貼上前面複製的機器人 Token。
- Base URL:填入你的 Mattermost 網址,例如
- 設定要執行的動作:
- 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)