### Minimum File Structure ``` /home/ └── ~/ └── docker/ └── rocketchat/ ├── .env ├── docker-compose.yml ``` ### Add to Caddyfile (from ~/docker/caddy) Remember to `docker exec -w /etc/caddy caddy caddy reload` after editing your Caddyfile. ``` subdomain.example.com { reverse_proxy rocketchat:3000 } ``` ### .env Set your environment variables. SMTP service is needed if you want rocketchat to be able to send emails. ``` # General MY_DOMAIN=example.com DOCKER_MY_NETWORK=caddy_net # Rocket Chat Specific ROOT_URL=https://subdomain.example.com SMTP_MAIL_URL=smtp.mailgun.org ROCKETCHAT_BOT_PASSWORD=samplebotpassword ``` ### docker-compose.yml ``` version: '2' services: rocketchat: image: rocketchat/rocket.chat:latest container_name: rocketchat # ports: # - 3000:3000 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=${ROOT_URL} - MONGO_URL=mongodb://rocketchat-db:27017/rocketchat - MONGO_OPLOG_URL=mongodb://rocketchat-db:27017/local - MAIL_URL=${SMTP_MAIL_URL} # - HTTP_PROXY=http://proxy.domain.com # - HTTPS_PROXY=http://proxy.domain.com depends_on: - rocketchat-db labels: - "traefik.backend=rocketchat" - "traefik.frontend.rule=Host: your.domain.tld" rocketchat-db: image: mongo:4.0 container_name: rocketchat-db restart: unless-stopped volumes: - ./data/db:/data/db #- ./data/dump:/dump command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1 labels: - "traefik.enable=false" # this container's job is just run the command to initialize the replica set. # it will run the command and remove himself (it will not stay running) rocketchat-db-init-replica: image: mongo:4.0 command: > bash -c "for i in `seq 1 30`; do mongo rocketchat-db/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: - rocketchat-db # hubot, the popular chatbot (add the bot user first and change the password before starting this image) rocketchat-hubot: image: rocketchat/hubot-rocketchat:latest container_name: rocketchat-hubot restart: unless-stopped environment: - ROCKETCHAT_URL=rocketchat:3000 - ROCKETCHAT_ROOM=GENERAL - ROCKETCHAT_USER=bot - ROCKETCHAT_PASSWORD=${ROCKETCHAT_BOT_PASSWORD} - BOT_NAME=bot # you can add more scripts as you'd like here, they need to be installable by npm - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics depends_on: - rocketchat labels: - "traefik.enable=false" volumes: - ./scripts:/home/hubot/scripts # this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier networks: default: external: name: ${DOCKER_MY_NETWORK} ``` ### docker-compose up -d After you have the .env and docker-compose files set up in this directory. Do a ```docker-compose up -d``` to start the containers. It should take about 30-60 seconds to launch. ### Finalization - Hubot After you can access your rocketchat server, you can stop the hubot errors for happening by creating a new bot user in Administration > Users > + New. Then create a bot with username bot, and email bot@yourdomain.com and password to match the password you used in the .env file. Lastly, for role choose bot and hit save. Now if you do a `docker logs rocketchat-hubot` you won't see any more errors and the container will stop restarting over and over again.