にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

Mattermostを自宅サーバにインストールしてCloudflare Tunnelでアクセス可能にした

Slack代替としてのMattermostをローカルにインストールしてみよう、と思ってやってみたのでメモ。外部からアクセス可能にするにも、直接公開するのでなくCloudflare Tunnelを使えば、自宅サーバを直接外部に見せなくて良いのでマシかなと思ってやってみた。

環境

今回はDockerを使ってインストールする。

Dockerのインストール

すでにインストールされてたのでやらなかったが、

sudo apt update
sudo apt install docker.io
sudo systemctl start docker

でいいらしい。

バージョンは

$ docker --version
Docker version 20.10.12, build 20.10.12-0ubuntu4
$ docker-compose --version
docker-compose version 1.29.2, build unknown

とのこと。

Mattermostのインストール

プレビュー

docker run --name mattermost-preview -d --publish 8065:8065 mattermost/mattermost-preview

で、http://localhost:8065などにアクセスして動作を確認する。

プレビュー用コンテナの削除
docker stop mattermost-preview
docker rm mattermost-preview

インストール

クローンしてきて、.envファイルを変更する。

git clone https://github.com/mattermost/docker
cd docker
cp env.example .env
nano .env

.envファイルの変更点は、

  • ドメインDOMAIN=の部分を実際に使うドメインに書き換え
  • MATTERMOST_IMAGE=の行をMATTERMOST_IMAGE=mattermost-team-editionに書き換え
ディレクトリ作成
mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
sudo chown -R 2000:2000 ./volumes/app/mattermost
立ち上げ(nginxなし)
sudo docker-compose -f docker-compose.yml -f docker-compose.without-nginx.yml up -d

終了はsudo docker-compose -f docker-compose.yml -f docker-compose.without-nginx.yml down

ここではNginxなしでやっているが、200人以上が使うなどの場合はNginx使った方がパフォーマンス的にいいらしい。実際のところどうなのかわからないが…。

Cloudflare Tunnelの設定

Cloudflare

  1. Cloudflareのコントロールパネルを開いて[Add website]を押し、使いたいドメインを追加する。
    • mm.example.comが使いたい場合にはexample.comを追加する必要があるっぽい。
  2. プラン選択画面がでてくるので[Free]を選択、[Continue]する。
  3. [Review your DNS records]と出るので、トンネルを設定したい(ドメイン/サブドメインの)AやAAAAレコードを消して[Continue]する。
  4. ネームサーバー情報が出てくるのでコピーして、自分の使っているドメインのネームサーバーをそれらに変更する。
  5. [Done, check nameservers]をクリック。

DNS情報が更新されるまで待つ。

Cloudflared

インストール
cd ~
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
ログイン
cloudflared tunnel login

表示されるURLにアクセスして、Cloudflareにログインする。
ドメインを選択して、[Authorize]をクリック。

トンネルを作成
cloudflared tunnel create mm-example

mm-exampleの部分は適当に識別しやすいようにつける。
ここで表示されるトンネルIDとJSON pathを控える。JSON pathは~/.cloudflared/.jsonと思われる。

設定ファイル編集
nano ~/.cloudflared/config.yml

内容を以下のようにする。<Tunnel-UUID>は先程のtunnel createで表示されたものを設定する。

tunnel: <Tunnel-UUID> # トンネルID
credentials-file: /home/nixeneko/.cloudflared/<Tunnel-UUID>.json #JSONのパス

ingress:
  - hostname: mm.example.com
    service: http://localhost:8065
  - service: http_status:404
DNS設定、CNAMEに追加
cloudflared tunnel route dns mm-example mm.example.com
トンネルを起動
cloudflared tunnel --config ~/.cloudflared/config.yml run mm-example
トンネルの自動起動設定
sudo cloudflared --config ~/.cloudflared/config.yml service install
systemctl start cloudflared

不要時はcloudflared tunnel --config ~/.cloudflared/config.yml delete mm-exampleとかして、トンネル一覧cloudflared tunnel listから消えてることを確認するといいらしい。

感想とか

アクセスがもっさりしてる。トンネルを通じてよけいな通信経路が延びてるのだから仕方ないが。
これで安定動作させられるのかは不明である。

実用上はこの後設定をしないといけないと思われる。SMTPの設定や、モバイル通知の設定、などなど。Slackからログをインポートしたりもできるらしい。