搭建Mattermost团队协作平台并不需要复杂的基础设施,理解它的组件关系后,在Ubuntu上可以按步骤稳定完成部署。Mattermost服务本身是一个由Go语言编写的单体应用,负责消息收发、WebSocket实时通信和Web界面渲染,数据持久化则依赖PostgreSQL数据库。生产环境中通常还会在前面放置Nginx,由它处理公网HTTP/HTTPS请求、证书终止和反向代理转发。下面的内容会从一台全新的Ubuntu服务器开始,逐步完成数据库配置、应用安装、进程守护和反向代理设置。

一、环境准备与基础依赖安装
首先需要一台具备公网访问能力的Ubuntu服务器,推荐使用长期支持版本,例如Ubuntu 22.04或20.04。硬件方面,小型团队起步配置2核CPU、4GB内存即可满足日常使用,如果文件上传频繁,建议单独挂载数据盘或使用更大的系统盘。部署前还需要准备一个已解析到服务器IP的域名,后续HTTPS证书签发和Nginx反向代理都会用到这个域名。
登录服务器后,建议使用具备sudo权限的普通用户操作,而不是直接使用root。先执行系统更新,再安装PostgreSQL、wget、tar和Nginx等核心软件包。PostgreSQL是Mattermost官方推荐的关系型数据库,经历过大量生产环境验证;wget用于下载Mattermost官方发布的二进制包;tar负责解压;Nginx则作为后续的反向代理服务。
sudo apt update sudo apt upgrade -y sudo apt install -y postgresql postgresql-contrib wget tar nginx
安装完成后,PostgreSQL服务通常会自动启动,可以通过systemctl status postgresql查看运行状态。Nginx也是以系统服务形式存在,但此时不需要立即调整配置,等Mattermost应用就绪后再统一处理。接下来先完成数据库层的准备工作,因为后续应用启动时会依赖数据库连接。
二、创建PostgreSQL数据库并调整认证
PostgreSQL安装后默认只允许本机通过Unix socket连接,并且普通数据库用户需要与操作系统用户映射。我们需要为Mattermost创建一个独立数据库、一个专用数据库账号,并设置密码。切换到postgres系统用户后,进入psql命令行执行建库和授权操作。
sudo -u postgres psql CREATE DATABASE mattermost; CREATE USER mmuser WITH PASSWORD 'YourStrongPassword'; GRANT ALL PRIVILEGES ON DATABASE mattermost TO mmuser; ALTER DATABASE mattermost OWNER TO mmuser; \q
这里将数据库mattermost的所有者设置为mmuser,这样Mattermost应用在连接后可以执行建表、索引维护、迁移等操作。密码需要替换成足够复杂的实际密码,避免使用示例值。创建完成后,还需要确认客户端认证方式。PostgreSQL默认的本地认证可能是peer模式,该模式要求数据库用户与操作系统用户同名,而mmuser没有对应的系统用户,连接会被拒绝。
检查/etc/postgresql/目录下当前版本对应的pg_hba.conf文件,找到本地IPv4和IPv6连接规则。通常需要将127.0.0.1/32和::1/128的认证方式从peer改为md5或scram-sha-256。修改完成后重新加载PostgreSQL配置,并使用密码方式测试连接是否成功。
sudo systemctl reload postgresql psql -h 127.0.0.1 -U mmuser -d mattermost -W
输入密码后如果能进入psql命令行,说明数据库认证已生效。此时可以退出,继续部署Mattermost应用本体。生产环境中建议只允许Mattermost服务通过本地回环地址连接数据库,不要将PostgreSQL的监听地址暴露到公网,这样可以减少被扫描和暴力破解的风险。
三、安装Mattermost并配置systemd服务
Mattermost官方提供打包好的Linux二进制文件,下载后解压到目标目录即可运行。先创建用于运行Mattermost的专用系统用户,该用户不需要登录Shell,仅用于进程隔离和文件权限管理。下载时注意选择与服务器架构匹配的版本,通常x86_64服务器使用linux-amd64包。
sudo useradd --system --user-group mattermost cd /opt sudo wget https://releases.mattermost.com/9.5.2/mattermost-9.5.2-linux-amd64.tar.gz sudo tar -xvzf mattermost-9.5.2-linux-amd64.tar.gz sudo mkdir -p /opt/mattermost/data sudo chown -R mattermost:mattermost /opt/mattermost
解压后的目录结构比较清晰:bin目录存放可执行文件,config目录保存配置文件,data目录保存上传的文件和附件,logs目录记录运行日志。其中数据目录和配置文件是备份时需要重点关注的路径。接下来编辑配置文件config.json,至少修改数据库连接字符串和站点URL两个字段。
sudo sed -i 's|"DataSource": ".*"|"DataSource": "postgres://mmuser:YourStrongPassword@127.0.0.1:5432/mattermost?sslmode=disable&connect_timeout=10"|' /opt/mattermost/config/config.json sudo sed -i 's|"SiteURL": ".*"|"SiteURL": "https://your.domain.com"|' /opt/mattermost/config/config.json
DataSource中的连接串采用了PostgreSQL URL格式,密码和数据库名需要与前面创建的保持一致。SiteURL要填写用户最终访问使用的完整域名,包括https前缀。这个地址会用于生成WebSocket连接、文件链接和邮件中的跳转链接,填写错误可能导致头像、附件无法正常显示。
为了确认应用能正常启动,可以先使用mattermost用户手工运行一次/opt/mattermost/bin/mattermost,观察控制台输出是否出现监听8065端口的日志。手工运行方便排查数据库连接错误、端口冲突或权限问题,确认无误后终止进程,再通过systemd管理服务。创建服务单元文件可以让Mattermost随系统启动,并在进程异常退出后自动拉起。
sudo tee /etc/systemd/system/mattermost.service <<'EOF' [Unit] Description=Mattermost After=network.target postgresql.service [Service] Type=simple User=mattermost Group=mattermost ExecStart=/opt/mattermost/bin/mattermost Restart=always RestartSec=10 WorkingDirectory=/opt/mattermost LimitNOFILE=49152 [Install] WantedBy=multi-user.target EOF
注意上面的<<'EOF'在代码块中展示时已经进行了HTML转义,原因是代码块内部的尖括号需要写成实体形式,实际执行时应该使用正常的heredoc语法。服务文件中LimitNOFILE提升了进程可打开的文件句柄数量,这对高并发WebSocket连接和文件上传场景有帮助。保存后重新加载systemd配置,并设置开机自启。
sudo systemctl daemon-reload sudo systemctl enable mattermost sudo systemctl start mattermost sudo systemctl status mattermost
状态输出显示active (running)即表示服务已经正常运行。默认监听地址为0.0.0.0:8065,虽然可以直接通过IP访问,但缺少HTTPS和域名管理,不推荐在生产环境直接使用。下一步配置Nginx反向代理,统一处理80和443端口的请求。
四、配置Nginx反向代理并启用HTTPS
Nginx在这里的作用不仅是反向代理,还承担了TLS终止、请求头传递和WebSocket升级等关键任务。Mattermost应用本身不处理HTTPS,而是由Nginx将公网HTTPS请求解密后,再以HTTP形式转发到本机的8065端口。这样做的好处是证书管理集中,应用层无需关心TLS细节,同时Nginx也能更高效地处理静态资源请求。
创建Nginx站点配置文件,将域名请求代理到Mattermost服务。需要特别关注Upgrade和Connection头,它们用于WebSocket协议升级,如果缺少这两个请求头,聊天消息将无法实时推送,只能通过轮询获取更新。
server {
listen 80;
server_name your.domain.com;
location / {
proxy_pass http://127.0.0.1:8065;
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
client_max_body_size 100M;
}
}
配置中的client_max_body_size限制了上传文件的大小,默认Nginx只允许1MB左右,团队协作中常见附件可能超过这个值,因此建议根据实际需求调整。保存配置后,先通过nginx -t检查语法,再重载Nginx。此时使用域名访问站点,Nginx会将请求转发到Mattermost,但仍然是HTTP明文连接。
为了开启HTTPS,使用Certbot自动申请Let's Encrypt证书是最便捷的方式。Certbot支持Nginx插件,可以自动修改Nginx配置并配置证书续期,无需手动处理证书文件。
sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d your.domain.com
命令执行过程中会要求输入邮箱,用于证书到期提醒;完成后Certbot会自动改写Nginx配置,把80端口请求重定向到443端口,并加载SSL证书。浏览器再次访问时,地址栏应显示安全锁标志,Mattermost的HTTPS部署就完成了。Let's Encrypt证书有效期为90天,Certbot通常会创建systemd定时器自动续期,可以用systemctl status certbot.timer确认续期任务处于启用状态。
五、初始化Mattermost与日常运维建议
浏览器打开站点域名后,会进入Mattermost初始化流程。首次访问需要创建管理员账号,并设置团队名称、URL标识等基础信息。完成初始化后,建议先进入系统控制台检查各项配置,尤其是通知选项。默认情况下邮件通知可能不可用,生产环境建议接入SMTP服务器,否则用户注册、密码重置和消息通知等功能会受到影响。
安全方面,防火墙只开放22、80和443端口,禁止外部直接访问8065端口。可以使用UFW快速配置规则,允许SSH、HTTP和HTTPS,并阻止其他入站连接。同时检查Mattermost控制台中的“注册”选项,根据团队实际情况选择关闭开放注册,或仅允许特定邮箱域名注册,避免无关人员进入协作空间。
sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status
日常运维中,数据库和文件数据需要定期备份。PostgreSQL可以使用pg_dump导出逻辑备份,Mattermost的data目录存放着上传附件和头像,也需要一并归档。推荐将备份任务写入cron或systemd timer,并定期验证恢复流程,确保备份文件真实可用。
sudo -u postgres pg_dump mattermost > mattermost_backup.sql sudo tar -czf mattermost_data_backup.tar.gz /opt/mattermost/data
升级Mattermost时,应先停止服务,备份数据库和文件数据,再下载新版本解压覆盖旧版本,最后重新启动并观察迁移日志。不要在服务运行时直接替换二进制文件,也不建议跳过多个大版本升级。结合前面的PostgreSQL、systemd和Nginx配置,这套自托管协作平台可以稳定运行,并支持后续增加多节点、负载均衡等更复杂的架构演进。
MattermostUbuntu服务器团队协作部署修改时间:2026-08-29 01:14:13