Nextcloud/Talk/HPB/Signaling-Server
Signaling Server
Zur Installation des Servers wird das Paket golang-go benötigt, welches über die Paketverwaltung installiert werden kann:
apt install golang-go
Installation
Die benötigten Quellpakete werden über GitHub bezogen und hier im Verzeichnis /usr/src abgelegt:
cd /usr/src git clone https://github.com/strukturag/nextcloud-spreed-signaling.git cd /usr/src/nextcloud-spreed-signaling
Der anschließende Befehl make build erstellt das Programm bin/signaling
make build
Konfiguration
Beispielkonfiguration
/usr/src/nextcloud-spreed-signaling/server.conf.in
Diese Datei wird nach /etc/signaling/server.conf kopiert:
mkdir -p /etc/signaling cd /usr/src/nextcloud-spreed-signaling cp server.conf.in /etc/signaling/server.conf
Um den Signaling-Server als Systemdienst installieren zu können, wird ein Benutzer und eine Gruppe angelegt:
groupadd signaling useradd --system --gid signaling --shell /usr/sbin/nologin --comment "Standalone signaling server for Nextcloud Talk." signaling
und die Berechtigungen angepasst:
chmod 600 /etc/signaling/server.conf chown signaling: /etc/signaling/server.conf
Entsprechend den lokalen Begebenheiten wir diese Datei wie folgt editiert:
listen = 127.0.0.1:8080 ... [sessions] hashkey = <Hash-Key> ... blockkey = <Block-Key> ... [backend] backends = backend1 [backend1] url = https://cloud.foxtom.de ... secret = <Nextcloud Secret Key> ... [nats] url = nats://localhost:4222 ... [mcu] type = janus ... url = ws://127.0.0.1:8188 ... [turn] apikey = <api-key> secret = <TURN-Server-Key> servers = turn:cloud.foxtom.de:5349?transport=udp,turn:cloud.foxtom.de:5349?transport=tcp ...
Zum automatischen Starten des Signaling-Servers als Systemdienst werden die folgenden Befehle ausgeführt:
cp dist/init/systemd/signaling.service /etc/systemd/system/signaling.service systemctl enable signaling.service systemctl start signaling.service
Starten des Signaling-Servers
Ist Janus-Server bereits gestartet, kann der Signaling-Server für einen Test direkt aufgerufen werden:
sudo /usr/src/nextcloud-spreed-signaling/bin/signaling --config /etc/signaling/server.conf 2021-01-06 15:11:51.109402 I | main.go:130: Starting up version 64cccab641874b3e688c1eb9029b5bb9215741e5/go1.11.6 as pid 9913 2021-01-06 15:11:51.109824 I | main.go:139: Using a maximum of 1 CPUs 2021-01-06 15:11:51.111647 I | natsclient.go:116: Connection established to nats://localhost:4222 (ND2IPCPXAOZMW5QPQ3R476UVGKI42RUNGIQ7YOHLNHK3QLTS7HXIVIWH) 2021-01-06 15:11:51.111713 I | backend_configuration.go:77: Backend backend1 added for https://cloud.foxtom.de/ 2021-01-06 15:11:51.111723 I | hub.go:177: Using a maximum of 8 concurrent backend connections per host 2021-01-06 15:11:51.111739 I | hub.go:184: Using a timeout of 10s for backend connections 2021-01-06 15:11:51.111759 I | hub.go:270: Not using GeoIP database 2021-01-06 15:11:51.113242 I | mcu_janus.go:289: Connected to Janus WebRTC Server 0.9.2 by Meetecho s.r.l. 2021-01-06 15:11:51.113260 I | mcu_janus.go:293: Found JANUS VideoRoom plugin 0.0.9 by Meetecho s.r.l. 2021-01-06 15:11:51.113269 I | mcu_janus.go:299: Data channels are supported 2021-01-06 15:11:51.113274 I | mcu_janus.go:305: Full-Trickle is enabled 2021-01-06 15:11:51.113280 I | mcu_janus.go:308: Maximum bandwidth 1048576 bits/sec per publishing stream 2021-01-06 15:11:51.113285 I | mcu_janus.go:309: Maximum bandwidth 2097152 bits/sec per screensharing stream 2021-01-06 15:11:51.114259 I | mcu_janus.go:315: Created Janus session 6900302758812903 2021-01-06 15:11:51.114951 I | mcu_janus.go:322: Created Janus handle 7778710372665701 2021-01-06 15:11:51.115064 I | main.go:226: Using janus MCU 2021-01-06 15:11:51.115132 I | hub.go:357: Using a timeout of 10s for MCU requests 2021-01-06 15:11:51.115192 I | backend_server.go:94: Using configured TURN API key 2021-01-06 15:11:51.115250 I | backend_server.go:95: Using configured shared TURN secret 2021-01-06 15:11:51.115315 I | backend_server.go:97: Adding "turn:cloud.foxtom.de:5349?transport=udp" as TURN server 2021-01-06 15:11:51.115372 I | backend_server.go:97: Adding "turn:cloud.foxtom.de:5349?transport=tcp" as TURN server 2021-01-06 15:11:51.115420 I | backend_server.go:104: No IPs configured for the stats endpoint, only allowing access from 127.0.0.1 2021-01-06 15:11:51.115613 I | main.go:302: Listening on 127.0.0.1:8080
Debugging
Log prüfen
Mit dem Befehl journalctl lassen sich die Einträge des Systemd-Logbuchs zum Siganling-Servers ausgeben:
$ sudo journalctl -u signaling -- Logs begin at Mon 2021-02-01 13:01:38 CET, end at Mon 2021-02-01 14:21:47 CET. -- Feb 01 13:01:38 signaling signaling[10668]: client.go:251: Client from 46.90.62.181 has RTT of 127 ms (127.606144ms) Feb 01 13:01:38 signaling signaling[10668]: client.go:251: Client from 91.64.35.249 has RTT of 71 ms (71.768255ms) Feb 01 13:01:38 signaling signaling[10668]: client.go:251: Client from 91.64.2.4 has RTT of 49 ms (49.079442ms) Feb 01 13:01:38 signaling signaling[10668]: client.go:251: Client from 89.249.64.252 has RTT of 60 ms (60.899805ms) Feb 01 13:01:39 signaling signaling[10668]: client.go:251: Client from 217.94.247.3 has RTT of 37 ms (37.689669ms) Feb 01 13:01:39 signaling signaling[10668]: client.go:251: Client from 95.90.232.210 has RTT of 57 ms (57.636709ms) Feb 01 13:01:39 signaling signaling[10668]: client.go:251: Client from 91.64.50.230 has RTT of 54 ms (54.221002ms) ...
Fehlermeldungen sind bei der aktuell laufenden Instanz des Signaling-Servers von dieser Art & nur sporadisch:
Feb 01 13:02:23 signaling signaling[10668]: client.go:271: Error reading from 95.90.245.7: read tcp 127.0.0.1:8080->127.0.0.1:35230: use of closed network connection
Debug-/Loglevel einstellen
Test und Benchmarking
Benchmark client
Installation
Zum Testen des Signaling-Servers wird ein einfaches Client-Programm zur Verfügung gestellt, welches jedoch zuvor kompiliert werden muß:
$ cd /usr/src/nextcloud-spreed-signaling/src/client $ make client
Konfiguration
Das Programm befindet sich im Anschluß im Verzeichnis /usr/src/nextcloud-spreed-signaling/bin/ und kann mit folgenden Optionen ausgeführt werden:
- -addr <http-Service-Adresse> (Standard ist localhost:28080)
- -config <Konfigurationsdatei>
- -maxClients <Anzahl der Client-Verbindungen> (Standardwert ist 100)
Anwendung
Wichtig: Vor dem Ausführen des Programms muß die Konfigurationsdatei des Signaling-Servers dahingehend editiert werden, daß nicht nur das eigentliche Backend zugelassen wird, sondern alle. Dazu muß in der Datei /etc/signaling/server.conf der Eintrag "allowall = true" vorhanden sein. Nachdem Neustart des Signaling-Servers kann der Test-Client gestartet werden:
$ sudo systemctl restart signaling $ sudo ./client -addr localhost:8080 -config /etc/signaling/server.conf
Bewertung der Ergebinisse
Bei der derzeitigen Implementierung des (laufenden) Signaling-Servers werden jedoch Fehler erzeugt:
2021-02-01 12:53:51.717590 I | Using a maximum of 1 CPUs 2021-02-01 12:53:51.717978 I | Backend server running on http://95.217.178.11:33031 2021-02-01 12:53:51.718066 I | Connecting to [ws://localhost:8080/spreed] 2021-02-01 12:53:51.718130 I | Starting 100 clients 2021-02-01 12:53:51.720849 I | Unsupported message type: {Id: Type:error Error:Incomplete OCS response Hello:<nil> Bye:<nil> Room:<nil> Message:<nil> Control:<nil> Event:<nil>} ... 2021-02-01 12:53:51.856629 I | Unsupported message type: {Id: Type:error Error:Incomplete OCS response Hello:<nil> Bye:<nil> Room:<nil> Message:<nil> Control:<nil> Event:<nil>} 2021-02-01 12:53:51.857998 I | Clients created 2021-02-01 12:53:51.859424 I | Unsupported message type: {Id: Type:error Error:Incomplete OCS response Hello:<nil> Bye:<nil> Room:<nil> Message:<nil> Control:<nil> Event:<nil>} 2021-02-01 12:53:54.072980 I | Received bye: &{Reason:hello_timeout} ... 2021-02-01 12:53:54.090515 I | Received bye: &{Reason:hello_timeout}
Die Ausgabe einer erfolgreichen Programmausführung ist folgend gezeigt (die user-ID's der sample-user wurden stark verkürzt):
$ ./client -addr localhost:8081 -config /etc/signaling/server.conf 2021-02-01 13:02:45.432124 I | Using a maximum of 2 CPUs 2021-02-01 13:02:45.433055 I | Backend server running on http://192.168.178.63:40305 2021-02-01 13:02:45.433136 I | Connecting to [ws://localhost:8081/spreed] 2021-02-01 13:02:45.433157 I | Starting 100 clients 2021-02-01 13:02:45.448228 I | Registered as MTYxMjE4MDk2NXxaUXQxVEVydXVxLXEwZm1zRZUdHQmyVW (userid sample-user) 2021-02-01 13:02:45.450357 I | Registered as MTYxMjE4MDk2NXw1aHRKWU14TWxoWWwyaM2ZhQTy88IIDt (userid sample-user) ... 2021-02-01 13:02:45.584143 I | Registered as MTYxMjE4MDk2NXxsUXVtblgyM0stanRGWDBDVlU1CaFRYO (userid sample-user) 2021-02-01 13:02:45.585374 I | Clients created 2021-02-01 13:02:45.585884 I | Registered as MTYxMjE4MDk2NXxMOTJzNkV1UkJMNGlueGR5OjOcJwcQiv (userid sample-user) 2021-02-01 13:02:45.586546 I | Registered as MTYxMjE4MDk2NXxkMmNLaHZVamY5OWpsWEJmDYeRaCx7L0 (userid sample-user) 2021-02-01 13:02:45.586572 I | All connections established 2021-02-01 13:02:55.589250 I | Stats: sent=386158 (38615/sec), recv=386154 (38615/sec), delta=4 2021-02-01 13:03:05.587561 I | Stats: sent=766105 (42216/sec), recv=765975 (42202/sec), delta=130 ... 2021-02-01 13:04:15.586929 I | Stats: sent=3377364 (40248/sec), recv=3376924 (40219/sec), delta=440 2021-02-01 13:04:25.589070 I | Stats: sent=3754158 (37679/sec), recv=3754115 (37719/sec), delta=43 ^C2021-02-01 13:04:31.612013 I | Interrupted 2021-02-01 13:04:31.612031 I | Waiting for clients to terminate ...