You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
7.0 KiB
202 lines
7.0 KiB
9 months ago
|
---
|
||
|
weight: 4
|
||
|
title: "Instalación de Rocket Chat en Docker"
|
||
|
date: 2021-03-07T17:24:04+0100
|
||
|
draft: false
|
||
|
summary: "Instalación de Rocket Chat en Docker"
|
||
|
categories:
|
||
|
- notes
|
||
|
tags:
|
||
|
- docker
|
||
|
- traefik
|
||
|
- rocketchat
|
||
|
---
|
||
|
|
||
|
Como instalar el servicio Rocket.Chat sobre Docker con Traefik v2.
|
||
|
|
||
|
<!--more-->
|
||
|
|
||
|
# Rocket Chat sobre Docker tras Traefik v2
|
||
|
|
||
|
[Rocketchat](https://rocket.chat/) es un interesante servicio de chat
|
||
|
que [es software libre y
|
||
|
abierto](https://github.com/RocketChat/Rocket.Chat/blob/master/LICENSE).
|
||
|
|
||
|
|
||
|
## Directorios de trabajo
|
||
|
|
||
|
{{< admonition type=abstract title="Referencias" state=open >}}
|
||
|
|
||
|
|
||
|
Para configurar el servicio _Rocketchat_ seguimos las siguientes
|
||
|
referencias:
|
||
|
|
||
|
- [github del proyecto rocketchat](https://github.com/RocketChat/Rocket.Chat)
|
||
|
- [Realtarget traefik-docker-stack](https://github.com/realtarget/traefik2-docker-stack)
|
||
|
|
||
|
{{</ 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](https://github.com/RocketChat/Rocket.Chat/blob/develop/docker-compose.yml)
|
||
|
|
||
|
Para ello creamos un directorio para nuestra configuración _docker_ del _Rocket Chat_:
|
||
|
|
||
|
```bash
|
||
|
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 servicio
|
||
|
`rocketchat` en nuestro fichero `docker-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í](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/))
|
||
|
|
||
|
```yaml
|
||
|
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 a `127.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](https://cloud.rocket.chat)
|
||
|
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 >}}
|