Nextcloud/Talk/HPB: Unterschied zwischen den Versionen

Aus Foxwiki
JoergNolte (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
K Textersetzung - „== Einzelnachweise ==↵<references />“ durch „“
 
(227 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Komponenten des Signaling-Servers ==
Nextcloud Talk '''H'''igh '''P'''erformance '''B'''ackend


Der Signaling-Server besteht aus den folgenden Komponenten / Diensten:
= Beschreibung =
; Komponenten
{| class="wikitable sortable"
|-
! Komponente !! Aufgabe !! Link !! Beschreibung
|-
| Janus || WebRTC Gateway || [[Nextcloud/Talk:HPB:Janus]] ||
|- 
| NATS || Messaging Server || [[Nextcloud/Talk:HPB:NATS]] ||
|- 
| Signaling-Servern || Signaling-Servern || [[Nextcloud/Talk:HPB:Signaling-Server]] ||
|-
| Webserver Frontend  || Webserver Frontend || [[Nextcloud/Talk:HPB:Apache]] ||
|}


= Installation =
== Server-Daten ==


* dem Nextcloud Talk signaling server [https://github.com/strukturag/nextcloud-spreed-signaling Signaling]
{| class="wikitable sortable"
* dem Janus WebRTC gateway [https://github.com/meetecho/janus-gateway Janus]
|-
* und dem NATS messaging server [https://nats.io/ NATS]
! Server !! URL
|-
| Nextcloud-Server || cloud.foxtom.de
|-
| TURN-Server || turn.foxtom.de:5349
|-
| Signaling Server || signaling.foxtom.de
|}


= Konfiguration =
== Schlüssel (keys) erstellen ==
{| class="wikitable sortable"
|-
! Aufgabe !! Befehl
|-
| Api-Key für Janus  || openssl rand -base64 16
|- 
| Hash-Key  || openssl rand -hex 16
|- 
| Block-Key  || openssl rand -hex 16
|- 
| Secret Key für die Nextcloud || openssl rand -hex 16
|}


=== Vorbereitungen ===
;siehe auch '''[[Openssl]]'''


Für die jeweiligen Komponenten werden Schlüssel (keys) benötigt, die im Vorfeld wie folgt erzeugt werden können:
== Einbinden in Nextcloud Talk ==
siehe '''[[Nextcloud/Talk:HPB:Einbinden in Nextcloud Talk]]'''


* der <api-Key> für Janus:
== Firewall konfigurieren ==
  openssl rand -base64 16
# apt install ufw
* ein Hash-Key:
  openssl rand -hex 16
* ein Block-Key:
  openssl rand -hex 16
* ein Secret Key für die Nextcloud
  openssl rand -hex 16
* der Schlüssel für den TURN-Server ist in den Talk-Einstellungen der Nextcloud zu finden (https://cloud.itw-berlin.net/settings/admin/talk)


# ufw allow http
# ufw allow https
# ufw allow ssh
# ufw allow 5349/tcp
# ufw allow 5349/udp


Die Adressen der benötigten Server:
# ufw enable


 
  # ufw status
*Nextcloud-Server : cloud.itw-berlin.net
  Status: active
*TURN-Server      : cloud.itw-berlin.net:5349
*Signaling Server : signaling.foxtom.de
 
 
== Installation der Komponenten / Dienste ==
 
=== Janus ===
 
Janus kann über die Paketverwaltung installiert werden:
 
apt install janus
 
Die anzupassenden Konfigurationsdateien finden sich im Verzeichnis '''/etc/janus'''. Von Bedeutung sind die Dateien:
 
* janus.jcfg
* janus.transport.http.jcfg
* und janus.transport.websockets.jcfg
 
In der Datei '''janus.jcfg''' müssen folgende Einstellungen angepasst werden:
 
...
  stun_server = "cloud.itw-berlin.net"
  stun_port = 5349
...
full_trickle = true
...
turn_server = "cloud.itw-berlin.net"
turn_port = 5349
...
turn_rest_api_key = "<api-Key>"
...
 
Um den Janus-Server so zu konfigurieren, daß er nur lokal angesprochen werden kann, werden die Dateien '''janus.transport.http.jcfg''' & '''janus.transport.websockets.jcfg''' wie folgt modifiziert:
 
'''janus.transport.http.jcfg''':
 
...
interface = "lo"
...
 
'''janus.transport.websockets.jcfg''':
   
   
  ...
  To                        Action      From
  ws_interface = "lo"
  --                        ------      ----
  ...
  80/tcp                    ALLOW      Anywhere                 
443/tcp                    ALLOW      Anywhere                 
22/tcp                    ALLOW      Anywhere                 
5349/tcp                  ALLOW      Anywhere                 
5349/udp                  ALLOW      Anywhere                 
80/tcp (v6)                ALLOW      Anywhere (v6)           
443/tcp (v6)              ALLOW      Anywhere (v6)           
22/tcp (v6)                ALLOW      Anywhere (v6)           
5349/tcp (v6)              ALLOW      Anywhere (v6)           
5349/udp (v6)              ALLOW      Anywhere (v6)


Der Dienst kann wie folgt gestartet werden:
== Dateien ==


sudo systemctl start janus
= Anwendung =
 
Der Status des Dienstes erfolgt über:
 
sudo systemctl status janus
● janus.service - Janus WebRTC gateway
    Loaded: loaded (/lib/systemd/system/janus.service; enabled; vendor preset: enabled)
    Active: active (running) since Wed 2021-01-06 23:53:56 CET; 12s ago
      Docs: https://janus.conf.meetecho.com/docs/index.html
  Main PID: 10220 (janus)
    Tasks: 24 (limit: 2296)
    Memory: 11.1M
    CGroup: /system.slice/janus.service
            └─10220 /usr/bin/janus -o
Jan 06 23:53:57 signaling janus[10220]: [ERR] [config.c:janus_config_parse:191]  -- Error reading configuration file 'janus.transport.rabbitmq.cfg'... error 2 (No such file or directory)
Jan 06 23:53:57 signaling janus[10220]: RabbitMQ SSL support disabled
Jan 06 23:53:57 signaling janus[10220]: [WARN] RabbitMQ support disabled (Janus API)
Jan 06 23:53:57 signaling janus[10220]: [WARN] RabbitMQ support disabled (Admin API)
Jan 06 23:53:57 signaling janus[10220]: [WARN] RabbitMQ support disabled for both Janus and Admin API, giving up
Jan 06 23:53:57 signaling janus[10220]: [WARN] The 'janus.transport.rabbitmq' plugin could not be initialized
Jan 06 23:53:57 signaling janus[10220]: [WARN] libnice version outdated: 0.1.14 installed, at least 0.1.15 recommended
Jan 06 23:53:57 signaling janus[10220]: HTTP transport timer started
Jan 06 23:54:09 signaling janus[10220]: Creating new session: 7609464843575521; 0x7f1b4c001db0
Jan 06 23:54:09 signaling janus[10220]: Creating new handle in session 7609464843575521: 3636178337595333; 0x7f1b4c001db0 0x7f1b4c0031a0
 
 
 
=== NATS ===
 
NATS kann durch das Hinzufügen der entsprechenden Quelle:
 
sudo curl -sL -o /etc/apt/trusted.gpg.d/morph027-nats-server.asc https://packaging.gitlab.io/nats-server/gpg.key
echo "deb https://packaging.gitlab.io/nats-server nats main" | sudo tee /etc/apt/sources.list.d/morph027-nats-server.list
 
direkt im Anschluß über die Paketverwaltung installiert werden:
 
sudo apt update
sudo apt install -y nats-server
 
Die Konfigurationsdatei '''nats.conf''' wird im Verzeichnis '''/etc/nats''' angelegt und enthält nur die Zeile "listen: 127.0.0.1:4222":
 
sudo install -d -o nats -g nats /etc/nats
sudo -u nats echo "listen: 127.0.0.1:4222" > /etc/nats/nats.conf
 
Der Dienst kann wie folgt gestartet werden:
 
sudo systemctl start nats-server
 
sudo systemctl status nats-server
● nats-server.service - NATS messaging server
    Loaded: loaded (/lib/systemd/system/nats-server.service; enabled; vendor preset: enabled)
    Active: active (running) since Thu 2021-01-07 00:00:02 CET; 9s ago
      Docs: https://docs.nats.io/nats-server/
  Main PID: 10269 (nats-server)
    Tasks: 6 (limit: 2296)
    Memory: 6.5M
    CGroup: /system.slice/nats-server.service
            └─10269 /usr/bin/nats-server --config /etc/nats/nats.conf
Jan 07 00:00:02 signaling systemd[1]: Started NATS messaging server.
Jan 07 00:00:02 signaling nats-server[10269]: [10269] 2021/01/07 00:00:02.815032 [INF] Starting nats-server version 2.1.9
Jan 07 00:00:02 signaling nats-server[10269]: [10269] 2021/01/07 00:00:02.815675 [INF] Git commit [7c76626]
Jan 07 00:00:02 signaling nats-server[10269]: [10269] 2021/01/07 00:00:02.816182 [INF] Listening for client connections on localhost:4222
Jan 07 00:00:02 signaling nats-server[10269]: [10269] 2021/01/07 00:00:02.816342 [INF] Server id is NDBF27HOCXESCE4M7QWO6T3ZWCRQPRSXLJWWJDCTXFGD36LOFCTZJAYR
Jan 07 00:00:02 signaling nats-server[10269]: [10269] 2021/01/07 00:00:02.816475 [INF] Server is ready
 
 
=== Signaling Server ===
 
Zur Installation des Servers wird das Paket '''golang-go''' benötigt, welches über die Paketverwaltung installiert werden kann: 
 
apt install golang-go
 
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 ==
 
Eine beispielhafte Konfigurationsdatei findet sich in /usr/src/nextcloud-spreed-signaling als '''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.itw-berlin.net
​...
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.itw-berlin.net:5349?transport=udp,turn:cloud.itw-berlin.net:5349?transport=tcp
...
 
== 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.itw-berlin.net/
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.itw-berlin.net:5349?transport=udp" as TURN server
2021-01-06 15:11:51.115372 I | backend_server.go:97: Adding "turn:cloud.itw-berlin.net: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
 
 
 
=== Einrichtung des Signaling-Servers als Systemdienst ===
 
cp dist/init/systemd/signaling.service /etc/systemd/system/signaling.service
 
 
== Einbinden des Signaling Servers in Nextcloud ==
 
* Dies geschieht unter ''Einstellungen'' > ''Talk''.
* Ganz unten wird nun ein Signaling Server mit dem Plus-Zeichen hinzugefügt.
* Die Domain lautet hierfür ''https://signaling.meinedomain.de/standalone-signaling''.
* Unter ''Gemeinsames Geheimnis'' wird nun der Nextcloud Secret Key hinterlegt, den wir ganz am Anfang erzeugt haben:
 
Hinterlegen des Signaling Servers in der Nextcloud Talk Konfiguration
 
Die Option'' SSL Zertifikat überprüfen'' sollte hier aktiviert werden, wenn der Signaling Server über ein valides Zertifikat verfügt (zum Beispiel Let’s Encrypt).
 
 
== Benchmark/Test ==
Für den Signaling Server gibt es ebenfalls einen mitgelieferten Client, mit dem man den Server testen einen Benchmark ausführen kann.
 
Dazu muss der Client erst einmal gebaut werden:
cd /etc/nextcloud-spreed-signaling
make client
Als nächstes muss die Server-Konfiguration noch geändert werden, damit Verbindungen mit den Client möglich sind: vi /etc/signaling/server.conf
Hier muss in der Backend-Sektion die Variable ''allowall'' auf true gesetzt werden, damit keine Einschränkung auf bestimmte Domains besteht.
[backend]
# ...
allowall = true # ...
Der Service ist dann noch neu zu starten: service signaling restart
Nun kann mit den Client ein Benchmark durchgeführt werden:
cd /etc/nextcloud-spreed-signaling ./bin/client -addr localhost:8080
Der Client baut daraufhin 100 Verbindungen zum Server auf und zeigt den Durchsatz an.
 
=== Benchmark des Signaling Servers ===
Wichtig ist hier v.a., dass sämtliche Verbindungen zu Stande kommen („All connections established“).
* Im Hintergrund sieht man, dass das System CPU-seitig ordentlich unter Last gesetzt wird.
 
'''Wichtig:''' Aus Sicherheitsgründen sollte die Variable ''allowall'' in der ''server.conf'' nach dem Test wieder auf ''false'' gesetzt werden (Neustart des Services nicht vergessen).
 
 
 
 
 
 
 
Wenn ihr nun alles richtig gemacht habt, sollte ''curl -i https://signaling.xy.de/standalone-signaling/api/v1/welcome'' folgende Antwort liefern:
HTTP/1.1 200 OK
Date: Thu, 05 Jul 2018 09:28:08 GMT
Server: nextcloud-spreed-signaling/1.0.0
Content-Type: application/json; charset=utf-8
Content-Length: 59
{"nextcloud-spreed-signaling":"Welcome","version":"1.0.0"}
 
 
Quelle: https://nichteinschalten.de/signalisierungsserver-fuer-nextcloud-aufsetzen-how-to/
 
 
 
 
 
 
systemctl restart janus && systemctl enable janus
 
systemctl start nats-server && systemctl enable nats-server
 
=== Install nextcloud-spreed-signaling Server ===
 
cp bin/signaling /usr/bin/
 
 
[backend]
allowed = nextcloud.example.com
allowall = false
secret = 692cdc99256135bcb7849ca1886e2ed6
timeout = 10
connectionsperhost = 8
and if it listens on port 8080:
netstat -tulpen | grep 8080
 
 
Enable and start service:
 
systemctl enable signaling.service
systemctl start signaling.service
 
 
[http://nats.io/documentation/tutorials/gnatsd-install/ http://nats.io/documentation/tutorials/gnatsd-install/]
 
 
[https://github.com/meetecho/janus-gateway https://github.com/meetecho/janus-gateway]) can be used to act as a WebRTC gateway. See the documentation of Janus on how to configure and run the server. At least the <tt>VideoRoom</tt> plugin and the websocket transport of Janus must be enabled.
 
The signaling server uses the <tt>VideoRoom</tt> plugin of Janus to manage sessions. All gateway details are hidden from the clients, all messages are sent through the signaling server. Only WebRTC media is exchanged directly between the gateway and the clients.
 
Edit the <tt>server.conf</tt> and enter the URL to the websocket endpoint of Janus in the section <tt>[mcu]</tt> and key <tt>url</tt>. During startup, the signaling server will connect to Janus and log information of the gateway.
 
The maximum bandwidth per publishing stream can also be configured in the section <tt>[mcu]</tt>, see properties <tt>maxstreambitrate</tt> and <tt>maxscreenbitrate</tt>.
 
 
 
== Benchmarking the server ==
A simple client exists to benchmark the server. Please note that the features that are benchmarked might not cover the whole functionality, check the implementation in <tt>src/client</tt> for details on the client.
 
To authenticate new client connections to the signaling server, the client starts a dummy authentication handler on a local interface and passes the URL in the <tt>hello</tt> request. Therefore the signaling server should be configured to allow all backend hosts (option <tt>allowall</tt> in section <tt>backend</tt>).
 
The client is not compiled by default, but can be using the <tt>client</tt> target:
$ '''make client'''
Usage:
 
$ '''./bin/client'''
Usage of ./bin/client:
  -addr string
        http service address (default "localhost:28080")
  -config string
        config file to use (default "server.conf")
  -maxClients int
        number of client connections (default 100)


= Sicherheit =
= Dokumentation =
== Projekt ==
# https://github.com/strukturag/nextcloud-spreed-signaling


= Links =
= Links =
== Intern ==
== Siehe auch ==
TODO
# https://de.wikipedia.org/wiki/WebRTC


== Extern ==
== Weblinks ==
# https://github.com/strukturag/nextcloud-spreed-signaling
# https://de.wikipedia.org/wiki/WebRTC
# https://decatec.de/home-server/nextcloud-talk-mit-eigenem-signaling-server-high-performance-backend/
# https://decatec.de/home-server/nextcloud-talk-mit-eigenem-signaling-server-high-performance-backend/
# https://decatec.de/home-server/nextcloud-auf-ubuntu-server-20-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/  
# https://decatec.de/home-server/nextcloud-auf-ubuntu-server-20-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/  
Zeile 382: Zeile 99:
# https://decatec.de/home-server/docker-auf-ubuntu-server/
# https://decatec.de/home-server/docker-auf-ubuntu-server/


[[Kategorie:Entwurf]]
 
[[Kategorie:Nextcloud]]
 
 
 
[[Kategorie:Nextcloud/Talk]]

Aktuelle Version vom 2. Juni 2024, 09:45 Uhr

Nextcloud Talk High Performance Backend

Beschreibung

Komponenten
Komponente Aufgabe Link Beschreibung
Janus WebRTC Gateway Nextcloud/Talk:HPB:Janus
NATS Messaging Server Nextcloud/Talk:HPB:NATS
Signaling-Servern Signaling-Servern Nextcloud/Talk:HPB:Signaling-Server
Webserver Frontend Webserver Frontend Nextcloud/Talk:HPB:Apache

Installation

Server-Daten

Server URL
Nextcloud-Server cloud.foxtom.de
TURN-Server turn.foxtom.de:5349
Signaling Server signaling.foxtom.de

Konfiguration

Schlüssel (keys) erstellen

Aufgabe Befehl
Api-Key für Janus openssl rand -base64 16
Hash-Key openssl rand -hex 16
Block-Key openssl rand -hex 16
Secret Key für die Nextcloud openssl rand -hex 16
siehe auch Openssl

Einbinden in Nextcloud Talk

siehe Nextcloud/Talk:HPB:Einbinden in Nextcloud Talk

Firewall konfigurieren

# apt install ufw
# ufw allow http
# ufw allow https
# ufw allow ssh
# ufw allow 5349/tcp
# ufw allow 5349/udp
# ufw enable
# ufw status
Status: active

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
22/tcp                     ALLOW       Anywhere                  
5349/tcp                   ALLOW       Anywhere                  
5349/udp                   ALLOW       Anywhere                  
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
22/tcp (v6)                ALLOW       Anywhere (v6)             
5349/tcp (v6)              ALLOW       Anywhere (v6)             
5349/udp (v6)              ALLOW       Anywhere (v6)

Dateien

Anwendung

Sicherheit

Dokumentation

Projekt

  1. https://github.com/strukturag/nextcloud-spreed-signaling

Links

Siehe auch

  1. https://de.wikipedia.org/wiki/WebRTC

Weblinks

  1. https://decatec.de/home-server/nextcloud-talk-mit-eigenem-signaling-server-high-performance-backend/
  2. https://decatec.de/home-server/nextcloud-auf-ubuntu-server-20-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/
  3. https://decatec.de/home-server/nextcloud-talk-mit-eigenem-turn-server-coturn/
  4. https://decatec.de/linux/lets-encrypt-zertifikate-mit-acme-sh-und-nginx/
  5. https://decatec.de/home-server/rsa-und-ecdsa-zertifikate-mit-nginx-hybrid-loesung/
  6. https://decatec.de/home-server/tlsv1-3-unter-ubuntu-server-18-04-lts-mit-nginx/
  7. https://decatec.de/home-server/docker-auf-ubuntu-server/