静看光阴荏苒
不管不顾不问不说也不念

Docker部署Mattermost

最近把聊天室的程序从rocketchat换成了mattermost,这篇文章记录下配置过程。

其实我早就想把程序换成mattermost了,奈何之前的团队版本(白嫖版本)一直不支持权限控制功能,没有权限控制,任何人都可以删除消息,删除频道,修改配置,这样根本就不能用在生产环境。。

不知道这开发者是突然脑壳开了窍还是怎么的,终于肯把这个功能开放给白嫖版本了,那还说个锤子,rocketchat直接扔进垃圾桶!

早在几年前我已经写过一篇部署mattermost的文章了,不过隔了这么长时间,有很多配置步骤都失效了,所以也算重新记录一下吧。

安装docker和compose,注意这个compose目前还是建议安装1.x版本,2.x的版本有一些问题不好处理:

apt -y update
apt -y install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

新建项目目录,进入到项目的根目录:

mkdir -p /opt/mattermost && cd /opt/mattermost

新建一个compose:

nano docker-compose.yml

写入如下配置:

version: '3.5'

services:
  postgres:
    container_name: postgres_mattermost
    image: postgres:13-alpine
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    pids_limit: 100
    read_only: true
    tmpfs:
      - /tmp
      - /var/run/postgresql
    env_file:
      - .env
    volumes:
      - ./volumes/db:/var/lib/postgresql/data

  mattermost:
    container_name: mattermost
    image: mattermost/mattermost-team-edition:6.5
    restart: unless-stopped
    depends_on:
      - postgres
    security_opt:
      - no-new-privileges:true
    pids_limit: 200
    read_only: false
    tmpfs:
      - /tmp
    env_file:
      - .env
    ports:
      - 127.0.0.1:8065:8065
    volumes:
      - ./volumes/app/mattermost/config:/mattermost/config:rw
      - ./volumes/app/mattermost/data:/mattermost/data:rw
      - ./volumes/app/mattermost/logs:/mattermost/logs:rw
      - ./volumes/app/mattermost/plugins:/mattermost/plugins:rw
      - ./volumes/app/mattermost/client/plugins:/mattermost/client/plugins:rw
      - ./volumes/app/mattermost/bleve-indexes:/mattermost/bleve-indexes:rw

新建.env配置文件:

nano .env

设置你的数据库用户名以及密码替换掉imlala和password,另外用你的域名替换掉chat.example.com:

POSTGRES_DB=mattermost
POSTGRES_USER=imlala
POSTGRES_PASSWORD=password
MM_SQLSETTINGS_DRIVERNAME=postgres
MM_SQLSETTINGS_DATASOURCE=postgres://imlala:password@postgres:5432/mattermost?sslmode=disable&connect_timeout=10
MM_BLEVESETTINGS_INDEXDIR=/mattermost/bleve-indexes
MM_SERVICESETTINGS_SITEURL=https://chat.example.com

创建项目需要用到的目录:

mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}

给予正确的目录权限:

chown -R 2000:2000 ./volumes/app/mattermost

启动即可:

docker-compose up -d

现在需要配置反向代理,首先安装nginx/certbot:

apt -y install nginx python3-certbot-nginx

新建一个nginx站点配置文件:

nano /etc/nginx/conf.d/mattermost.conf

写入如下配置:

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;
    server_name chat.example.com;

    location ~ /api/v[0-9]+/(users/)?websocket$ {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        client_max_body_size 0;
        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 0;
        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;
    }
}

签发ssl证书:

certbot --nginx

登录后台,可以看到用户权限控制功能是可用的了:

赞(11)
未经允许不得转载:荒岛 » Docker部署Mattermost
分享到: 更多 (0)

评论 19

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    已经进不去聊天室好久了 老是DNS_PROBE_FINISHED_NXDOMAIN :razz: :razz:

    satoya2年前 (2022-04-19) Google Chrome 100.0.4896.127 Google Chrome 100.0.4896.127 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    有没有arm版?

    jiji2年前 (2022-04-20) Google Chrome 100.0.4896.88 Google Chrome 100.0.4896.88 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 在两台服务器上都安装失败了,打开502

      jiji2年前 (2022-04-20) Google Chrome 100.0.4896.88 Google Chrome 100.0.4896.88 Windows 10 x64 Edition Windows 10 x64 Edition回复
  3. #3

    没有智能每日涩图功能 差评! :razz:

    橘子2年前 (2022-04-22) Google Chrome 101.0.4877.104 Google Chrome 101.0.4877.104 Windows NT x64 Edition Windows NT x64 Edition回复
  4. #4

    试了一下,发现容器的服务启动失败,数据库处于restarting状态
    最后发现对docker的版本是有要求的

    Docker version 20.10.14, build a224086
    docker-compose version 1.29.2, build unknown

    xbox2年前 (2022-04-26) Google Chrome 100.0.4896.127 Google Chrome 100.0.4896.127 Windows 7 x64 Edition Windows 7 x64 Edition回复
  5. #5

    請問MatterMost相較於RocketChat的優勢在哪裡?

    guest2年前 (2022-05-03) Google Chrome 100.0.4896.127 Google Chrome 100.0.4896.127 Mac OS X  10.15.7 Mac OS X 10.15.7回复
  6. #6

    他这个有个不舒服的地方,上传的小视频不能预览播放

    逍遥2年前 (2022-05-28) Google Chrome 102.0.5005.62 Google Chrome 102.0.5005.62 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 手机客户端有这个问题,网页和电脑版的客户端是可以预览播放的。

      LALA2年前 (2022-05-29) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • 我在docker预览版传的视频不能预览播放

        逍遥2年前 (2022-06-06) Microsoft Edge 45.09.4.5079 Microsoft Edge 45.09.4.5079 Android 11 Android 11回复
  7. #7

    :mrgreen: 不得在来一个升级更新教程

    Fcat2年前 (2022-06-06) Microsoft Edge 102.0.1245.33 Microsoft Edge 102.0.1245.33 Windows 10 x64 Edition Windows 10 x64 Edition回复
  8. #8

    教程不错,很有用。明天搞个玩玩,preview版确实差点意思

    Safari2年前 (2022-07-02) Google Chrome 102.0.5005.136 Google Chrome 102.0.5005.136 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 这个方法你安装成功了没?

      逍遥2年前 (2022-07-02) Microsoft Edge 101.0.1210.53 Microsoft Edge 101.0.1210.53 Android 11 Android 11回复
      • 新开了一台机器做的,成功了。准备在自己老VPS共存建一个,主要还是证书和nginx这块配置要注意下

        Safari2年前 (2022-07-11) Google Chrome 102.0.5005.149 Google Chrome 102.0.5005.149 Windows 10 x64 Edition Windows 10 x64 Edition回复
  9. #9

    老哥,时隔4个月我怎么原样搭建搭建不起来了。提示跨域报错

    safari2年前 (2022-10-16) Google Chrome 106.0.0.0 Google Chrome 106.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 按道理来说不会有这种问题的,毕竟我这篇文章里面用的docker而且image版本是锁定的:mattermost-team-edition:6.5
      这个镜像根本没有更新过:https://hub.docker.com/r/mattermost/mattermost-team-edition/tags?page=1&name=6.5
      创建出来的容器环境肯定也是一致的,估计是别的原因,你有相关日志,可以贴上来看看。

      LALA2年前 (2022-10-17) Google Chrome 106.0.0.0 Google Chrome 106.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
  10. #10

    如果以后要迁移的话是不是直接把整个目录打包然后到新机器上解压然后再compose up一下就行了?(不会玩docker的菜鸡一枚)

    m1saka2年前 (2022-10-26) Google Chrome 106.0.0.0 Google Chrome 106.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 是的,这篇文章里面的docker-compose配置的数据存储方式全部都用的bind mounts,而且都在/opt/mattermost目录下面,所以你直接打包mattermost目录就行了。
      但有时候一些项目存储数据会用volume,那就得另外备份volume。

      LALA2年前 (2022-10-29) Google Chrome 106.0.0.0 Google Chrome 106.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿