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?
- Cambia [email protected] y chat.midominio.com en el
docker-compose.yml
por los tuyos propios. - En tu DNS, apunta
chat.midominio.com
a la IP de tu VPS. - Lanza todo:
docker compose up -d
- 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
ytraefik_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!