Plataforma de Chat en Tiempo Real con Rocket.Chat, MongoDB y Traefik (con Let’s Encrypt)

Despliega tu propio sistema de chat colaborativo con Rocket.Chat, MongoDB y Traefik

¿Te gustaría tener una plataforma de chat privada y personalizable al estilo de Slack o Discord, pero en tu propio servidor VPS? Hoy exploramos cómo desplegar Rocket.Chat, potenciado por MongoDB y protegido automáticamente con HTTPS gracias a Traefik + Let’s Encrypt, ¡todo orquestado con Docker Compose!

¿Por qué Rocket.Chat?

Rocket.Chat es un sistema de mensajería instantánea de código abierto, ideal para equipos, comunidades o incluso para familias geek. Ofrece canales, mensajes privados, videollamadas, integración con bots, soporte para apps móviles y web, e incluso federación entre servidores.

Arquitectura de nuestro stack

  • Rocket.Chat: el cerebro del sistema de chat.
  • MongoDB: almacena todos los mensajes, usuarios y archivos adjuntos de Rocket.Chat.
  • Traefik: gestiona los certificados SSL automáticamente (Let’s Encrypt) y enruta el tráfico con facilidad.

Docker Compose: el fichero mágico

A continuación, tienes un docker-compose.yml completo y comentado. Es suficientemente avanzado para cubrir configuraciones de producción y suficientemente simple para desplegarlo en minutos. Solo necesitas un dominio propio apuntando a tu VPS y Docker Compose instalado.

version: "3.9"

services:
  traefik:
    image: traefik:v3.0
    command:
      - --api.insecure=true
      - --providers.docker=true
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.letsencrypt.acme.tlschallenge=true
      - --certificatesresolvers.letsencrypt.acme.email=tu-email@dominio.com
      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"  # Dashboard Traefik, protégelo en producción
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_le:/letsencrypt
    restart: always
    environment:
      - TZ=Europe/Madrid

  mongo:
    image: mongo:7.0
    volumes:
      - rocketchat_db:/data/db
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME=rocketchat
      - MONGO_INITDB_ROOT_PASSWORD=unpasswordseguro!
    healthcheck:
      test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"]
      interval: 30s
      timeout: 5s
      retries: 5

  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:6.5
    depends_on:
      mongo:
        condition: service_healthy
    environment:
      - MONGO_URL=mongodb://rocketchat:unpasswordseguro!@mongo:27017/rocketchat?authSource=admin
      - MONGO_OPLOG_URL=mongodb://rocketchat:unpasswordseguro!@mongo:27017/local?authSource=admin
      - ROOT_URL=https://chat.midominio.com
      - PORT=3000
      - TZ=Europe/Madrid
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.rocketchat.rule=Host(`chat.midominio.com`)"
      - "traefik.http.routers.rocketchat.entrypoints=websecure"
      - "traefik.http.routers.rocketchat.tls.certresolver=letsencrypt"
      - "traefik.http.services.rocketchat.loadbalancer.server.port=3000"
    expose:
      - 3000
    restart: always

volumes:
  rocketchat_db:
    driver: local
  traefik_le:
    driver: local

¿Cómo lo despliego?

  1. Cambia [email protected] y chat.midominio.com en el docker-compose.yml por los tuyos propios.
  2. En tu DNS, apunta chat.midominio.com a la IP de tu VPS.
  3. Lanza todo:
    docker compose up -d
  4. Espera uno o dos minutos, accede a https://chat.midominio.com y ¡configura tu primer usuario admin!

Consejos y troubleshooting

  • ¿El sitio no carga con HTTPS? Revisa el log de traefik:

    docker compose logs -f traefik

    Asegúrate de que el DNS esté propagado y que el puerto 443 esté abierto.

  • Seguridad: Cambia la contraseña por defecto de MongoDB y protege el dashboard de Traefik en producción.
  • Actualizaciones: Usa etiquetas de versión concretas y revisa actualizaciones de Rocket.Chat para no perderte nuevas funciones (¡y parches de seguridad!).
  • Volúmenes: Haz copias periódicas de los volúmenes rocketchat_db y traefik_le para evitar sustos.

¿Quieres añadir más servicios?

Rocket.Chat ofrece plugins (marketplace), integraciones con bots, notificaciones y mucho más. Puedes ampliar este docker-compose.yml añadiendo, por ejemplo, un proxy SMTP, un servicio de backup o tu propio bot con Node.js o Python.

¡Ahora puedes tener un chat robusto y seguro completamente bajo tu control!

Avatar

Por Mid