目的

  • インターネットにつながっていない閉鎖LANで、Teams/Slack みたいなことをしたい
  • Mattermost でテキストチャットをやりたい
  • Mattermost の Call plugin で、音声通話とデスクトップ共有をやりたい (要は PowerPoint/Excel なんかの資料の共有、MS Project や Redmine なんかの進捗資料の共有をしたい)

ベースOS

$ sudo apt update $ sudo apt upgrade $ sudo apt install samba
  • これで Windows から mattermost で名前解決ができる
  • avahi (mdns) で済めばそっちの方がいいんだけど・・・Windowsからときどき名前解決うまく行かない時あるのよね。クライアント Windows 限定だけど Samba (nmb) の方が確実に名前解決ができる

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
      1. Gitlab SSO との連携は今回は要らないのでやらない
      1. 起動!
    docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d
      1. 停止
    docker compose -f docker-compose.yml -f docker-compose.nginx.yml down

最初のユーザ(adminユーザ)登録

スクリーンショット 2024-07-23 003821.png

ユーザ登録

  • 左下の Invite Members をクリックして、すると招待ダイアログが票ざれる。ここの Copy Invite link をクリックすると初期登録用の URL がクリップボードにコピーされるので、それを追加メンバーに渡して自分で登録してもらう

表示の日本語化

  • 右上の ⚙ > Settings > Display > Language

スクリーンショット 2024-07-22 012419.png

Call を一般ユーザでも始められるようにする

  • デフォルト設定では管理者しか Call を始められない
  • 右上の ■ > System Console > Plugins > Calls で、Test Mode を On から Off にすると一般ユーザでも Call を始められるようになる

スクリーンショット 2024-07-22 013010.png

Call を使う際のWindowsクライアント側の設定

  • Windows Firewall で、Mattermost サーバ の 8443/udp、8443/tcp からの接続を通すようにする必要がある
  • 面倒なら Mattermost Clinet をインストールして、Mattermost Clinet の通信を全許可にした方が簡単かもしれない

日本語でのメッセージ検索

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 コマンドを実行する image.png
    mattermost@f88d17547508:~$ mmctl --local user change-password admin New password: Password for user admin successfully changed