Mattermost Omnibus のサーバを移転して Docker の Mattermost にする

Ubuntu 20.04 で動かしていた Mattermost をサーバ移転の機会に、 Mattermost v11 には対応しない Mattermost Omnibus から、Docker の Mattermost に変えた。

Ubuntu 20.04 での Mattermost Omnibus のデータベースとデータのバックアップの作成

Mattermost Omnibus のデータベースのバックアップをバイナリファイルとテキストファイルで作っておく。 データベースのパスワードは /etc/mattermost/mmomni.yml に書いてあるので、あらかじめ確認しておく。

systemctl stop mattermost.service
cd /tmp
sudo -u mattermost pg_dump -h 127.0.0.1 -p 5432 -U mmuser -d mattermost -Fc -f mattermost_pg.dump
sudo -u mattermost pg_dump -h 127.0.0.1 -p 5432 -U mmuser -d mattermost > mattermost_pg.sql
mv mattermost_pg_dump.dump ~
cd

/var/opt/mattermost/data と /etc を圧縮ファイルにしておく。

tar cvJf mattermost_data.tar.xz /var/opt/mattermost/data/
tar cvJf ubuntu_etc.tar.xz /etc

ここで作成したファイルを新しいサーバに送っておく。

Docker のインストールと docker-compose.yml

以下は、新しいサーバの Ubuntu 24.04 の作業になる。

まず、Docker をインストールする。

apt install docker.io docker-compose-v2

次のような docker-compose.yml を用意する。

version: "3.9"

services:
  db:
    image: postgres:15
    restart: always
    environment:
      POSTGRES_USER: mmuser
      POSTGRES_PASSWORD: [PASSWORD]
      POSTGRES_DB: mattermost
    volumes:
      - /var/opt/mattermost/db:/var/lib/postgresql/data

  app:
    image: mattermost/mattermost-team-edition:10.5
    restart: always
    depends_on:
      - db
    ports:
      - "8065:8065"
    environment:
      MM_SQLSETTINGS_DRIVERNAME: postgres
      MM_SQLSETTINGS_DATASOURCE: postgres://mmuser:[PASSWORD]:5432/mattermost?sslmode=disable
      MM_SERVICESETTINGS_SITEURL: https://example.com
      MM_LOGSETTINGS_ENABLECONSOLE: "true"
      MM_LOGSETTINGS_CONSOLELEVEL: "INFO"
    volumes:
      - /var/opt/mattermost/data:/mattermost/data
      - /var/opt/mattermost/config:/mattermost/config
      - /var/log/mattermost:/mattermost/logs

/var/opt/mattermost にデータベース、データ、設定のディレクトリが作成され、 ログは /var/log/mattermost に保存されるようにしている。 このページでは PostgreSQL のパスワードは [PASSWORD]、サイト URL は example.com としてあるので、 これらは実際には置き換える必要がある。

nginx & Let’s Encrypt

ウェブサーバと SSL の証明書を準備する。nginx と certbot をインストールし、ポートを開け、 certbot で ACME アカウントを作る。

apt install nginx certbot python3-certbot-nginx
ufw allow "Nginx FUll"
certbot register --agree-tos --email admin@example.com

certbot を webroot で実行できて、http のアクセスを https に転送する、次のような nginx の設定ファイルを作る。

server{
        listen 80;
        listen [::]:80;
        server_name example.com;

        location ^~ /.well-known/acme-challenge/ {
                 default_type "text/plain";
                 root /var/www/html;
        }

        location / {
                 return 301 https://$host$request_uri;
        }
}

このファイルは /etc/nginx/sites-available にをおき、/etc/nginx/sites-enabled にシンボリックリンクを張る。

systemctl restart nginx

などとして設定を反映させる。

Mattermost には https によるアクセスで対応する。以下の nginx の設定を /etc/nginx/sites-available におく。

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name example.com;

        ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        location / {
                proxy_pass    http://localhost:8065/;
                proxy_redirect http:// https://;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_read_timeout 90s;
                proxy_send_timeout 90s;
                client_max_body_size 100M;
        }
}

この設定は証明書を取得していないとエラーになるので、 まだ、/etc/nginx/sites-enabled にシンボリックは張らない。

次のコマンドで証明書を取得する。

certbot certonly --webroot -w /var/www/html -d example.com

postfix

apt install postfix

maildrop は 24.04 になかったので、25.04 の maildrop_3.1.8-2_amd64.deb を取得して dpkg でインストールした。

postfix の設定を行って、postfix を再起動する。

systemctl restart postfix

Docker の Mattermost の実行

/var/opt/mattermost などのコンテナがアクセスするディレクトリを用意する。 コンテナ内の mattermost ユーザの UID は 2000 なので、所有者を変更しておく。

mkdir -p /var/opt/mattermost/config
mkdir /var/log/mattermost
mv PATH_TO_BACKUP/var/opt/mattermost/data/ /var/opt/mattermost
chown -R 2000:2000 /var/opt/mattermost
chown -R 2000:2000 /var/log/mattermost

/var/opt/mattermost/config/config.json を

{
  "SqlSettings": {
    "DriverName": "postgres",
    "DataSource": "postgres://mmuser:[PASSWORD]@db:5432/mattermost?sslmode=disable"
  },
  "ServiceSettings": {
    "SiteURL": "https://example.com"
  },
  "FileSettings": {
    "Directory": "/mattermost/data"
  },
  "LogSettings": {
    "EnableConsole": false,
    "EnableFile": true,
    "FileLocation": "/mattermost/logs/mattermost.log",
    "ConsoleLevel": "INFO",
    "FileLevel": "INFO"
  }
}

のようにした。所有者を変えておく。

chown -R 2000:2000 /var/opt/mattermost/config

データベースを復元する。docker-compose.yml があるディレクトリで

docker compose up -d db

でデータベースのコンテナを実行する。 データベースのディレクトリは docker-compose.yml に指定した /var/opt/mattermost/db になる。 すべて消して作り直す場合は、このディレクトリを削除するか、次のコマンドを実行する。

docker exec -it mattermost-db-1 psql -U mmuser -d mattermost -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public AUTHORIZATION mmuser;"

データベースを読み込む。カレントディレクトリに mattermost_pg.dump を置き、

docker run --rm --network container:mattermost-db-1 -e PGPASSWORD='[PASSWORD]' -v "$PWD:/backup" postgres:15 pg_restore -h 127.0.0.1 -p 5432 -U mmuser -d mattermost -v /backup/mattermost_pg.dump

を実行する。設定などに問題がなければ

docker compose up -d

で mattermost が動く。

管理権限を持つアカウント名を調べるには

docker exec -it mattermost-db-1 psql -U mmuser -d mattermost -c "SELECT username, roles FROM users WHERE roles LIKE '%system_admin%';"

とすると良い。

Tags of current page

, ,