群晖(DSM)Docker 部署 Mattermost 总结
一、环境说明
-
NAS:Synology 群晖(DSM6 / DSM7 均适用)
-
存储卷:
/volume2 -
容器管理:Docker / Container Manager
-
部署方式:
docker-compose -
Mattermost 版本:
10.11.8 -
数据库:PostgreSQL
-
访问方式:HTTP + 8065 端口(未使用 nginx)
二、目录结构规划(宿主机)
在群晖上使用 Docker,目录规划非常重要。本次使用如下结构:
/volume2/mattermost/
└── docker-main/
├── docker-compose.yml
├── .env
└── volumes/
├── app/
│ └── mattermost/
│ ├── config/
│ ├── data/
│ ├── logs/
│ ├── plugins/
│ ├── client/plugins/
│ └── bleve-indexes/
└── db/
└── var/lib/postgresql/data/
volumes/下的目录 都是宿主机真实路径,用于数据持久化。
三、准备 docker-compose 与环境变量
1️⃣ .env 关键配置(示例)
把 .env 里改成 Team 版:
MATTERMOST_IMAGE=mattermost-team-edition
MATTERMOST_IMAGE_TAG=10.11.8
DOMAIN=NAS_IP
POSTGRES_USER=mmuser
POSTGRES_PASSWORD=StrongPassword
POSTGRES_DB=mattermost
APP_PORT=8065
MATTERMOST_DATA_PATH=./volumes/app/mattermost/data
MATTERMOST_CONFIG_PATH=./volumes/app/mattermost/config
MATTERMOST_LOGS_PATH=./volumes/app/mattermost/logs
MATTERMOST_PLUGINS_PATH=./volumes/app/mattermost/plugins
MATTERMOST_CLIENT_PLUGINS_PATH=./volumes/app/mattermost/client/plugins
MATTERMOST_BLEVE_INDEXES_PATH=./volumes/app/mattermost/bleve-indexes
MM_SQLSETTINGS_DRIVERNAME=postgres
MM_SQLSETTINGS_DATASOURCE=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable
MM_SERVICESETTINGS_SITEURL=http://${DOMAIN}:8065
2️⃣ 端口映射(非常关键)
在 docker-compose.yml 中为 Mattermost 添加端口映射:
services:
mattermost:
ports:
- "8065:8065"
否则容器虽然启动成功,但 外部无法访问。
四、创建宿主机目录并处理权限
在群晖 SSH 中执行(位于 docker-main 目录):
mkdir -p ./volumes/db/var/lib/postgresql/data
mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
chmod -R 777 ./volumes
群晖没有传统 root 权限,使用
chmod 777是最省事、成功率最高的方式后续稳定运行后可以再收紧权限。
五、启动容器(群晖注意事项)
✅ 正确方式
docker-compose up -d
或(DSM7):
docker compose up -d
⚠️ 注意:
-
群晖环境中 不要强行用 sudo + docker compose
-
admin用户默认就可以启动容器
六、验证部署状态
1️⃣ 查看容器状态
sudo docker ps
关键标志:
-
Mattermost:
Up (healthy) -
Postgres:
Up
2️⃣ 浏览器访问
http://NAS_IP:8065
出现 Mattermost 初始化页面,说明部署成功 ✅
七、踩过的坑 & 经验总结(重点)
❌ 1. 以为 ./volumes/... 是容器路径
❗ 实际是 宿主机路径
Docker 只是把它映射进容器。
❌ 2. Postgres 18 权限 / 初始化问题
-
postgres:18-alpine在群晖 + bind mount 下容易出现权限问题 -
推荐稳定版本:
postgres:16-alpine
❌ 3. 容器启动了却访问不到
原因:
- 没有
ports: 8065:8065
❌ 4. 群晖 admin ≠ Linux root
-
没有
apt -
不能
su -
权限问题要用 File Station 或 chmod
八、当前部署状态总结
-
✅ Mattermost 服务正常
-
✅ PostgreSQL 正常
-
✅ 数据已持久化到
/volume2 -
✅ 可通过浏览器访问
-
⏭️ 后续可扩展:
-
nginx / HTTPS
-
备份 volumes
-
升级 Mattermost
-
接入 LDAP / 邮件
-
如果你愿意,我可以下一步帮你整理:
-
HTTPS + 443(群晖反代 / nginx)
-
Mattermost 升级流程
-
完整备份 & 迁移方案
-
docker-compose 精简/生产版
