====== Nextcloud Talk – Hochleistungs-Backend mit Docker installieren und aktualisieren ======
===== 1. Zielsetzung =====
Diese Anleitung beschreibt die Installation, Konfiguration, Wartung und Aktualisierung eines eigenständigen Hochleistungs-Backends (HPB) für Nextcloud Talk.
Das Backend wird unabhängig von Nextcloud All-in-One als eigenes Docker-Compose-Projekt betrieben. Verwendet wird das offizielle AIO-Talk-Containerimage.
**Technische Komponenten:**
* Nextcloud Server mit Talk-App
* Docker Engine und Docker Compose v2
* Nextcloud Talk Hochleistungs-Backend
* Signaling-Server
* Janus WebRTC-Medienserver
* Integrierter TURN-Server
* Apache2 als HTTPS-Reverse-Proxy
* Let's Encrypt für TLS-Zertifikate
**Wichtig:** Die Nextcloud-App ''notify_push'' ist nicht das Talk-Hochleistungs-Backend. Sie beschleunigt Benachrichtigungen, ersetzt jedoch weder den Signaling-Server noch den Medienserver.
===== 2. Beispielumgebung =====
^ Komponente ^ Beispielwert ^
| Betriebssystem | Ubuntu Server LTS |
| Docker | Docker Engine mit Compose v2 |
| Nextcloud-Domain | cloud.example.org |
| Talk-Domain | talk.example.org |
| Nextcloud-Projekt | /opt/docker/nextcloud |
| HPB-Projekt | /opt/docker/talk-hpb |
| Backup-Verzeichnis | /opt/backups |
| Reverse-Proxy | Apache2 |
| HTTPS | 443/TCP |
| Signaling intern | 8081/TCP |
| TURN | 3478/TCP und UDP |
Alle Domains und Verzeichnisse müssen an die eigene Umgebung angepasst werden.
Der Signaling-Port wird ausschließlich an die lokale Loopback-Adresse gebunden. Der TURN-Port muss für externe Teilnehmer erreichbar sein.
===== 3. Voraussetzungen =====
==== 3.1 Software ====
Erforderlich sind:
* Funktionierende Nextcloud-Installation
* Installierte und aktivierte Nextcloud Talk-App
* Docker Engine
* Docker Compose v2
* Apache2 mit HTTPS-Unterstützung
* Gültiges TLS-Zertifikat
* DNS-Eintrag für die Talk-Domain
==== 3.2 Docker prüfen ====
docker --version
docker compose version
docker info
==== 3.3 Apache-Module prüfen ====
sudo apache2ctl -M | grep -E 'proxy|ssl|headers|rewrite'
Erforderliche Module aktivieren:
sudo a2enmod proxy proxy_http proxy_wstunnel ssl headers rewrite
sudo apache2ctl configtest
==== 3.4 DNS prüfen ====
dig +short cloud.example.org
dig +short talk.example.org
Beide Domains müssen korrekt aufgelöst werden. Die Talk-Domain muss auf den öffentlich erreichbaren Reverse-Proxy zeigen.
==== 3.5 Ports prüfen ====
sudo ss -tuln | grep -E ':(3478|8081)\b'
Vor der Installation sicherstellen, dass die benötigten Hostports nicht bereits belegt sind.
===== 4. Verzeichnisstruktur erstellen =====
sudo mkdir -p /opt/docker/talk-hpb/secrets
sudo mkdir -p /opt/backups
sudo chmod 700 /opt/docker/talk-hpb/secrets
sudo chmod 700 /opt/backups
cd /opt/docker/talk-hpb
Die weiteren Befehle werden mit einem Benutzer ausgeführt, der die erforderlichen Berechtigungen besitzt.
===== 5. Zugangsschlüssel erzeugen =====
Das Hochleistungs-Backend benötigt drei unabhängige Schlüssel.
^ Schlüssel ^ Zweck ^
| TURN_SECRET | Authentifizierung der TURN-Verbindungen |
| SIGNALING_SECRET | Kommunikation zwischen Nextcloud und Signaling |
| INTERNAL_SECRET | Interne Authentifizierung der HPB-Komponenten |
Die Schlüssel werden bei der Erstinstallation erzeugt.
cd /opt/docker/talk-hpb
umask 077
for name in turn signaling internal; do
file="secrets/${name}_secret"
if [ ! -e "$file" ]; then
openssl rand -hex 32 > "$file"
fi
done
chmod 700 secrets
chmod 600 secrets/*
Kontrolle:
ls -l secrets/
**Wichtig:**
* Bei Updates keine neuen Secrets generieren.
* Vorhandene Secrets unverändert weiterverwenden.
* Secrets nicht in Repositories oder öffentlichen Dokumentationen veröffentlichen.
===== 6. Umgebungsdatei erstellen =====
Die Datei ''.env'' enthält die Konfigurationsvariablen.
cd /opt/docker/talk-hpb
umask 077
{
echo "NC_DOMAIN=cloud.example.org"
echo "TALK_HOST=talk.example.org"
echo "TALK_PORT=3478"
echo "TZ=Europe/Vienna"
echo "TURN_SECRET=$(cat secrets/turn_secret)"
echo "SIGNALING_SECRET=$(cat secrets/signaling_secret)"
echo "INTERNAL_SECRET=$(cat secrets/internal_secret)"
} > .env
chmod 600 .env
**Achtung:** Diesen Block ausschließlich bei einer Erstinstallation verwenden.
Bei bestehenden Installationen die ''.env'' nicht überschreiben. Zuerst eine Sicherung erstellen.
===== 7. Docker Compose konfigurieren =====
Datei: ''/opt/docker/talk-hpb/compose.yaml''
services:
talk-hpb:
image: ghcr.io/nextcloud-releases/aio-talk:latest
container_name: nextcloud-talk-hpb
restart: unless-stopped
init: true
env_file:
- .env
ports:
- "127.0.0.1:8081:8081/tcp"
- "3478:3478/tcp"
- "3478:3478/udp"
**Erläuterung:**
* 8081/TCP ist ausschließlich über localhost erreichbar.
* 3478/TCP und UDP werden für den integrierten TURN-Server bereitgestellt.
* Die Secrets werden aus der geschützten ''.env'' geladen.
* Der Container startet nach einem Serverneustart automatisch neu.
Der Image-Tag ''latest'' wird hier für die Erstinstallation verwendet.
Für den langfristigen Produktionsbetrieb sollte nach erfolgreicher Prüfung ein festgelegter Image-Digest verwendet werden. Damit lassen sich Updates kontrolliert durchführen.
==== 7.1 Docker-Konfiguration prüfen ====
cd /opt/docker/talk-hpb
docker compose config --quiet
Bei korrekter Syntax erscheint keine Fehlermeldung.
Die normale Ausgabe von ''docker compose config'' kann Secrets enthalten. Für die Syntaxprüfung daher ''--quiet'' verwenden.
==== 7.2 Container starten ====
docker compose pull
docker compose up -d
==== 7.3 Containerstatus prüfen ====
docker compose ps
Der Container muss laufen.
Falls das verwendete Image einen Healthcheck bereitstellt, sollte der Zustand ''healthy'' erreicht werden.
===== 8. Signaling-Server lokal testen =====
curl -i http://127.0.0.1:8081/api/v1/welcome
Erwartet wird HTTP 200 und eine JSON-Antwort ähnlich:
{
"nextcloud-spreed-signaling": "Welcome",
"version": "..."
}
Bei Problemen:
docker logs --tail 100 nextcloud-talk-hpb
===== 9. Apache-Reverse-Proxy einrichten =====
Der Signaling-Server wird unter einer eigenen HTTPS-Domain veröffentlicht.
Beispiel:
''https://talk.example.org''
==== 9.1 TLS-Zertifikat ====
Mit Certbot kann ein Zertifikat beispielsweise so beantragt werden:
sudo certbot certonly --apache -d talk.example.org
Alternativ kann ein bereits vorhandenes gültiges Wildcard-Zertifikat verwendet werden.
==== 9.2 VirtualHost erstellen ====
Datei: ''/etc/apache2/sites-available/talk.example.org.conf''
ServerName talk.example.org
Redirect permanent / https://talk.example.org/
ServerName talk.example.org
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/talk.example.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/talk.example.org/privkey.pem
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto "https"
ProxyPass / http://127.0.0.1:8081/ upgrade=websocket
ProxyPassReverse / http://127.0.0.1:8081/
ErrorLog ${APACHE_LOG_DIR}/talk_error.log
CustomLog ${APACHE_LOG_DIR}/talk_access.log combined
Diese Konfiguration setzt eine Apache-Version mit entsprechender WebSocket-Upgrade-Unterstützung über ''mod_proxy_http'' voraus.
Die Zertifikatspfade müssen an die tatsächliche Installation angepasst werden.
==== 9.3 Website aktivieren ====
sudo a2ensite talk.example.org.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
==== 9.4 HTTPS testen ====
curl -i https://talk.example.org/api/v1/welcome
Erwartetes Ergebnis: HTTP 200.
===== 10. WebSocket-Verbindung testen =====
curl --http1.1 -i -N --max-time 5 \
-H "Connection: Upgrade" \
-H "Upgrade: websocket" \
-H "Sec-WebSocket-Version: 13" \
-H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
https://talk.example.org/spreed
Erwartetes Ergebnis:
HTTP/1.1 101 Switching Protocols
Eine später auftretende Meldung ''hello_timeout'' ist bei diesem einfachen Test normalerweise unkritisch, da curl nicht das vollständige Signaling-Protokoll ausführt.
===== 11. Hochleistungs-Backend in Nextcloud eintragen =====
Als Administrator bei Nextcloud anmelden.
''https://cloud.example.org/settings/admin/talk''
Den Abschnitt **Hochleistungs-Backend** öffnen.
Einen neuen Backend-Server hinzufügen.
^ Einstellung ^ Wert ^
| Backend-URL | https://talk.example.org |
| Gemeinsames Geheimnis | Inhalt von signaling_secret |
| SSL-Zertifikat überprüfen | Aktiviert |
Den Signaling-Schlüssel lokal anzeigen:
cat /opt/docker/talk-hpb/secrets/signaling_secret
Den Schlüssel in Nextcloud eintragen und die Verbindung prüfen.
**Erwartetes Ergebnis:**
* Nextcloud erkennt das Hochleistungs-Backend.
* Die Verbindung ist erfolgreich.
* Die verfügbaren Signaling-Funktionen werden angezeigt.
Bei Warnungen über fehlende optionale Funktionen zuerst die Versionskompatibilität prüfen.
Ein funktionierendes Backend nicht ohne vorherige Prüfung durch eine ungeprüfte Entwicklungsversion ersetzen.
===== 12. TURN-Server einrichten =====
Das verwendete AIO-Talk-Image enthält bereits einen TURN-Server.
Ein zusätzlicher coturn-Container ist für diese Installationsvariante nicht erforderlich.
==== 12.1 Firewall konfigurieren ====
Bei Verwendung von UFW:
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw status
Die HTTPS-Verbindung auf Port 443 muss ebenfalls erreichbar sein.
==== 12.2 Router-Portweiterleitung ====
Bei einem Server hinter NAT müssen folgende Freigaben eingerichtet werden:
^ Protokoll ^ Externer Port ^ Internes Ziel ^
| TCP | 3478 | Docker-Host, Port 3478 |
| UDP | 3478 | Docker-Host, Port 3478 |
Beispiel FRITZ!Box:
- Benutzeroberfläche öffnen.
- Internet → Freigaben → Portfreigaben aufrufen.
- Den Docker-Host auswählen.
- Neue Portfreigabe für UDP 3478 erstellen.
- Zweite Portfreigabe für TCP 3478 erstellen.
- Einstellungen übernehmen.
Die vorhandene HTTPS-Portfreigabe für 443 bleibt unverändert.
**Port 8081 darf nicht öffentlich freigegeben werden.**
Bei vorhandenem IPv6 müssen die entsprechenden Firewallfreigaben separat geprüft werden.
==== 12.3 TURN in Nextcloud konfigurieren ====
In Nextcloud:
Administration → Talk → TURN-Server
^ Einstellung ^ Wert ^
| Protokoll | turn: |
| Server | talk.example.org:3478 |
| Gemeinsames Geheimnis | Inhalt von turn_secret |
| Transport | UDP und TCP |
TURN-Schlüssel anzeigen:
cat /opt/docker/talk-hpb/secrets/turn_secret
Konfiguration speichern und über die Testfunktion prüfen.
Ein grüner Haken bestätigt den erfolgreichen Konfigurationstest. Er ersetzt jedoch keinen praktischen Verbindungstest.
==== 12.4 STUN konfigurieren ====
Optional kann der integrierte STUN-Dienst verwendet werden.
Beispiel:
''talk.example.org:3478''
Ein bereits funktionierender STUN-Server muss nicht zwingend ersetzt werden.
===== 13. Gesamtsystem prüfen =====
==== 13.1 Containerstatus ====
cd /opt/docker/talk-hpb
docker compose ps
==== 13.2 Öffentlichen Signaling-Endpunkt prüfen ====
curl -fsS https://talk.example.org/api/v1/welcome
==== 13.3 Verbindung aus Nextcloud prüfen ====
Bei einem Nextcloud-Docker-Projekt mit dem Service ''app'':
cd /opt/docker/nextcloud
docker compose exec -T app \
curl -fsS https://talk.example.org/api/v1/welcome
==== 13.4 TURN-Port prüfen ====
sudo ss -tuln | grep ':3478'
Auch die Docker-Portzuordnung prüfen:
docker ps --format 'table {{.Names}}\t{{.Ports}}'
==== 13.5 Praxistest ====
- Eine Testunterhaltung in Nextcloud Talk erstellen.
- Einen Videoanruf mit zwei Endgeräten starten.
- Mindestens ein Gerät über ein externes Netzwerk verbinden.
- Audio in beide Richtungen prüfen.
- Video in beide Richtungen prüfen.
- Anschließend einen Anruf mit mindestens drei Teilnehmern durchführen.
Der Test sollte auch mit unterschiedlichen Netzwerken erfolgen, beispielsweise LAN und Mobilfunk.
===== 14. Updatekonzept =====
Nextcloud Talk besteht aus mehreren unabhängig aktualisierbaren Komponenten.
^ Komponente ^ Aktualisierung ^
| Nextcloud Server | Nextcloud-Docker-Image |
| Nextcloud Talk-App | App-Update in Nextcloud |
| Talk HPB | AIO-Talk-Docker-Image |
| TURN | Bestandteil des HPB-Images |
| Apache2 | Paketverwaltung des Betriebssystems |
**Empfohlene Grundregeln:**
* Sicherheitsupdates priorisieren.
* Vor Updates die Release Notes lesen.
* Versionskompatibilität kontrollieren.
* Vor Updates Backups erstellen.
* Während laufender Konferenzen keine Updates durchführen.
* Änderungen zuerst in einer Testumgebung prüfen.
* Nach jedem Update einen Funktionstest durchführen.
==== 14.1 Kompatibilität prüfen ====
Vor einem Upgrade kontrollieren:
* Unterstützt die Talk-App die installierte Nextcloud-Version?
* Unterstützt das HPB die benötigten Signaling-Funktionen?
* Gibt es bekannte Probleme mit dem neuen Image?
* Sind die erforderlichen Docker- und Apache-Versionen vorhanden?
* Sind weitere Nextcloud-Apps mit dem geplanten Serverupgrade kompatibel?
Nextcloud-Major-Versionen nicht überspringen.
===== 15. HPB vor einem Update sichern =====
==== 15.1 Konfiguration sichern ====
cd /opt/docker/talk-hpb
umask 077
BACKUP="/opt/backups/talk-hpb-$(date +%Y%m%d-%H%M).tar.gz"
tar -czf "$BACKUP" \
compose.yaml \
.env \
secrets
chmod 600 "$BACKUP"
Diese Sicherung enthält vertrauliche Schlüssel und muss besonders geschützt aufbewahrt werden.
==== 15.2 Aktuelles Docker-Image dokumentieren ====
docker inspect nextcloud-talk-hpb \
--format '{{.Image}}'
Die Ausgabe enthält die ID des tatsächlich verwendeten Images.
Zusätzlich das konfigurierte Image anzeigen:
docker inspect nextcloud-talk-hpb \
--format '{{.Config.Image}}'
==== 15.3 Aktuelles Image für Rollback sichern ====
cd /opt/docker/talk-hpb
umask 077
docker image save \
-o /opt/backups/talk-hpb-image-before-update.tar \
ghcr.io/nextcloud-releases/aio-talk:latest
chmod 600 /opt/backups/talk-hpb-image-before-update.tar
Dieser Befehl setzt voraus, dass der bisherige Container tatsächlich mit dem lokal vorhandenen ''latest''-Image betrieben wird. Bei festgelegten Tags oder Digests muss stattdessen genau dieses Image gesichert werden.
===== 16. Talk-HPB aktualisieren =====
==== 16.1 Neue Version prüfen ====
Vor dem Update die offiziellen Veröffentlichungen kontrollieren.
* https://github.com/nextcloud/all-in-one
* https://github.com/nextcloud/spreed
* https://nextcloud-talk.readthedocs.io/
==== 16.2 Image herunterladen ====
cd /opt/docker/talk-hpb
docker compose pull
==== 16.3 Container aktualisieren ====
docker compose up -d
Docker Compose erstellt den Container bei geändertem Image neu.
Die Dateien ''.env'' und ''compose.yaml'' bleiben dabei unverändert.
==== 16.4 Update prüfen ====
docker compose ps
Anschließend:
docker logs --tail 100 nextcloud-talk-hpb
Den öffentlichen Endpunkt testen:
curl -fsS https://talk.example.org/api/v1/welcome
Abschließend in Nextcloud Administration → Talk die Verbindung prüfen und einen Videoanruf durchführen.
===== 17. Rollback bei Problemen =====
Wenn ein neues Image Probleme verursacht, kann auf das vorherige Image zurückgewechselt werden.
Voraussetzung ist, dass das vorherige Image beziehungsweise dessen Digest bekannt und verfügbar ist.
==== 17.1 Vorheriges Image laden ====
Wenn zuvor eine Image-Sicherung angelegt wurde:
docker image load \
-i /opt/backups/talk-hpb-image-before-update.tar
==== 17.2 Compose-Konfiguration zurücksetzen ====
In ''compose.yaml'' den vorher verwendeten Image-Tag beziehungsweise Digest eintragen.
Keinen unveränderten ''latest''-Tag verwenden, wenn dieser inzwischen auf das neue, fehlerhafte Image verweist.
==== 17.3 Container neu erstellen ====
cd /opt/docker/talk-hpb
docker compose up -d --force-recreate
==== 17.4 Funktion prüfen ====
docker compose ps
curl -fsS https://talk.example.org/api/v1/welcome
Danach die Verbindung in Nextcloud Talk erneut testen.
===== 18. Nextcloud Server und Talk-App aktualisieren =====
Ein Nextcloud-Serverupgrade ist unabhängig vom HPB-Update durchzuführen.
Empfohlene Reihenfolge:
- Kompatibilität und Release Notes prüfen.
- Datenbank und Nextcloud-Daten sichern.
- Nextcloud-Serverimage aktualisieren.
- Datenbankmigration und Nextcloud-Upgrade durchführen.
- Nextcloud-Apps einschließlich Talk aktualisieren.
- Administrationsübersicht prüfen.
- HPB-Verbindung kontrollieren.
- TURN-Konfiguration prüfen.
- Testanruf durchführen.
Bei einer Docker-Installation erfolgt das eigentliche Serverupgrade nach dem Update des Images entsprechend der verwendeten Nextcloud-Docker-Konfiguration.
Die erforderlichen ''occ''-Befehle hängen vom konkreten Deployment ab.
===== 19. Fehleranalyse =====
==== 19.1 Containerprotokolle ====
docker logs --tail 200 nextcloud-talk-hpb
==== 19.2 Nur Fehler und Warnungen anzeigen ====
docker logs --since 30m nextcloud-talk-hpb 2>&1 \
| grep -Ei 'error|warn|failed|timeout|unauthorized|forbidden'
==== 19.3 Apache prüfen ====
sudo apache2ctl configtest
sudo tail -n 100 /var/log/apache2/talk_error.log
==== 19.4 Docker-Portzuordnung prüfen ====
docker port nextcloud-talk-hpb
==== 19.5 Häufige Fehler ====
^ Symptom ^ Mögliche Ursache ^
| HTTP 502 | Container nicht erreichbar oder falscher Proxy-Port |
| HTTP 404 | Falscher Proxy-Pfad |
| WebSocket-Verbindung schlägt fehl | Proxy-Konfiguration oder Upgrade-Unterstützung fehlerhaft |
| Nextcloud erkennt HPB nicht | Backend-URL, DNS, TLS oder Signaling-Secret falsch |
| TURN-Test schlägt fehl | Portweiterleitung, Firewall oder TURN-Secret falsch |
| Video funktioniert nur intern | TURN-Erreichbarkeit oder NAT-Konfiguration fehlerhaft |
| Container startet nicht | Fehlerhafte Umgebungsvariablen oder Portkonflikt |
===== 20. Sicherheitsempfehlungen =====
* Port 8081 ausschließlich lokal verfügbar machen.
* Port 3478 nur für die erforderlichen Protokolle freigeben.
* HTTPS mit gültigen Zertifikaten verwenden.
* Secrets mit restriktiven Dateiberechtigungen schützen.
* Docker-Images regelmäßig auf Sicherheitsupdates prüfen.
* Vor Änderungen Sicherungen erstellen.
* Nicht mehr benötigte Container und Images kontrolliert entfernen.
* Apache- und Docker-Protokolle regelmäßig prüfen.
* Keine Secrets oder vollständigen Umgebungsdateien in Tickets oder Wikis veröffentlichen.
===== 21. Regelmäßige Wartung =====
^ Intervall ^ Tätigkeit ^
| Wöchentlich | Containerstatus und relevante Logs prüfen |
| Wöchentlich | Sicherheitsmeldungen kontrollieren |
| Monatlich | Release Notes und verfügbare HPB-Updates prüfen |
| Monatlich | Backup und Wiederherstellbarkeit kontrollieren |
| Nach jedem Update | Signaling-Verbindung und Testanruf prüfen |
| Nach Netzwerkänderungen | TURN und externe Erreichbarkeit testen |
===== 22. Offizielle Dokumentation =====
* [[https://nextcloud-talk.readthedocs.io/en/stable/quick-install/|Nextcloud Talk – Quick Install]]
* [[https://github.com/nextcloud/all-in-one|Nextcloud All-in-One Repository]]
* [[https://github.com/nextcloud/spreed|Nextcloud Talk Repository]]
* [[https://github.com/strukturag/nextcloud-spreed-signaling|Nextcloud Signaling Server]]
* [[https://docs.docker.com/compose/|Docker Compose Dokumentation]]
===== 23. Zusammenfassung =====
Das Nextcloud Talk Hochleistungs-Backend wird als eigenständiges Docker-Compose-Projekt betrieben.
Die Trennung von Nextcloud Server, Talk-App und HPB ermöglicht eine kontrollierte Wartung und Aktualisierung der Komponenten.
Für einen zuverlässigen Betrieb sind insbesondere folgende Punkte entscheidend:
* Korrekte Signaling-Konfiguration
* Funktionierender Apache-Reverse-Proxy
* Erreichbarer TURN-Server
* Korrekte Portfreigaben
* Sichere Aufbewahrung der Zugangsschlüssel
* Regelmäßige Updates und Backups
* Praktische Tests mit mehreren Teilnehmern