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.app
、services.mongo
、services.mongo-init-replica
がそれにあたります。
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.yml
のservices.nginx
がそれにあたり、BASIC_AUTH_USERNAME
、BASIC_AUTH_PASSWORD
がBasic認証の設定です。また、app
にはnginx
を介してアクセスするようにしたいのでapp
のports
設定を削除してます。
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
には直接アクセスできなくなっています。