7.0 KiB
weight | title | date | draft | summary | categories | tags | ||||
---|---|---|---|---|---|---|---|---|---|---|
4 | Instalación de Rocket Chat en Docker | 2021-03-07T17:24:04+0100 | false | Instalación de Rocket Chat en Docker |
|
|
Como instalar el servicio Rocket.Chat sobre Docker con Traefik v2.
Rocket Chat sobre Docker tras Traefik v2
Rocketchat es un interesante servicio de chat que es software libre y abierto.
Directorios de trabajo
{{< admonition type=abstract title="Referencias" state=open >}}
Para configurar el servicio Rocketchat seguimos las siguientes referencias:
{{</ admonition >}}
Para realizar la instalación de Rocketchat suponemos que tenemos un servicio Docker instalado con Traefik v2 funcionando como proxy inverso. Por ejemplo como describimos [aquí]({{< relref "notes_traefik/#ejemplo03-una-configuraci%C3%B3n-sencilla-para-empezar-con-traefik-en-producci%C3%B3n"
}})
Partimos del fichero docker-compose.yml
que nos proponen en el
github del
proyecto
Para ello creamos un directorio para nuestra configuración docker del Rocket Chat:
mkdir -p ~/work/010_rocketchat/{mongo, rocketchat}
touch ~/work/010_rocketchat/docker-compose.yml
Configuración del contenedor Docker
Modificamos el fichero que nos proponen en el github:
- Fijamos las versiones concretas a utilizar de las imágenes Rocket.Chat y Mongodb
- Configuramos el host para que use HTTPS
- Conectamos los contenedores de Rocket.Chat y Mongodb a la red backend y les asignamos direcciones IP manualmente (backend es una red interna de nuestra configuración Docker)
- Conectamos el contenedor de Rocket.Chat a la red frontend (puesto que tendrá que comunicarse con Traefik), asignando la dirección IP explicitamente.
- El servicio estará disponible a través de Traefik así que quitamos
la sección
ports
(no queremos puertos mapeados a nuestro host) y ... - añadimos la sección
labels
a la definición del serviciorocketchat
en nuestro ficherodocker-compose.yml
para definir los enrutamientos Traefik al servicio Rocket.Chat - No es necesario añadir el servidor de correo SMTP al entorno, podremos configurarlo sin problemas desde el interfaz de administración del chat una vez lanzados los contenedores de servicios.
- Hemos corregido la activación de la replica de la base de datos Mongo, en realidad no estamos replicando nada, pero queda todo listo para dar redundancia en el futuro si así lo decidimos. (Más info aquí)
version: '3'
services:
rocketchat:
image: rocketchat/rocket.chat:3.12.0
container_name: rocketchat
networks:
frontend:
ipv4_address: 172.21.0.100
backend:
ipv4_address: 172.20.0.100
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:
- ./rocketchat/uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=https://chat.comacero.com
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
# - MAIL_URL=smtp://mail.server.com
# - HTTP_PROXY=http://proxy.domain.com
# - HTTPS_PROXY=http://proxy.domain.com
depends_on:
- mongo
# ports:
# - 80:3000
labels:
- traefik.enable=true
- traefik.http.routers.rocket.entrypoints=https
- traefik.http.routers.rocket.rule=Host(`chat.yourdomain.com`)
- traefik.http.routers.rocket.tls.certresolver=letsencrypt
- traefik.http.services.rocket.loadbalancer.server.port=3000
- traefik.docker.network=frontend
mongo:
image: mongo:4.0
container_name: mongo
networks:
backend:
ipv4_address: 172.20.0.110
restart: unless-stopped
volumes:
- ./mongo/data/db:/data/db
- ./mongo/data/dump:/dump
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
# 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)
mongo-init-replica:
image: mongo:4.0
container_name: mongo_replica
networks:
- backend
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
networks:
frontend:
external: true
backend:
external: true
Configuraciones adicionales
- Evidentemente necesitamos una entrada en nuestra zona DNS que apunte al chat ya que hemos usado un subdominio.
- En la documentación de Rocket Chat nos recomiendan añadir la linea
chat.yourdomain.com
a nuestro fichero/etc/hosts
de forma que apunte a127.0.0.1
(localhost) - Necesitamos un servidor SMTP de correo. Nuestro proveedor del dominio lo da gratis para volúmenes bajos de correo y es el que hemos usado, pero también hay algunas opciones en Internet que se pueden usar.
- Una vez arrancado el servicio daremos de alta un usuario administrador para el Rocket Chat conectando a https://chat.yourdomain.com
- Configuramos las opciones del servidor de correo (para poder verificar las direcciones de correo de los usuarios que se registren y poder enviar contraseñas en caso de reseteo)
- Nos damos de alta en Rocket Chat Cloud que nos proporcionará gratis servicios de doble factor de autenticación (via correo), para nuestro servicio.
- Configuramos la conexión de nuestro servidor Rocket Chat con el cloud.rocket.chat. Basta con añadir el token, que nos dan en el paso anterior, mediante el interfaz de administración de nuestro servicio.
- Revisamos cuidadosamente como queremos dejar la configuración para el registro de nuevos usuarios. Parece recomendable activar al menos que solo se puedan loguear usuarios con el correo verificado y probablemente deberíamos activar la aprobación manual de nuevos usuarios.
{{< admonition type=warning title="Seguridad" state=open >}}
Como siempre que abrimos servicios a internet, conviene ir con cuidado y tomar todo tipo de precauciones. Si dejamos abierto el registro de nuevos usuarios nos podemos encontrar con una avalancha de peticiones de nuevos usuarios por parte de bots.
{{</ admonition >}}