Cómo instalar el servidor Rocket.Chat en Rocky Linux

Rocket.Chat es un servidor de chat de código abierto desarrollado en JavaScript utilizando el framework Meteor.js. Te permite comunicarte de forma segura en tiempo real a través de múltiples dispositivos. Permite a las empresas y organizaciones construir su propio servidor de chat para las comunicaciones internas con sus empleados. Se integra con canales sociales, chatbots, redes sociales y aplicaciones de productividad. Permite monitorizar flujos de trabajo DevOps con integraciones a través de Bitbucket, Jira, GitLab, Confluence, Bamboo, etc. Está disponible en múltiples plataformas de escritorio y móviles. Hay dos ediciones de Rocket.Chat disponibles, una es una edición comunitaria gratuita y la otra es una edición empresarial.

En este tutorial, instalaremos la edición comunitaria gratuita del servidor Rocket.Chat en una máquina Rocky Linux.

Requisitos previos

  • Un servidor que ejecute Rocky Linux con un mínimo de 1 GB de RAM para un servidor de hasta 200 usuarios, y hasta 50 usuarios activos simultáneamente. Si quieres alojar a más de 200 usuarios, debes optar por un servidor con un mínimo de 2 GB de RAM.
  • Un nombre de dominio que apunte al servidor. Para nuestro tutorial, utilizaremos el dominio rocketchat.example.com.
  • Un usuario no usuario con privilegios de root.
  • SELinux está desactivado.
  • Todo está actualizado.
    $ sudo dnf update
    
  • Instala los paquetes de utilidades básicas. Puede que algunos ya estén instalados.
    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar la siguiente salida.

cockpit dhcpv6-client ssh

Moodle necesita los puertos HTTP y HTTPS para funcionar. Ábrelos.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Recarga el cortafuegos para aplicar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instalar Docker y Docker Compose

Rocky Linux incluye una versión antigua de Docker. Para instalar la última versión, instala primero el repositorio oficial de Docker.

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Instala la última versión de Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io

Activa y ejecuta el demonio Docker.

$ sudo systemctl enable docker --now

Comprueba que se está ejecutando.

 docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-08-20 22:35:19 UTC; 1s ago
     Docs: https://docs.docker.com
 Main PID: 82575 (dockerd)
    Tasks: 7
   Memory: 31.1M
   CGroup: /system.slice/docker.service
           ??82575 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
...

Por defecto, Docker requiere privilegios de root. Si quieres evitar utilizar sudo cada vez que ejecutes el comando docker, añade tu nombre de usuario al grupo docker.

$ sudo usermod -aG docker $(whoami)

Tendrás que salir del servidor y volver a entrar como el mismo usuario para activar este cambio o utilizar el siguiente comando.

$ su - ${USER}

Confirma que tu usuario se ha añadido al grupo Docker.

$ groups
navjot wheel docker

Paso 3 – Instala Docker Compose

Docker Compose está disponible como plugin. Comprueba la última versión de Docker Compose disponible en su página de versiones de Github. En el momento de escribir este tutorial, la última versión disponible es la 2.10.0.

Crea el directorio para los plugins de Docker.

$ mkdir ~/.docker/cli-plugins -p

Descarga el plugin Docker compose en el directorio.

$ curl -SL https://github.com/docker/compose/releases/download/v2.10.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

Establece los permisos para que el plugin sea ejecutable.

$ chmod +x ~/.docker/cli-plugins/docker-compose

Verifica la instalación.

$ docker compose version

Obtendrás el siguiente resultado.

Docker Compose version v2.10.0

Paso 4 – Instala RocketChat

Crea un directorio para almacenar los archivos Docker.

$ mkdir ~/rocketchat

Cambia al directorio.

$ cd ~/rocketchat

Crea y abre el archivo Rocketchat Docker compose para editarlo.

$ nano docker-compose.yml

Pega en él el siguiente código.

volumes:
  mongodb_data:
  rocketchat-uploads:

services:
  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:5.0.4
    restart: on-failure
    volumes:
      - rocketchat-uploads:/app/uploads
    environment:
      MONGO_URL: mongodb://mongodb:27017/rocketchat?replicaSet=rs0
      MONGO_OPLOG_URL: mongodb://mongodb:27017/local?replicaSet=rs0
      ROOT_URL: https://rocketchat.example.com
      PORT: 3000
      DEPLOY_METHOD: docker
      Accounts_UseDNSDomainCheck: 'false'
      MAIL_URL: 'smtps://AmazonSESuser:[email protected]:587'
    depends_on:
      - mongodb
    expose:
      - 3000
    ports:
      - 3000:3000
    healthcheck:
      test: >
         /usr/local/bin/node -e '
         const http = require("http");
         const options = {
           host: "localhost",
           port: 3000,
           path: "/api/info",
           timeout: 2000
         };
         const healthCheck = http.request(options, (res) => {
           console.log(`HEALTHCHECK STATUS: $${res.statusCode}`);
           if (res.statusCode == 200) {
             process.exit(0);
           } else {
             process.exit(1);
           }
         });
         healthCheck.on("error", function (err) {
           console.error("ERROR");
           process.exit(1);
         });
         healthCheck.end();'
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 60s

  mongodb:
    image: bitnami/mongodb:4.4
    restart: on-failure
    volumes:
      - mongodb_data:/bitnami/mongodb
    environment:
      MONGODB_REPLICA_SET_MODE: primary
      MONGODB_REPLICA_SET_NAME: rs0
      MONGODB_PORT_NUMBER: 27017
      MONGODB_INITIAL_PRIMARY_HOST: mongodb
      MONGODB_INITIAL_PRIMARY_PORT_NUMBER: 27017
      MONGODB_ADVERTISED_HOSTNAME: mongodb
      MONGODB_ENABLE_JOURNAL: 'true'
      ALLOW_EMPTY_PASSWORD: 'yes'
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongo mongodb:27017/test --quiet
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 60s

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Inicia el contenedor Docker.

$ docker compose up -d

Comprueba el estado de los contenedores para asegurarte de que funcionan correctamente.

CONTAINER ID   IMAGE                                               COMMAND                  CREATED         STATUS                   PORTS                                       NAMES
59cd748e684f   registry.rocket.chat/rocketchat/rocket.chat:5.0.4   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes (healthy)   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   rocketchat-rocketchat-1
1fdabedf8681   bitnami/mongodb:4.4                                 "/opt/bitnami/script…"   2 minutes ago   Up 2 minutes (healthy)   27017/tcp                                   rocketchat-mongodb-1

También puedes utilizar el siguiente comando para comprobar el estado.

$ docker compose ps
NAME                      COMMAND                  SERVICE             STATUS              PORTS
rocketchat-mongodb-1      "/opt/bitnami/script…"   mongodb             running (healthy)   27017/tcp
rocketchat-rocketchat-1   "docker-entrypoint.s…"   rocketchat          running (healthy)   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp

En este punto, puedes comprobar tu instalación iniciando la URL http://rocketchat.example.com:3000 o http://<serverIPaddress>:3000 en el navegador. El siguiente paso es configurar SSL y poner la instalación detrás de un servidor proxy.

Paso 5 – Instalar SSL

Para instalar un certificado SSL utilizando Let’s Encrypt, necesitamos instalar la herramienta Certbot.

En primer lugar, necesitas descargar e instalar el repositorio EPEL.

$ sudo dnf install epel-release

Ejecuta los siguientes comandos para instalar Certbot.

$ sudo dnf install certbot

Generar el certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d rocketchat.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/rocketchat.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Crea un directorio raíz web de desafío para la renovación automática de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero, crea el archivo /etc/cron.daily/certbot-renew y ábrelo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pega el siguiente código.

#!/bin/sh
certbot renew --cert-name rocketchat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Cambia los permisos del archivo de tareas para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 6 – Instalar y configurar Nginx

Vamos a instalar la última versión de Nginx. Crea y abre el archivo /etc/yum.repos.d/nginx.repo para editarlo.

$ sudo nano /etc/yum.repos.d/nginx.repo

Pega en él las siguientes líneas.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Instala Nginx.

$ sudo dnf install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.0

Activa e inicia el servicio Nginx.

$ sudo systemctl enable nginx --now

Crea y abre el archivo /etc/nginx/conf.d/rocket.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/rocket.conf

Pega en él el siguiente código.

# Redirect all non-encrypted to encrypted
    server {
        listen 80;
        listen [::]:80;
        server_name rocketchat.example.com;
        return 301 https://$host$request_uri;
    }

# HTTPS Server
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name rocketchat.example.com;

        access_log /var/log/nginx/rocketchat_access.log main;
        error_log /var/log/nginx/rocketchat_error.log;

        ssl_certificate /etc/letsencrypt/live/rocketchat.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/rocketchat.example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/rocketchat.example.com/chain.pem;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:20m;
        ssl_session_tickets off;
        ssl_session_timeout 180m;
        ssl_stapling on;
        ssl_stapling_verify on;

        location / {
            proxy_pass http://rocketchat.example.com: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-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Nginx-Proxy true;
            proxy_redirect off;
        }
    }

Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. La configuración anterior permite a Nginx actuar como servidor proxy y enlazarse al puerto 3000 en localhost.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl restart nginx

Paso 7 – Acceder y configurar RocketChat

Inicia la URL https://rocketchat.example.com en tu navegador y aparecerá la siguiente pantalla de configuración.

Pantalla de configuración del chat Rocket

Rellena tus datos de administrador y pulsa el botón Siguiente para continuar. A continuación, se te pedirá que introduzcas los datos de la organización.

Configuración de la organización del chat Rocket

Rellena los datos de tu organización y pulsa el botón Siguiente para continuar. Se te pedirá que registres tu servidor de chat en Rocket Cloud si quieres acceder a las aplicaciones del mercado y a más funciones.

Registro en Rocket Chat Cloud

Rellena los datos y haz clic en Registrar si estás interesado. Si no, haz clic en el enlace Continuar como autónomo para continuar. Si te has registrado en Nube, se enviará un correo de verificación.

Pantalla de verificación del chat Rocket

Haz clic en el enlace del correo de verificación para comprobar tu registro.

Correo de verificación del chat Rocket

Tras la verificación, accederás al panel de control de Rocket Chat.

Rocket Chat Dashboard

Configurar los ajustes SMTP

Visita la página de administración haciendo clic en la imagen de tu perfil en la parte superior izquierda de la página y haciendo clic en el enlace Administración.

Menú Perfil del Chat Rocket

Haz clic en el enlace Configuración de la barra lateral izquierda.

Menú de Configuración del Chat Rocket

En la página de configuración, escribe Correo electrónico en el cuadro de búsqueda para que aparezca el botón Correo electrónico.

Botón de configuración del correo electrónico del chat Rocket

Haz clic en el botón Abrir bajo la sección Correo electrónico para abrir la página de configuración del correo electrónico. En la página siguiente, despliega la sección SMTP de la página.

Configuración SMTP de Rocket Chat

Rellena los datos SMTP y pulsa el botón Guardar cambios en la parte superior derecha para activar el botón Enviar un correo de prueba a mi usuario. Se te pedirá tu contraseña para guardar la configuración SMTP.

Para nuestro tutorial, utilizaremos Amazon SES como servidor de correo con 587 como puerto. Desmarca el botón situado encima del botón Pool. La función del botón es ignorar TLS, pero no está etiquetado correctamente.

Deberías haber recibido un correo de prueba similar si todo se ha configurado correctamente.

Email de prueba del chat Rocket

Iniciar sesión en Rocket.Chat Cloud

Para utilizar las funciones de Rocket.Chat Cloud, tienes que iniciar sesión. Visita el menú Administración >> Servicios de Conectividad y te aparecerá la siguiente página.

Servicios de conectividad Rocket Chat

Haz clic en el botón Iniciar sesión en Rocket.Chat Cloud para iniciar el proceso. Accederás a la página de inicio de sesión, donde se te pedirá que introduzcas el identificador de correo electrónico con el que te registraste durante el proceso de configuración.

Inicio de sesión en la nube Rocket.Chat

Haz clic en el enlace Enviar inicio de sesión para continuar. Recibirás un correo electrónico con el enlace de inicio de sesión.

Enlace de inicio de sesión de Rocket.Chat

Haz clic en el enlace de inicio de sesión para completar el proceso. Se te pedirá que autorices a tu servidor a iniciar sesión con la cuenta Cloud.

Autorización en la nube Rocket.Chat

Haz clic en el botón Autorizar para proceder y volver a la página de Servicios de Conectividad. Ya has iniciado sesión en la nube.

Inicio de sesión con éxito en Rocket Chat Cloud

Instalar y utilizar aplicaciones en la nube de Rocket.Chat

Ahora puedes instalar aplicaciones en la Nube a través de la página Administración >> Aplicaciones. Vamos a instalar la aplicación GIPHY en nuestro servidor. Haz clic en el botón Obtener para proceder a la instalación.

Instalación de Rocket Chat Apps

Para configurar la aplicación, haz clic en el nombre de la aplicación en la página Aplicaciones y accederás a la página de detalles de la aplicación. Desde ahí, puedes configurar los ajustes y empezar a utilizar la aplicación.

Ajustes de la aplicación Rocket Chat Giphy

Rellena los ajustes y haz clic en el botón Guardar cambios para completar la configuración de la aplicación.

Vuelve al panel de Rocket Chat y visita el tablón de mensajes. Para utilizar la aplicación GIPHY, escribe /giphy <search term> y verás un montón de GIFs relacionados con tu consulta.

Rocket Chat GIPHY Buscar

Pulsa el botón Intro para enviar el GIF a la pantalla de mensajes.

Rocket Chat Mensaje GIF

Paso 8 – Copia de seguridad y restauración de Rocket Chat

Hacer una copia de seguridad de Rocket Chat requiere que hagas una copia de seguridad de la base de datos MongoDB.

Detén el contenedor Docker.

$ docker compose down

Ejecuta el siguiente comando para listar la etiqueta de la imagen docker MongoDB.

$ docker ps -a

Para nuestro tutorial, la etiqueta de la imagen MongoDB es rocketchat_mongo_1. Ejecuta el siguiente comando para exportar la base de datos a un archivo.

$ docker exec rocketchat_mongo_1 sh -c 'mongodump --archive' > db.dump

Para restaurar la base de datos, utiliza el siguiente comando.

$ docker exec -i <database_name> sh -c 'mongorestore --archive' < db.dump

Paso 9 – Actualizar Rocket Chat

Actualizar Rocket Chat requiere que sigas algunos comandos. Los datos no se ven afectados por el proceso de actualización. Extrae la última versión de la imagen de Rocket Chat.

$ docker pull registry.rocket.chat/rocketchat/rocket.chat:latest

Detén el cubo existente.

$ docker compose stop rocketchat

Elimina el contenedor existente.

$ docker compose rm rocketchat

Inicia Rocket Chat creando un nuevo contenedor.

$ docker compose up -d rocketchat

Conclusión

Con esto concluye nuestro tutorial sobre la instalación del servidor Rocket.Chat en una máquina Rocky Linux 8. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...