Rocket.Chat es un sistema de chat open source que facilita la comunicación de equipos, sustituyendo los correos electrónicos por canales, de forma similar a Slack.
Puedes probar el servicio registrándote en https://open.rocket.chat.
Crear el VPS
Vamos a instalar en un servidor de 1 vCore, con 2GB de RAM y 10GB de disco duro. Usaremos la imagen de Docker con Ubuntu 18.04. Como siempre, los recursos variarán dependiendo del número de usuarios que vayan a usar el sistema.
Es necesario abrir los siguientes puertos en la configuración del Firewall:
- 22/TCP: para la conexión a través de SSH
- 80/TCP (opcional): en principio la conexión será por HTTPS, pero se puede abrir por motivos de desarrollo y testing.
- 443/TCP: para dar el servicio a través de HTTPS
Antes de nada, necesitamos instalar: docker-compose: apt install docker-compose
Instalación
Como se ha dicho, vamos a utilizar Docker para desplegar Rocket, creando los siguientes contenedores:
- Rocket.Chat
- MongoDB: albergará la base de datos
El servidor web Nginx y Let's Encrypt no los vamos a desplegar en contenedores.
Nginx y Let's Encrypt
Para instalar Nginx en nuestro servidor: apt install nginx
Debemos configurar un certificado SSL para permitir el acceso por HTTPS. Lo más recomendable es usar un certificado verificado, en nuestro caso vamos a usar el de Let's Encrypt.
Instalamos certbot:
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install certbot python-certbot-nginx
Cambiamos el archivo de configuración de nginx vim /etc/nginx/sites-available/default
:
# HTTPS Server
server {
listen 443 ssl;
server_name DOMINIO;
error_log /var/log/nginx/rocketchat_error.log;
location / {
proxy_pass DOMINIO:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
Reiniciamos nginx: service nginx configtest && service nginx restart
y después ejecutamos certbot --nginx
:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: DOMINIO
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for DOMINIO
Using default address 80 for authentication.
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/default
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
No matching insecure server blocks listening on port 80 found.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled
DOMINIO
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=DOMINIO
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/DOMINIO/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/DOMINIO/privkey.pem
Your cert will expire on 2020-07-12. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Docker
Primero vamos a crear directorios necesarios para los volúmenes de Docker:
mkdir -p /var/www/rocket.chat/data/runtime/db
mkdir -p /var/www/rocket.chat/data/dump
Creamos el archivo docker-compose vim /var/www/rocket.chat/docker-compose.yml
y le añadimos el siguiente código:
{YAML}
version: '2'
services:
rocketchat:
image: 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=DOMINIO
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- Accounts_UseDNSDomainCheck=false
depends_on:
- mongo
ports:
- 3000:3000
mongo:
image: mongo:4.0e
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
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
Y ya podemos acceder en https://DOMINIO a nuestro Rocket.chat (solo funcionará la conexión por HTTPS)
Para terminar, debemos programar que se ejecute en el inicio nginx, por lo que ejecutamos:`systemctl enable nginx
Nota
Puede que al principio, cuando se está inciando aparezca un error 502: Bad Gateway, lo cual se soluciona esperando a que se cargue el servicio, en un par de minutos como máximo.
Configuración
Cuando accedamos, la primera pantalla que veremos será la siguiente:
En la que nos pide los datos para el administrador del sistema.
Después nos pedirá ciertos datos para mostrar e información sobre el servidor:
Uso
Si estás familirializado con otras herrmientas similares como Slack, su uso te resultará muy sencillo.
Las conversaciones se agrupan por canales. Al principio solo existirá uno general en el que todos los usuarios que se registren accederán. Puedes crear los grupos que quieras, tanto públicos como privados.
El administrador del sitio además tiene varios informes a los que puede acceder en la pestaña correspondiente, así como instalar extensiones (como por ejemplo la de Jitsi, para realizar videoconferencias) o gestionar a los usuarios.
Para ver más información sobre las posibilidades de esta herramienta, se recomienda visitar su documentación.
CC-BY - Este artículo ha sido redactado por David Población, colaborador habitual de Clouding.