目的
- インターネットにつながっていない閉鎖LANで、Teams/Slack みたいなことをしたい
- Mattermost でテキストチャットをやりたい
- Mattermost の Call plugin で、音声通話とデスクトップ共有をやりたい (要は PowerPoint/Excel なんかの資料の共有、MS Project や Redmine なんかの進捗資料の共有をしたい)
ベースOS
- Virtualbox 上に次のマシンを作成
- CPU 2 Core
- RAM 4 GB
- HDD 25GB
- OS Ubuntu Server 24.04 https://ubuntu.com/download/server external_link
- マシン名 mattermost
- OSインストール後の初期設定
$ sudo apt update $ sudo apt upgrade $ sudo apt install samba
- これで Windows から mattermost で名前解決ができる
- avahi (mdns) で済めばそっちの方がいいんだけど・・・Windowsからときどき名前解決うまく行かない時あるのよね。クライアント Windows 限定だけど Samba (nmb) の方が確実に名前解決ができる
Docker
- インストール手順
- https://docs.docker.com/engine/install/ubuntu/ external_link
- 最初に Ubuntu の docker パッケージのアンインストールを忘れずに
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
- 最後に、管理ユーザが Docker コマンドを発行できるようにする
$ sudo gpasswd -a $USER docker
Mattermost
- https://docs.mattermost.com/install/install-docker.html external_link
- 1.In a terminal window, clone the repository and enter the directory.
git clone https://github.com/mattermost/docker cd docker
- 2.Create your .env file by copying and adjusting the env.example file.
cp env.example .env
- DOMAIN名をマシンの mDNS 名に変える
~/docker$ diff -u env.example .env --- env.example 2024-07-21 15:19:14.197890429 +0000 +++ .env 2024-07-21 15:21:33.334884079 +0000 @@ -1,5 +1,5 @@ # Domain of service -DOMAIN=mm.example.com +DOMAIN=mattermost # Container settings ## Timezone inside the containers. The value needs to be in the form 'Europe/Berlin'.
- 3.Create the required directories and set their permissions.
mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes} sudo chown -R 2000:2000 ./volumes/app/mattermost
- 4.Configure TLS for NGINX
- 公式ガイドでは Let's Encrypt での証明書発行の方法が載っている
- 今回は・・・言ってなかったけど閉鎖LANで使いたいので、自己署名証明書を作る
openssl req -nodes -new -x509 -keyout server.key -out server.cert -days 3650
- 証明書の設定は適当でいい。できるファイルは次の二つ
- server.cert
- server.key
- .env に証明書を設定する
$ diff -u env.example .env --- env.example 2024-07-21 15:19:14.197890429 +0000 +++ .env 2024-07-21 15:39:27.618835048 +0000 @@ -1,5 +1,5 @@ # Domain of service -DOMAIN=mm.example.com +DOMAIN=mattermost # Container settings ## Timezone inside the containers. The value needs to be in the form 'Europe/Berlin'. @@ -35,11 +35,13 @@ NGINX_CONFIG_PATH=./nginx/conf.d NGINX_DHPARAMS_FILE=./nginx/dhparams4096.pem -CERT_PATH=./volumes/web/cert/cert.pem -KEY_PATH=./volumes/web/cert/key-no-password.pem +#CERT_PATH=./volumes/web/cert/cert.pem +#KEY_PATH=./volumes/web/cert/key-no-password.pem #GITLAB_PKI_CHAIN_PATH=<path_to_your_gitlab_pki>/pki_chain.pem #CERT_PATH=./certs/etc/letsencrypt/live/${DOMAIN}/fullchain.pem #KEY_PATH=./certs/etc/letsencrypt/live/${DOMAIN}/privkey.pem +CERT_PATH=./server.cert +KEY_PATH=./server.key ## Exposed ports to the host. Inside the container 80, 443 and 8443 will be used HTTPS_PORT=443
-
- Gitlab SSO との連携は今回は要らないのでやらない
-
- 起動!
docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d
-
- 停止
docker compose -f docker-compose.yml -f docker-compose.nginx.yml down
最初のユーザ(adminユーザ)登録
- https://mattermost/ external_link にアクセスすると、ユーザ登録画面が表示される
- 最初のユーザが管理ユーザになる
ユーザ登録
- 左下の Invite Members をクリックして、すると招待ダイアログが票ざれる。ここの Copy Invite link をクリックすると初期登録用の URL がクリップボードにコピーされるので、それを追加メンバーに渡して自分で登録してもらう
表示の日本語化
- 右上の ⚙ > Settings > Display > Language
Call を一般ユーザでも始められるようにする
- デフォルト設定では管理者しか Call を始められない
- 右上の ■ > System Console > Plugins > Calls で、Test Mode を On から Off にすると一般ユーザでも Call を始められるようになる
Call を使う際のWindowsクライアント側の設定
- Windows Firewall で、Mattermost サーバ の 8443/udp、8443/tcp からの接続を通すようにする必要がある
- 面倒なら Mattermost Clinet をインストールして、Mattermost Clinet の通信を全許可にした方が簡単かもしれない
日本語でのメッセージ検索
- PostgreSQL の設定を変えなくても、Mattermost 組み込みの Bleve を有効にすれば、日本語でのメッセージ検索ができるようになる (ただし、Experimental機能)
- Mattermost5.24の新機能, Zenn, 2021, https://zenn.dev/kaakaa/articles/qiita-20200620-574972591f6b0b0f642f external_link
Admin のパスワード忘れちまった
-
ローカルアクセスを許可する
- .env にパラメータを設定
MM_SERVICESETTINGS_ENABLELOCALMODE=true
- docker-compose.yml で、.env の MM_SERVICESETTINGS_ENABLELOCALMODE を拾うようにする
mattermost: depends_on: - postgres image: mattermost/${MATTERMOST_IMAGE}:${MATTERMOST_IMAGE_TAG} restart: ${RESTART_POLICY} security_opt: - no-new-privileges:true pids_limit: 200 read_only: ${MATTERMOST_CONTAINER_READONLY} tmpfs: - /tmp volumes: - ${MATTERMOST_CONFIG_PATH}:/mattermost/config:rw - ${MATTERMOST_DATA_PATH}:/mattermost/data:rw - ${MATTERMOST_LOGS_PATH}:/mattermost/logs:rw - ${MATTERMOST_PLUGINS_PATH}:/mattermost/plugins:rw - ${MATTERMOST_CLIENT_PLUGINS_PATH}:/mattermost/client/plugins:rw - ${MATTERMOST_BLEVE_INDEXES_PATH}:/mattermost/bleve-indexes:rw # When you want to use SSO with GitLab, you have to add the cert pki chain of GitLab inside Alpine # to avoid Token request failed: certificate signed by unknown authority # (link: https://github.com/mattermost/mattermost-server/issues/13059 and https://github.com/mattermost/docker/issues/34) # - ${GITLAB_PKI_CHAIN_PATH}:/etc/ssl/certs/pki_chain.pem:ro environment: # timezone inside container - TZ # necessary Mattermost options/variables (see env.example) - MM_SQLSETTINGS_DRIVERNAME - MM_SQLSETTINGS_DATASOURCE # necessary for bleve - MM_BLEVESETTINGS_INDEXDIR # additional settings - MM_SERVICESETTINGS_SITEURL - MM_SERVICESETTINGS_ENABLELOCALMODE <-- ★追記
-
再起動
$ docker compose -f docker-compose.yml -f docker-compose.nginx.yml down $ docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d
docker compose down
docker compose up
でないことに注意。本番環境でやらかして、mattermost が起動せずに焦った :-) -
コンテナの中に入って、mmctl コマンドでパスワードを変更する
- コンテナの中に入る
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e30904135bcc nginx:alpine "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp nginx_mattermost f88d17547508 mattermost/mattermost-enterprise-edition:9.11.6 "/entrypoint.sh matt…" 2 minutes ago Up 2 minutes (healthy) 8065/tcp, 8067/tcp, 8074-8075/tcp, 0.0.0.0:8443->8443/tcp, 0.0.0.0:8443->8443/udp, [::]:8443->8443/tcp, [::]:8443->8443/udp docker-mattermost-1 3cc7556dd0b6 postgres:13-alpine "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 5432/tcp docker-postgres-1 atsushi@mattermost:~/docker$ docker exec -it f88d /bin/bash
- コンテナの中で mmctl コマンドを実行する
mattermost@f88d17547508:~$ mmctl --local user change-password admin New password: Password for user admin successfully changed