Rocket.Chat und MongoDB in Debian 12 mit Docker Compose

Schlüsselpunkte:

  • Du kannst Rocket.Chat und MongoDB im Debian LXC Container mit Docker Compose einrichten, indem du eine docker-compose.yml-Datei erstellst und den Container startest. Die Installation ist einfach und kann mit einem Replica-Set für MongoDB ergänzt werden. In folgendem Beispiel führen wie die Befehle als root aus.

Vorbereitung: Docker installieren

  • 1) Installiere Docker und Docker Compose auf deinem Debian 12 LXC Server.
  • 2) Autostart aktivieren: Damit der Docker-Dämon auch nach einem Debian LinuX Neustart läuft..
  • 3) Installierte Version prüfen: zB.: Docker v28.1 - Compose v2.35
  • 4) Teste mit hello-world deinen ersten Docker Container.
  • 5) Update regelmäßig jeweils dein Debian 12 inkl. Docker.

Vorbereitung zur Rocket.Chat Installation

Schritte zur Installation

  • 6) Verzeichnis erstellen: Erstelle das /opt/rocketchat Verzeichnis und lege die docker-compose.yml YAML Konfigdatei an, sowie ein ./data und ein ./upload Unterverzeichnis.
  • 7) Container starten: Führe im /opt/rocketchat Verzeichnis docker-compose up -d aus, um die Container im Hintergrund zu starten.
  • 8) WordOps Server: Konfiguriere deinen https://chat.ihredomain.at NGINX Proxy-Server für deine Domain und verbinde ihn mit dem Rocket.Chat Docker Port (3000).
  • 9) Zugriff prüfen: Öffne einen Browser und gehe zu https://chat.ihredomain.at um Rocket.Chat zu testen und einen Administrator-Benutzer einzurichten.

Hinweise

  • Die Daten werden lokal in dem /opt/rocketchat/data Docker-Volume gespeichert, was Persistenz gewährleistet, wenn Docker nach einem Rocket.Chat-Update neu gestartet wird.
  • Dieses Setup ist gut für eine Entwicklungsumgebung. Für eine Produktionsumgebung empfehlen wir zusätzlich - wie unten gezeigt - die Initialisierung eines MongoDB-Replica-Sets, damit die Sicherheit und Skalierbarkeit gewährleistet wird.

🐾 Schritt für Schritt

# 1) Installiere Docker und Docker Compose auf deinem Debian 12:
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 

# 2) Damit läuft der Docker-Dämon auch nach einem Debian LinuX Neustart:
systemctl is-enabled docker && systemctl restart docker
systemctl is-enabled containerd && systemctl restart containerd 

# 3) Zeigt dir die installierte Version an. (zB.: Docker v28.1 - Compose v2.35)
docker --version && docker compose

# 4) Teste mit deinen ersten Docker Container:
docker run hello-world 

# 5) Update jeweils dein Debian 12 inkl. Docker:
apt update && apt dist-upgrade && apt autoremove && apt clean 


Weiter geht es mit einer kompakte Anleitung für die Rocket.Chat-Installation, in Debian 12 mit bereits funktionierendem Docker/Docker-Compose:


6) Projektverzeichnis & Docker-Compose-Datei erstellen

mkdir -p /opt/rocketchat/{data,uploads} && cd /opt/rocketchat
nano docker-compose.yml

Füge den Inhalt aus dem nächsten Block in die docker-compose.yml Datei ein:

Inhalt der docker-compose.yml Konfigurationsdatei:

version: '3.8'

services:
  rocketchat:
    image: rocket.chat:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"  # Nur lokal gebunden (Reverse-Proxy später optional)
    environment:
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - ROOT_URL=http://localhost:3000  # Für lokalen Zugriff
      - PORT=3000
    volumes:
      - ./uploads:/app/uploads
    depends_on:
      - mongo

  mongo:
    image: mongo:6.0
    restart: unless-stopped
    volumes:
      - ./data/db:/data/db  # Persistente DB-Daten
    command: mongod --oplogSize 128 --replSet rs0 --storageEngine=wiredTiger

  mongo-init:
    image: mongo:6.0
    command: >
      bash -c "for i in `seq 1 30`; do
        mongo mongo/rocketchat --eval 'rs.initiate({_id: \"rs0\", members: [{_id: 0, host: \"mongo:27017\"}]})' &&
        exit 0;
        sleep 1;
      done; exit 1"
    depends_on:
      - mongo

7) Container starten & Replica-Set initialisieren

# Container im Hintergrund starten
docker compose up -d

# Logs des Initialisierungs-Scripts prüfen (MongoDB-Replica-Set)
docker compose logs mongo-init

Erwartete Ausgabe:
"ok": 1 im Log, bestätigt das erfolgreiche Replica-Set.

8) NGINX Server in WordOps einrichten

  • Konfiguriere deinen https://chat.ihredomain.at NGINX Proxy-Server für deine Domain und verbinde ihn mit dem Rocket.Chat Docker Port (3000).

9) Rocket.Chat-Installation abschließen

  1. Auf Rocket.Chat zugreifen:
    Öffne im Browser https://chat.ihredomain.at
  2. Admin-Account erstellen:
    • Erster Nutzer wird automatisch Administrator.
    • Benutzername, E-Mail und Passwort festlegen.
  3. Instanz konfigurieren:
    Folge dem Setup-Assistenten (Organisationsname, Sprache, etc.).

Manuelle Replica-Set-Initialisierung (falls nötig)

Falls der mongo-init-Container fehlschlägt:

# Shell im MongoDB-Container öffnen
docker compose exec mongo mongosh --eval "rs.initiate()"

Wichtige Hinweise

  1. Datenpersistenz:
    • MongoDB-Daten liegen unter /opt/rocketchat/data/db.
    • Uploads (Dateien, Avatare) unter /opt/rocketchat/uploads.
  2. Backup:
    • Stoppe MongoDB-Container: docker compose stop mongo
    • Sichere /opt/rocketchat/data/db und /opt/rocketchat/uploads.
  3. Lokaler Zugriff:
    Standardmäßig hört Rocket.Chat nur auf localhost:3000.
    Für Zugriff von anderen Rechnern:
    • In docker-compose.yml bei ports 127.0.0.1:3000:3000 durch 3000:3000 ersetzen.
    • Firewall anpassen: ufw allow 3000/tcp.

Updates:

cd /opt/rocketchat
docker compose pull    # Neue Images ziehen
docker compose up -d   # Container aktualisieren

Fehlerbehebung

  • ROOT_URL-Mismatch:
    Stelle sicher, dass ROOT_URL in docker-compose.yml exakt der aufgerufenen URL entspricht (inkl. Port).

MongoDB-Verbindungsfehler:
Prüfe, ob das Replica-Set aktiv ist:

docker compose exec mongo mongosh --eval "rs.status()"

Container startet nicht:

docker compose logs rocketchat  # Letzte Fehlermeldungen anzeigen

Fertig! Rocket.Chat läuft nun lokal auf Port 3000. Für Produktionseinsatz empfiehlt sich ein Reverse-Proxy (Nginx/Caddy) mit HTTPS – aber das hast du ja bereits im Blick. 😉