Posted at

大人の事情でSlackが使えないのでRocket.ChatをBasic認証ありでdocker-composeで起動した


Background

チャットツール、便利ですよね。

でも大人の事情でSaaSを利用できないこともあるかと思います。プライベートではSlackなどを使っているのですが、大人の事情でビジネスでは使えず...

Rocket.Chatはそんな悩みを解決してくれるOSSのチャットツールの一つです。

この記事ではRocket.Chatをdocker-composeで起動してみます。これをオンプレや大人の事情をクリアしたクラウド上で起動すれば便利なチャットツールをGetできます!

この記事ではlocalhostの前提で書いてますが、オンプレやクラウドでもアクセスURLがドメインとかになるだけで基本一緒です。


Rocket.Chatを起動する

Rocket.Chatについては「Rocket.Chat/docker-compose.yml at develop · RocketChat/Rocket.Chat · GitHub」を参考にします。下のdocker-compose.ymlだとservices.appservices.mongoservices.mongo-init-replicaがそれにあたります。


docker-compose.yml

version: '2'

services:
app:
container_name: rocketchat_app
image: rocketchat/rocket.chat:latest
command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)'
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://localhost:3000 #TODO:実際のURLに更新
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
depends_on:
- mongo
ports:
- 3000:3000

mongo:
container_name: rocketchat_db
image: mongo:4.0
restart: unless-stopped
volumes:
- ./data/db:/data/db
- ./data/dump:/dump
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1

mongo-init-replica:
image: mongo:4.0
command: 'bash -c "for i in `seq 1 30`; do mongo mongo/rocketchat --eval \"rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})\" && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)"'
depends_on:
- mongo


$ docker-compose up

http://localhost:3000にアクセスすればRocket.Chatにアクセスできるはずです。


Basic認証をかける

Rocket.ChatにBasic認証をかけるために「GitHub - dtan4/nginx-basic-auth-proxy: Docker image of Nginx Proxy with Basic Auth」を利用させていただきます。Basic認証を設定できるPROXYを立ち上げることができます。下のdocker-compose.ymlservices.nginxがそれにあたり、BASIC_AUTH_USERNAMEBASIC_AUTH_PASSWORDがBasic認証の設定です。また、appにはnginxを介してアクセスするようにしたいのでappports設定を削除してます。


docker-compose.yml

version: '2'

services:
nginx:
container_name: rocketchat_nginx
image: quay.io/dtan4/nginx-basic-auth-proxy:latest
ports:
- 80:80
environment:
- BASIC_AUTH_USERNAME=xxxxxxxx #TODO: Basic認証のusername
- BASIC_AUTH_PASSWORD=xxxxxxxx #TODO: Basic認証のpassword
- PROXY_PASS=http://app:3000
depends_on:
- app

app:
container_name: rocketchat_app
image: rocketchat/rocket.chat:latest
command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)'
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://localhost:3000 #TODO:実際のURLに更新
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
depends_on:
- mongo

mongo:
container_name: rocketchat_db
image: mongo:4.0
restart: unless-stopped
volumes:
- ./data/db:/data/db
- ./data/dump:/dump
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1

mongo-init-replica:
image: mongo:4.0
command: 'bash -c "for i in `seq 1 30`; do mongo mongo/rocketchat --eval \"rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})\" && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)"'
depends_on:
- mongo


$ docker-compose up -d

これでhttp://localhostにアクセスするとBasic認証を聞かれます。Basic認証をクリアするとRocket.Chatにアクセスできるはずです。

ちなみにhttp://localhost:3000には直接アクセスできなくなっています。


Reference