GNU/Linux >> Tutoriales Linux >  >> Linux

Guía completa para Rocket.Chat de alojamiento propio con Docker

Rocket.Chat es una plataforma de comunicación de código abierto ideal para la colaboración entre organizaciones, equipos o miembros del foro.

Lo usamos para nuestra comunicación interna en Linux Handbook y es FOSS y nos encanta.

Ahora, puede optar por una instancia administrada de Rocket.Chat de los creadores de Rocket.Chat. Por supuesto, incurriría en gastos adicionales, pero no tendrá que esforzarse más para implementar Rocket.Chat, actualizarlo y mantenerlo. Además, también ayuda al desarrollo del proyecto Rocket.Chat.

Si desea evitar gastar mucho o tomar el asunto en sus manos con un enfoque de "hágalo usted mismo", puede alojar Rocket.Chat en su servidor.

En este tutorial, mostraré los pasos para implementar Rocket.Chat con Docker.

Rocket.Chat de autohospedaje con Docker

Veamos qué necesita para implementar Rocket.Chat con Docker en un servidor Linux.

Requisitos

Aparte de la familiaridad con los comandos de Linux, conocer los conceptos básicos de Docker Compose también será útil aquí.

  • Un servidor Linux. Puede utilizar un servidor físico, una máquina virtual o servidores en la nube. Puede registrarse con nuestro socio Linode y obtener $100 en créditos gratuitos.
  • Docker y Docker Compose instalados en su servidor.
  • Acceda al DNS de su dominio donde desea implementar Rocket.Chat.
  • Configuración de proxy inverso de Nginx con redirección www/non-www y límites de carga permitidos.

Paso 0:Prepare la configuración inicial

Debe tener Docker y Docker Compose instalados en su sistema. Puede consultar estos tutoriales para obtener instrucciones para Ubuntu.

  • Instalar Docker en Ubuntu
  • Instalar Docker Compose en Ubuntu

Aparte de eso, también debe tener la configuración del proxy inverso Nginx. Esto es beneficioso si desea tener más de un Rocket.Chat o algún otro servicio web instalado en el mismo servidor.

Este tema se ha cubierto previamente en detalle en el tutorial vinculado a continuación, por lo que no voy a repetir los mismos pasos aquí. Sin embargo, debe tener esta configuración en su sistema.

Utilice la siguiente configuración de Nginx cuando ejecute Docker Compose, denominada docker-compose.yml dentro de un directorio separado. Asegúrate de cambiar DEFAULT_EMAIL a tu preferencia.

version: '3.7'

services:

  jwilder-nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: jwilder-nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - html:/usr/share/nginx/html
      - dhparam:/etc/nginx/dhparam
      - vhost:/etc/nginx/vhost.d
      - certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
      #- ./www.domain.com:/etc/nginx/vhost.d/www.domain.com
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt-proxy-companion
    environment:
      DEFAULT_EMAIL: "[email protected]"
    depends_on:
      - jwilder-nginx-proxy
    volumes:
      - certs:/etc/nginx/certs:rw
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

volumes:
  certs:
  html:
  vhost:
  dhparam:

networks:
  net:
    external: true

Antes de implementar la configuración anterior, verifique la referencia si es necesario y también asegúrese de seguir los pasos preparatorios como se describe a continuación.

Paso 1:Preparar la implementación del servidor Rocket.Chat

Aquí utilizo el método de proxy inverso de Jwilder porque tiene en cuenta los certificados SSL, la redirección www/non-www y los límites de carga permitidos.

La forma de manejar los certificados SSL se ha cubierto en el enlace compartido anteriormente en la sección de requisitos. Además, describiré cómo habilitar la redirección www/non-www (omitirla para los subdominios) y aumentar los límites de carga permitidos a través de Nginx.

Redirección WWW/no-WWW (Omitir para subdominios)

En caso de que desee hospedar Rocket.Chat en un subdominio, esta sección es irrelevante y puede pasar a la siguiente sección. Pero si no, dependiendo de sus preferencias de SEO, es posible que desee configurar la redirección de www a  no-www o viceversa. Por ejemplo, si su servidor de chat está alojado en  dominio.com, los usuarios que visiten www.dominio.com deben ser redirigidos a él (tal como funciona el dominio de GitHub).

Del mismo modo, si lo aloja en www.dominio.com, los usuarios que visiten dominio.com deben ser redirigidos (tal como funciona el dominio de Linode).

de WWW a no WWW

Cree un archivo llamado www.domain.com dentro del directorio de redacción de nginx docker con el siguiente contenido y guárdelo:

rewrite ^/(.*)$ https://domain.com/$1 permanent;
No-WWW a WWW

Crea un archivo llamado domain.com dentro del directorio de redacción de nginx docker con el siguiente contenido y guárdelo:

rewrite ^/(.*)$ https://www.domain.com/$1 permanent;

Ahora, suponga que desea utilizar la redirección de WWW a no WWW. Todo lo que tiene que hacer es montar el archivo en la sección de volúmenes de la configuración de su servicio Nginx:

      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com

Aumentar los límites de carga permitidos

Las cargas de imágenes pueden verse afectadas por límites de tamaño de carga bajos en Rocket.Chat. Dado que estoy usando un proxy inverso, también debo establecer un límite máximo de carga y evitar problemas al cargar imágenes en Docker. Digamos por 1 GB, cree un archivo llamado client_max_upload_size.conf y guárdelo con el siguiente contenido:

client_max_body_size 1G;

Más tarde, debe montarlo tal como se describe con el archivo anterior:

      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf

Ejecute docker-compose up -d desde el directorio de Nginx para actualizar su configuración de Nginx.

La configuración de implementación de Rocket.Chat consta esencialmente de tres componentes principales:

  • Backend de la base de datos MongoDB
  • Inicialización de MongoDB del conjunto de réplicas
  • Rocket.Chat en sí mismo como interfaz web

Dado que está configurando Rocket.Chat con Docker, todos los componentes anteriores se implementarán como sus respectivos contenedores.

Para el servicio de la base de datos y la inicialización del conjunto de réplicas, usaré una red interna llamada rocket ya que solo necesita ser visible para el servicio Rocket.Chat.

networks:
  - rocket

Pero para el servicio Rocket.Chat, por supuesto, la misma net la red utilizada en la configuración del proxy inverso debe especificarse junto con el rocket red, y solo entonces sería posible ponerlo en funcionamiento con el contenedor Nginx Docker.

networks:
  - net
  - rocket

Ahora considere cómo se configuran individualmente con Docker Compose:

Para MongoDB, uso la imagen oficial de MongoDB 4.0 que está disponible en Docker Hub:

  mongo:
    image: mongo:4.0
    restart: always
    volumes:
     - ./data/db:/data/db
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    networks:
      - rocket

Rocket.Chat también requiere el conjunto de réplicas de MongoDB para mejorar el rendimiento. Por lo tanto, la imagen debe usarse por separado para implementar un servicio temporal e inicializar el conjunto de réplicas. Ejecutará el comando necesario, se eliminará y no seguirá ejecutándose:

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

Para el servicio Rocket.Chat en sí, uso el número de versión más reciente etiquetado en Docker Hub lanzado por los desarrolladores como una versión estable. Aquí, en este momento de escribir, es 3.17.0 y basado en una configuración oficial de redacción de Rocket.Chat Docker:

  rocketchat:
    image: rocketchat/rocket.chat:3.17.0
    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: always
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://chat.domain.com
      - VIRTUAL_HOST=chat.domain.com
      - LETSENCRYPT_HOST=chat.domain.com
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - Accounts_UseDNSDomainCheck=false
    depends_on:
      - mongo
    networks:
      - net
      - rocket

Dado que se trata de una configuración basada en proxy inverso de Nginx, debe incluir las variables de entorno adicionales, a saber, VIRTUAL_HOST , LETSENCRYPT_HOST con la URL de tu dominio y Accounts_UseDNSDomainCheck establecido en false . Aquí, asumí chat.domain.com como nombre de dominio de ejemplo para su servidor de chat.

Tenga en cuenta que la implementación utiliza una configuración montada en enlace y, por lo tanto, los directorios de volumen de servicio y base de datos se crearían en el mismo directorio que tiene el archivo Docker Compose.

Paso 2:Implementación de Rocket.Chat

Ahora debería tener listo el archivo  docker-compose. Es hora de usar este archivo.

Cree el directorio de redacción de la ventana acoplable Rocket Chat en su servidor:

mkdir rocketchat

Vaya al directorio para editar los archivos necesarios:

cd rocketchat

Ahora cree el siguiente archivo docker-compose basado en nuestras discusiones hasta ahora:

version: "3.7"

services:
  rocketchat:
    image: rocketchat/rocket.chat:3.17.0
    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: always
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://chat.domain.com
      - LETSENCRYPT_HOST=chat.domain.com
      - VIRTUAL_HOST=chat.domain.com
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - Accounts_UseDNSDomainCheck=false
    depends_on:
      - mongo
    networks:
      - net
      - rocket

  mongo:
    image: mongo:4.0
    restart: always
    volumes:
     - ./data/db:/data/db
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    networks:
      - rocket

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

networks:
  net:
    external: true
  rocket:
    internal: true

Ahora, puede iniciar la instancia de Rocket.Chat:

docker-compose up -d

Acceda al dominio del servidor Rocket.Chat especificado en la configuración utilizando la URL de su dominio.

Paso 3:Configuración de su cuenta de administrador de Rocket.Chat

Al acceder a la URL de su servidor de chat por primera vez, siga las instrucciones en pantalla hasta que haya reclamado su sitio como administrador.

Paso 4:Configuración de SMTP para notificaciones por correo electrónico

En este ejemplo, he usado SendGrid como servicio SMTP. Aquí hay un tutorial rápido sobre cómo configurarlo:

En el servidor de chat principal, haga clic en el icono de inicio:

Navega al panel de administración:

Desplácese un poco hacia abajo y abra la Configuración de correo electrónico:

Una vez más, desplácese hacia abajo a la derecha hasta que vea "SMTP":

Expándalo y asegúrate de elegir la siguiente configuración, específicamente el smtps protocolo. El [email protected] "Desde el correo electrónico", es, por supuesto, solo para fines de demostración. Personalícelo como mejor le parezca, en función de cómo desea que se vea cuando el usuario recibe una notificación en el buzón. Por lo tanto, cámbielo según sus requisitos:

¡Eso es entonces! ¡Ha alojado con éxito su propia instancia de Rocket.Chat totalmente funcional en su servidor!

Sugerencias para su instancia Rocket.Chat autohospedada

Aquí hay algunos consejos que lo ayudarán a mantener su instancia.

Use siempre HTTPS en la URL del servidor

Asegúrese de utilizar siempre HTTPS en la URL del servidor de chat, especialmente en los dos casos siguientes:

  • Cuando informe a los usuarios sobre la URL para iniciar sesión por primera vez, asegúrese de que usen https en el nombre de dominio.
  • Asegúrese del valor de URL, en Admin Panel> Settings> General> Site URL , también usa https .

Garantizar las dos tareas anteriores evitará problemas de inicio o cierre de sesión no deseados en el futuro.

Monitorear los registros de Rocket.Chat en tiempo real

Si desea verificar los registros del contenedor mientras se implementa en tiempo real, puede ejecutar:

docker logs -f rocketchat_rocketchat_1

Copia de seguridad y restauración de configuraciones y volúmenes de Rocket.Chat sin tiempo de inactividad

Usando un enfoque de nube + local, puede hacer una copia de seguridad y restaurar la configuración y los volúmenes de Rocket.Chat sin tiempo de inactividad. He discutido cómo hacer una copia de seguridad de los montajes de enlace (como los usa Rocket.Chat) en el siguiente artículo:

Actualización rápida de contenedores Rocket.Chat sin interrupciones

Con la --scale flag en Docker Compose, puede crear un nuevo contenedor basado en la última versión de Rocket.Chat. Cuando haya terminado, puede eliminar el anterior. Esto da como resultado un tiempo de inactividad insignificante cuando se reduce al modo de contenedor único. El acceso de los usuarios no se verá afectado mientras realiza la actualización:

Si encuentra un error, tiene problemas o tiene alguna sugerencia, puede hacérmelo saber dejando un comentario a continuación.


Linux
  1. Grep Regex:una guía completa

  2. Comandos de Linux - Guía completa

  3. Cómo instalar WordPress con Docker, una guía fácil de seguir

  4. Guía completa para principiantes sobre el registro de Docker

  5. Guía para actualizar a MongoDB 5.0 y Rocket.Chat 4.0 en Docker

Una guía completa para instalar Tomcat en Linux

Ubuntu Firewall UFW:una guía completa

Instalar Docker en Ubuntu:una guía paso a paso

Cómo implementar Rocket Chat con Nginx en Ubuntu 18.04

Comandos de directorio de Linux:una guía completa

Cronjob - La guía completa de Cronjobs