Instalación mediante Docker-Compose


Este post tratará la instalación de Rocket.Chat sobre Docker con la utilidad de dockercompose.

Publicado en April 15, 2021 by ManuelLoraRoman

Docker dockercompose Rocket.Chat Installation

3 min LECTURA

Es posible, como hemos visto en clase, que se puede automatizar el proceso de creación de contenedores mediante un fichero .yml. Por lo tanto, vamos a crear ese fichero con el siguiente contenido:

version: '2'

services:
  rocketchat:
    image: registry.rocket.chat/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://rocketchat:3000
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - MAIL_URL=smtp://smtp.email
    depends_on:
      - mongo
    ports:
      - 3000:3000

  mongo:
    image: mongo:4.0
    restart: unless-stopped
    volumes:
     - ./data/db:/data/db
     #- ./data/dump:/dump
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 

  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: 'mongo:27017' } ]})\" &&
          s=$$? && break || s=$$?;
          echo \"Tried $$i times. Waiting 5 secs...\";
          sleep 5;
        done; (exit $$s)"
    depends_on:
      - mongo

#  mongo-init-replica:
#    image: mongo:4.0
#    command: 'mongo mongo/rocketchat --eval "rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})"'
#    depends_on:
#      - mongo


# hubot, the popular chatbot (add the bot user first and change the password before starting this image)
  hubot:
    image: rocketchat/hubot-rocketchat:v0.1.4
    environment:
      - ROCKETCHAT_URL=rocketchat:3000
      - ROCKETCHAT_ROOM=
      - ROCKETCHAT_USER=rocket.cat
      - ROCKETCHAT_PASSWORD=password
      - LISTEN_ON_ALL_PUBLIC=true
      - BOT_NAME=bot
      - RESPOND_TO_EDITED=true
      - RESPOND_TO_DM=true
# 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
# this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier
    ports:
      - 3001:8080

  smtp:
    image: namshi/smtp
    environment:
      - RELAY_DOMAINS=:example.com:example.de

  nginx:
    image: nginx:latest
    volumes:
      - ./certs/host.example.com.crt:/etc/nginx/cert.crt
      - ./certs/host.example.com.key:/etc/nginx/cert.key
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 8066:443


Este fichero dockercompose realizará lo siguiente:

  • De primeras, inicia el servicio de mongo.

  • Después inicia otro servicio llamado mongo-init-replica, que esperará a que el servicio de mongo esté listo, para conectarse a él e inicializarlo.

  • Por último, inicia el servicio de Rocket.Chat, que al igual que el anterior servicio, esperará a que mongo esté listo.

  • También iniciará el servicio de smtp y el servicio de nginx que funcionará como proxy inverso.

Para iniciar el escenario que hemos montado, vamos a ejecutar el siguiente comando:

docker-compose up -d



Podemos ver las características del despliegue:


Y ya tendríamos nuestra aplicación de Rocket.Chat funcionando.

En caso de querer manejar logs y demás, podemos descomentar las líneas del montaje de volúmenes.

También es posible instalar Rocket.Chat en alta disponibilidad con un replicaset de Mongodb como backend, pero esta es una opción a tener en cuenta más adelante.

Una vez ya desplegado, veremos la IP de acceso de la máquina deploy_rocketchat_1 (en mi caso, 172.18.0.3) y accederemos mediante el navegador:



Y una vez en la página, podemos iniciar sesión de manera normal:



Todo este funcionamiento es si no hemos añadido el proxy inverso a nuestro docker-compose, pero en caso de haberlo añadido, accederemos a la página mediante el server_name de nginx y el puerto correspondiente.

A continuación, vamos a pasar al apartado de conexión de usuario.

< Instalación mediante systemd Conexiones y usuarios >