LoginSignup
2
5

More than 3 years have passed since last update.

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

Posted at

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

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5