Dockerを使ってのrocket.chat立ち上げとcompose.ymlの中身

[MYJLab Advent Calendar 2023](https://qiita.com/advent-calendar/2023/myjlab)の3日目の記事になります。
すみません、自分の担当する日付を勘違いしてました…
ので4日の朝に急いで書いています。

昨日(2日)は[FlaskとSlackを使ってQRコードスキャンによる自動通知システムを構築する方法](https://qiita.com/advent-calendar/2023/myjlab)でした。

# 何をやるか
今日は以前に行った「Dockerを使ってrocket.chatを立ち上げる」と「compose.ymlの中身」について簡単に書いていきたいと思います。
また今回はrocket.chatの立ち上げのみを目的としているため、詳細な設定などはすべて省いています。
rocket.chatのchat機能を使うために立ち上げる場合は公式ドキュメント、もしくは他の記事を見てください。
compose.ymlの中身についてはChatGPTに協力してもらいました。

# 開発環境と前準備
今回はWindows11のPowerShellを使いました。
また事前にDocker Desktopをダウンロードしています。

# compose.ymlと.envファイルのダウンロード
まずrocket.chatの公式ドキュメントからcompose.ymlとenv.exampleをダウンロードします。

公式ドキュメント

https://docs.rocket.chat/deploy/deploy-rocket.chat/deploy-with-docker-and-docker-compose

compose.yml

https://github.com/RocketChat/Docker.Official.Image/blob/master/compose.yml

.envファイル

https://github.com/RocketChat/Docker.Official.Image/blob/master/env.example

1個目が公式ドキュメント、2,3個目が公式ドキュメントから飛べるcompose.ymlとenvファイルがあるgithubのページです。
今回はPowerShellを用いるので、公式ドキュメントにあるコードは利用せずその2つのファイルを自分がわかるフォルダの中にダウンロードして移動させます。

またcompose.ymlファイルはそのまま使えるのですが、もう一つの方のファイルがenv.exampleとなっています。
今回必要なのは.envファイルなのでファイルの名前を拡張子ごと変更します。
今回は公式ドキュメントに従って「.env」としました。

.envファイルの中のROOT_URLを編集することによってデフォルトの`http://localhost:3000`からドメイン名またはIPアドレスを用いたURLに変更できます。またTOKENを取得している場合はここで設定します。

compose.ymlの中身についてはrocketchatの立ち上げが終わった後に触れようと思います。

# Dockerの起動
準備ができたら、PowerShell内でcompose.ymlとenvファイルがあるフォルダまでcdで移動します。
移動したら`docker-compose up -d`と打つことによりdockerが起動します。

場合によっては「-bash: docker-compose: command not found」というエラーが出る時があります。
その際にはdocker-composeをインストールできているか`docker-compose -v`で確認した後、インストールができていなかったらインストールをしてください。

またcompose.ymlやenv.examlpleがあるところのREADME.mdには`docker-compose up -d`とあるのですが、公式ドキュメントのほうでは`docker compose up -d`となっており、これでやるとエラー(unknown shorthand flag: ‘d’ in -d)をはくので気を付けてください。
他の何かしらの言語であれば動くのかもしれないです。

ついている`-d` オプションは、コンテナをデタッチドモードで実行し、バックグラウンドで実行するためのものになります。

初回にdocker-compose up -d を行った時の画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617896/65f23008-719f-8b54-f69a-3ec2d97efa77.png)

`docker-compose up -d`を初めて行うと、このようにrocketchatサービスに必要なmongodbとrocket.chatをコンテナ上で扱うことができるようになります。

# rocket.chatが立ち上がっているかの確認
設定を触っていなければ`http://localhost:3000/`にアクセスすることによって確認が可能です。
ポート番号の変更やURLを変えた場合は変更した後のものを用いてください。

成功している場合、以下のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617896/bf6e6e88-54f5-24e3-6317-41922e797392.png)

今回はrocket.chatを用いるつもりはないので、ここで終わりとしてcompose.ymlの中身について書いていこうと思います。


# compose.ymlの中身について

コードについては公式のものをそのまま使っているので、ここへの記載は省略します。


この中身ではrocket.chatサービスとmongodbサービスの定義を行っています。

今回で設定したキーについてChatGptに解説してもらったのでそれを記載します。

* `image`: コンテナで使用するイメージを指定します。
* `restart`: コンテナが異常終了した場合に自動的に再起動するかどうかを指定します。
* `Volumes`: MongoDBのデータがホストのファイルシステムではなく、ボリュームに保存されるようになります。
* `labels`: Dockerコンテナに関する追加のメタデータを提供するためのラベルを指定します。Traefikなどのリバースプロキシが特定の設定を理解し、サービスを適切に処理できるようにするためのものでありその他の設定に使用されることがあります。
* `environment`: 環境変数を設定します。コンテナ内のプロセスが使用する環境変数を指定できます。
    1. KEY1=value1 
        * KEY1 という名前の環境変数を作成し、その値を value1 に設定します。
    1. ANOTHER_KEY=${VARIABLE:-default_value}
        * ANOTHER_KEY という名前の環境変数を作成します。VARIABLE が設定されている場合はその値を、設定されていない場合は default_value を使用します。
* `depends_on`: コンテナが依存している別のサービスやコンテナを指定します。依存しているコンテナが起動するまで待機します。
* `expose`: ポートを外部に公開します。ただし、これは他のサービスからアクセス可能にするだけで、実際のホストマシンのポートへのマッピングは行いません。
* `ports`: ホストマシンのポートとコンテナのポートをマッピングします。ホスト:コンテナの形式で指定します。

# 最後に
以前にaws上でとり組んだものを文字に起こしたのですが、以前とは手順が少し異なっていたので再現をするのに少し時間がかかってしまいました。
またこういったものを執筆、公開するということに一定の抵抗を感じるタイプなんですが、何をやったのかどこで詰まったのかというものの可視化になるので備忘録代わりに使ってみたいです。
Qiitaを使うのが初めてなので、もし何か直しておいた方がいいところがあれば教えてください。

ほんとに忘れててすみませんでした。

# 参考文献
公式ドキュメント
https://docs.rocket.chat/deploy/prepare-for-your-deployment/rapid-deployment-methods/docker-and-docker-compose/docker-containers#3.-installing-docker-and-docker-compose
https://github.com/RocketChat/Docker.Official.Image/tree/master/6.4