備忘録のために載せておきます。
※Dockerやhubotは他に詳しい記事があるので触れません。
Rocket.chatって?
Slackライクなチャットツール。
https://rocket.chat/
一年ほど前、コミュニケーションツールとしてチャットをプロジェクトで導入する際に
サーバインストール型のチャットツールを探してこれに行きつきました。
周りで誰も使ったことがありませんでしたが、とりあえずお試しで入れたのが経緯。
なんだかんだで1年半ほどプロジェクト内で運用しています。
Dockerレシピ
rocketchat:
image: rocketchat/rocket.chat:latest
environment:
- MONGO_URL=mongodb://mongodb/rocketchat
- ROOT_URL=http://localhost:80
links:
- mongodb
ports:
- 80:3000
hubot:
image: rocketchat/hubot-rocketchat
environment:
- PORT=5080
- ROCKETCHAT_URL=[任意のドメイン]:80
- ROCKETCHAT_ROOM=
- LISTEN_ON_ALL_PUBLIC=true
- ROCKETCHAT_USER=[hubot用ユーザID]
- ROCKETCHAT_PASSWORD=[hubot用パスワード]
- BOT_NAME=[任意のhubot名]
- EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics,hubot-reddit,hubot-bofh,hubot-bookmark,hubot-shipit,hubot-maps,hubot-cron,hubot-jenkins-notifier
- HUBOT_JENKINS_URL=[連携するjenkinsのURL]
- HUBOT_JENKINS_AUTH=[jenkinsのアカウント:パスワード]
volumes:
- /usr/local/share/hubot/scripts:/home/hubot/scripts
- /etc/localtime:/etc/localtime:ro
links:
- rocketchat:rocketchat
ports:
- 3001:5080
mongodb:
image: mongo
ports:
- 27017
volumes:
- /srv/docker/mongodb/db:/data/db
一部解説
下記はJenkinsのジョブをhubot内から実行するための設定です。
- EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics,hubot-reddit,hubot-bofh,hubot-bookmark,hubot-shipit,hubot-maps,hubot-cron,hubot-jenkins-notifier
- HUBOT_JENKINS_URL=[連携するjenkinsのURL]
- HUBOT_JENKINS_AUTH=[jenkinsのアカウント:パスワード]
下記はRocket.chatのログはmongoDB内に格納されるため
コンテナを消してもログを残すためにマウントの設定を入れています。
ホスト側のパスはもちろん任意です。
volumes:
- /srv/docker/mongodb/db:/data/db
運用する中で起きた問題
ID管理
開発環境には他サービスも並行して動いており
導入したチャットでも新たにID管理するのは面倒だから何とかならない?
といったことがありました。
対処として、Rocket.Chatには特定サービスとのoAuth認証機能が備わっていましたので
今回のケースではバージョン管理として既に使用していたGitlabに集約することに。
hubotコンテナが落ちる
hubotには導入したプラグイン次第で様々なコマンドを使用させることができます。
メンバーの利用状況を見ていると、通知機能(タスク登録)がよくつかわれていたようです。
Cron形式で登録することができ、お昼や定例などのアラーム代わりに使っているのが見受けられました。
ある日突然、hubotが反応しなくなりdocker ps -a
で状態を見ると、hubotコンテナが落ちていました。
docker logs
にてログを出力したところ、チャットの全ルームの過去ログが流れ出しました。
原因はおそらく、割り当てたメモリ枯渇ではないかなと推測しています。
ちなみにDockerはAWSのEC2上で起動しております。
対処として、docker rm [コンテナ名]
でコンテナ削除を行い、docker-compuse up -d
で起動しました。
hubotが持っているログは不要なのでばっさり切り捨て。
ただこの方法だと、上記にありました通知機能で登録したタスクがすべてなくなってしまいますので
コアな運用に用いている場合はhubotコンテナもホストにマウントするなど、一工夫必要かなと思います。