Jitsi Meet Docker Instanz anpassen
Im vorherigen Tutorial habe ich gezeigt, wie die adminForge Jitsi Meet Instanz via Docker/Docker-Compose aufgesetzt wurde.
Tutorial: Eigene Jitsi Meet Instanz installieren (Docker / Ubuntu / Nginx)
Was ist Jitsi Meet?: Videokonferenzen mit Jitsi Meet
Meeting starten: https://teamjoin.de
Nun möchte ich euch zeigen wie die Jitsi Meet Instanz von mir angepasst wurde. Die Docker Version von Jitsi Meet hat eine Besonderheit – der Config-Ordner ist flüchtig! Somit nutzen wir ein restart.sh
und customize.sh
Bash-Script.
Punkt 1: restart.sh Bash-Script
Zum Neustarten unserer Jitsi Meet Docker Instanz nutzen wir zukünftig dieses Bash-Script.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/bin/bash DOCKERPATH=/opt/docker # Shutdown jitsi meet containers and remove images cd $DOCKERPATH/jitsi-meet docker-compose down --rmi all # Delete configs and recreate folders rm -rf .jitsi-meet-cfg/ mkdir -p .jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb} # Start Jitsi Meet docker-compose up -d sleep 10 # Customize ./customize.sh # Set JVB Logging from INFO to WARNING sed -i 's/^.level=.*/.level=WARNING/' .jitsi-meet-cfg/jvb/logging.properties docker restart jitsi-meet-jvb-1 |
Punkt 2: customize.sh Bash-Script
Nun erstellen wir uns noch das Script welches Anpassungen vornimmt.
Was wurde angepasst/optimiert?
- Watermark aus: Das jitsi.org Logo oben links verschwindet
- Blur aus: Hintergrundverschwimmung funktioniert mehr schlecht als recht, der Menüpunkt wird ausgeblendet
- Audio Levels: Die blauen Punkte wenn jemand spricht können hier deaktivert werden. Spart CPU-Power auf dem Client (optional wg. Usability)
- Third Party Requests aus: Anfragen zu gravatar.com werden untersagt
- Generated Room Names aus: Das Raumnamen Feld ist leer
- Own STUN Server: Die adminForge Server werden gesetzt
- Auto Lang: Sprache wird automatisch nach Browsereinstellung erkannt, Standard ist „de“
- Resolution, Constraints: Videoauflösung von 180p bis 720p möglich. Spart CPU-Power auf Server und Client
- Channel: Die maximale Anzahl aktiver Videostreams. 8 Videostreams werden angezeigt, alles darüber hinaus wird eingefroren bis jemand spricht (optional wg. Usability)
- Layer Suspension: Der Client (ab Chrome 69) sendet nur Streams die gerade angesehen werden. Normal sendet der Client simultan in mehreren Auflösungen. Spart Bandbreite, CPU-Power auf Server und Client und verbessert die Videoqualität
- Recording: Abgeschaltet
- Livestreaming: Abgeschaltet
[ Die Anpassungen sind aus Erfahrungswerten der adminForge Jitsi Meet Instanz entstanden. ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #!/bin/bash # Disable Watermark sed -i 's/SHOW_JITSI_WATERMARK: true/SHOW_JITSI_WATERMARK: false/' .jitsi-meet-cfg/web/interface_config.js sed -i "s/DEFAULT_LOGO_URL: '.*',/DEFAULT_LOGO_URL: '',/" .jitsi-meet-cfg/web/interface_config.js sed -i "s/DEFAULT_WELCOME_PAGE_LOGO_URL: '.*',/DEFAULT_WELCOME_PAGE_LOGO_URL: '',/" .jitsi-meet-cfg/web/interface_config.js sed -i "s/JITSI_WATERMARK_LINK: '.*',/JITSI_WATERMARK_LINK: '',/" .jitsi-meet-cfg/web/interface_config.js # Disable third party requests (gravatar.com) sed -i "s#// disableThirdPartyRequests: false,#disableThirdPartyRequests: true,#" .jitsi-meet-cfg/web/config.js # Disable generated room names sed -i "s#GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,#GENERATE_ROOMNAMES_ON_WELCOME_PAGE: false,#" .jitsi-meet-cfg/web/interface_config.js # Set own STUN server sed -i "s#// { urls: 'stun:jitsi-meet.example.com:3478#{ urls: 'stun:relay.adminforge.de:443#" .jitsi-meet-cfg/web/config.js sed -i 's/meet-jit-si-turnrelay.jitsi.net:443/relay2.adminforge.de:443/' .jitsi-meet-cfg/web/config.js # Auto Language sed -i 's/LANG_DETECTION: false/LANG_DETECTION: true/' .jitsi-meet-cfg/web/interface_config.js sed -i "s#// defaultLanguage: 'en'#defaultLanguage: 'de'#" .jitsi-meet-cfg/web/config.js # Set Resolution sed -i 's#// resolution: 720#resolution: 720#' .jitsi-meet-cfg/web/config.js if [ $(grep " constraints: {" .jitsi-meet-cfg/web/config.js | wc -l) = 0 ]; then cat << EOF | sed -i '/constraints: {/r /dev/stdin' .jitsi-meet-cfg/web/config.js constraints: { video: { height: { ideal: 720, max: 720, min: 180 }, width: { ideal: 1280, max: 1280, min: 320 } } }, videoQuality: { maxBitratesVideo: { low: 200000, standard: 500000, high: 1500000 }, }, EOF fi # Limitation of the transmitted video feeds # https://github.com/jitsi/jitsi-videobridge/blob/master/doc/last-n.md #sed -i 's#channelLastN: -1,#channelLastN: 20,#' .jitsi-meet-cfg/web/config.js # Enable Layer Suspension # https://jitsi.org/blog/new-off-stage-layer-suppression-feature/ sed -i 's#// enableLayerSuspension: false,#enableLayerSuspension: true,#' .jitsi-meet-cfg/web/config.js # Disable recording sed -i 's#// fileRecordingsEnabled: false,#fileRecordingsEnabled: false,#' .jitsi-meet-cfg/web/config.js # Disable livestreaming sed -i 's#// liveStreamingEnabled: false,#liveStreamingEnabled: false,#' .jitsi-meet-cfg/web/config.js |
Vergesst das setzen der Ausführungsrechte nicht.
1 2 3 | cd /opt/docker/jitsi-meet/ chmod +x restart.sh chmod +x customize.sh |
Punkt 3: Neustart der Instanz
Jetzt kann die eigene Jitsi Meet Instanz mit den Anpassungen versehen werden.
1 | ./restart.sh |
Fertig! Die Instanz ist nun optimiert und angepasst.
Punkt 4: Updates
Da die Docker Images bei jedem Restart gelöscht werden und immer neue frische Jitsi Meet Images heruntergeladen werden, müsst ihr euch keine Sorgen um die Updates machen.
Ob es eine neuere Version gibt seht ihr auf der Docker Jitsi Meet GitHub Seite.
WICHTIG: Es ändert sich oftmals was an der docker-compose.yml und .env Datei. Bitte führt bei Problemen ein git pull
durch um diese neuen Versionen zu erhalten!
Als nächstes: Eine zweite JVB zu Jitsi Meet hinzufügen (Docker)
Euer adminForge Team
Das Betreiben der Dienste, Webseite und Server machen wir gerne, kostet aber leider auch Geld. Unterstütze unsere Arbeit mit einer Spende. |
Ich finde bei eurer Jitsi Meet Installation den Button zur Grafana Statistik sehr schick. Könnt ihr vielleicht noch einen Blog-Artikel erstellen oder ergänzen wie das realisiert werden kann?
Steht auf der ToDo 😉
Danke, danke, danke, sau gutes HowTo. Ich warte dann noch auf die Grafana Statistik.
Super Anleitung. Vielen Dank.
Eine Frage habe ich aber. Das Verzeichnis .jitsi-meet-cfg bekommt nach docker-compose up user/group (root:root). Ist das so gewollt?. sed hat dann im Anschluss auf die Dateien keine Berechtigung. Oder muss restart.sh eh als root gestartet werden?
korrekt, der Einfachheit halber habe ich es als „root“ ausgeführt.
Ich musste meinen Container noch explizit bennen (container_name: jitsi-meet_web_1) damit das Skript funktioniert
Ja korrekt. Die Anleitung baut auf https://adminforge.de/linux-allgemein/eigene-jitsi-meet-instanz-installieren-docker-ubuntu-nginx/, dort bennene ich den Ordner um:
mv docker-jitsi-meet/ jitsi-meet/
Es lag an meiner docker-compose Version. Diese hatte für die Container noch eine Endung generiert, z.B. jitsi-meet_jvb_1_843aa2313431. Jetzt klappt es 🙂 Vielen Dank, sehr gutes Tutorial!
Hallo
ich finde den Ordner /usr/share/jitsi-meet/ nicht, um den Text auf der Startseite anzupassen. Was mache ich falsch? Ich habe den Ordner docker-jitsi-meet nicht unbenannt, aber es gibt auch keinen /usr/share/docker-jitsi-meet. Wo kann ich diese Änderung sonst vornehmen?
LG // Carsten
Der Ordner zum anpassen ist im Container
Mittels
docker exec jitsi-meet_web_1 ls -lah /usr/share/jitsi-meet/
oderdocker exec docker-jitsi-meet_web_1 ls -lah /usr/share/jitsi-meet/
solltest du den Ordnerinhalt sehen.Mit
docker cp
kannst du Dateien hin und her kopieren.Erst einmal vielen Dank für diese Anleitung. Aber irgendwie steh ich vermutlich auf dem Schlauch. Könntest du an Hand eines Beispiels docker cp verdeutlichen? Spielt sich alles innerhalb des Containers ab, oder mounte ich ein lokales Volume unter /usr/share/jitsi-meet/? Dieser Pfad existiert bei mir derzeit noch nicht.
Vielen Dank für Antworten.
Hallo Daniel,
ja richtig es ist nichts gemountet, habe mich entschlosen die Docker COntainer als Wegwerfmaterial zu sehen, drum alles per „sed“.
was möchtest du denn genau machen? Dann kann ich dir dazu den „docker cp“ Befehl als Beispiel geben.
Besser wäre es das hier zu machen -> https://community.adminforge.de/
Gruß
Dominion
Hallo, tolle Seite. Ich verstehe nur nicht ganz, wieso in so einer Seite ein google script (translate) eingebettet sein muss. Es gibt andere translator, sogar bessere als google (deepl, systran).
Hallo Karsten,
ja richtig, ist mir auch ein Dorn im Auge.
Jedoch benötige ich eine automatische Übersetzung der Posts, da ich nicht jedes Tutorial in mehreren Sprachen verfassen möchte.
Dazu muss es am besten noch ein WordPress Plugin sein.
Für Empfehlungen ohne Google und Cookies wäre ich dankbar.
Hallo Dominion, du hast hier ein paar tolle Tutorials geschrieben, Danke.
Nun habe ich aber eine Frage betreffend dem Jitsi-Customizing.
Kann man das Logo auch durch ein eigenes ersetzen, so das es nicht bei jedem Neustart (wegen der Container) gelöscht wird?
Vielen Dank und Gruss
Hallo Simon,
du kannst dir das Bild bei jedem Restart in den Container kopieren:
docker cp watermark.png jitsi-meet_web_1:/usr/share/jitsi-meet/images/
Gruß
Dominion
Hallo Dominion, vielen Dank für Deine tolle Arbeit. Das ist super hilfreich. Jetzt versuche ich Dein Skript gerade auf die Version stable-5142 los zu lassen und das frontend lädt danach nicht mehr. Hast Du da vielleicht bereits eine angepasste Version des Skripts? Sonst gehe ich mal selbst auf bug Suche.
Danke nochmal und ich wäre auch sehr an der Grafana Sache interessiert.
Gruß Gregor
Hallo Gregor,
diese Version verwende ich auch. Das restart und customize Script funktioniert. Ich halte es im Tutorial immer aktuell mit meinem.
Jitsi Meet startet bei mir und die Änderungen werden auch übernommen.
Du müsstest auf Bug suche gehen.
Gruß
Dominion
Hallo,
super anleitungen von dir! großes lob!!!
ich habe aber nur ein kleines problem mit deinem customize.sh script. da kommen bei mir fehlermeldungen, weil einige dateien fehlen. wo bekomme ich die her bzw. wie lege ich die an?? bzw. mit welchem inhalt müssen die angelegt werden???
hier meine fehlermeldungen:
sed: .jitsi-meet-cfg/web/interface_config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/interface_config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/interface_config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/interface_config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/interface_config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/web/config.js kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
sed: .jitsi-meet-cfg/jvb/logging.properties kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
DANKE für deine Hilfe!!!
Hallo Jens,
hast du im ersten Tutorial den Pfad angepasst?
In der .env: CONFIG=.jitsi-meet-cfg
Gruß
Dominion
Hallo,
ich habe leider das selbe Problem. Der Pfad ist angepasst.
sed: can’t read .jitsi-meet-cfg/web/interface_config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/interface_config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/interface_config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/interface_config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/interface_config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/interface_config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
grep: .jitsi-meet-cfg/web/config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
sed: can’t read .jitsi-meet-cfg/web/config.js: No such file or directory
jitsi-meet-jvb-1
Also wenn du in der .env den Pfad angepasst hast, dann muss noch was sein.
Wie schaut denn der Ordner aus von Jitsi? Kannst du mal ein
ls -lah
schicken bitte?Hallo,
Danke für die tolle Anleitung. Mein heutiges ./restart.sh hat zur Folge, dass im Chatraum permanent die Meldung „Ihre Verbindung ist getrennt worden“ erscheint. Ist Ihnen dieses Problem bekannt? Auch ein mehrfaches neu installieren hat leider keinen Erfolg.
Mit freundlichen Grüßen Cap. Spock
Hi,
das liegt an der neuen Version und der neuen docker-compose.yml Datei. Dort ist an ein paar Stellen PUBLIC_URL hinzugekommen.
Bitte aktualisiere die docker-compose.yml indem du
git pull
durchführst.Danach sollte die Verbindung wieder möglich sein.
Gruß
Dominion
Hallo Dominion,
„git pull“ antwortet mit „Bereits aktuell.“. Ich hatte die kompletten Dockerimages und alle Configdateien gelöscht. Leider ohne Erfolg. Gruß Cap. Spock
Hi,
hast du PUBLIC_URL= gesetzt? Dies ist wichtig für die neue Websocket Methode.
Anonsten bitte in F12 > Console schauen welche Fehler kommen und in unserem Chatraum melden.
Gruß
Dominion
Ich hatte dasselbe Problem, ich benutze jitsi hinter einen nginx reverse Proxy handling ssl and certs.
I had to add one line to my .env-File: „I added ENABLE_XMPP_WEBSOCKET=0 to my .env file.“
As described here: https://github.com/jitsi/docker-jitsi-meet/issues/869
@MEde, VIELEN DANK das hat geholfen. @Dominion VIELEN DANK auch an dich für deine Hilfe.
Ich habe noch eine Frage:
Lässt sich, auf dem Smartphone im Browser, das Angebot für die Jitsi-APP deaktivieren? Für „Otto normal Benutzer“ ist es einfacher direkt mit dem Browser in das Meeting geführt zu werden.
Vielen Dank für alles.
Also ich meine das geht irgendwie, musst dich mal umschauen im Jitsi Forum.
Aber die neueren Jitsi Versionen bieten die Möglichkeit im Web fortzufahren, wenn man einem Meeting auf dem Smartphone im Browser beitritt.
Hi,
was wären den die besten Einstellung für die Videoqualität? Wie muss ich #SET Resolution anpassen?
Konnte mit deiner Anleitung Jitsi unter Centos 7.9 zum laufen bringen , danke!
vg
Kian
Hallo Kian,
du könntest in der customize.sh höhere Auflösungsraten eintragen und neu ausführen.
Gruß
Dominion
Hallo, schöne Anleitung, danke!
Eine Frage: Gar nicht so selten sind Verbindungen auf nicht-standard-Ports wie 10000 unterbunden. Was muss man anpassen, um den Dienst komplett auf httpx zu beschränken? Einen Coturn-Server dazunehmen? Wie?
Gruß, Björn
Hallo Björn,
richtig, du könntest dir einen coTURN auf Port 443 installieren und diesen in die
.env
von Jitsi Meet eintragen.Eine coTURN Anleitung findest du hier, da sollte sich nicht viel geändert haben: https://adminforge.de/nextcloud/nextcloud-talk-mit-eigenem-turn-server/
Gruß
dominion
Hallo,
danke, das hat funktioniert, ABER erst, nachdem mit einem weiteren sed-Suchen/Ersetzen-Befehl auch Stun-Server mit Passwort in jitsi-meet-cfg/web/config.js gesetzt wurden. Dazu hätte ich eine grundsätzliche Frage: Warum können diese Parameter nicht alle in .env gesetzt werden? Sorry, falls das eine naive Frage ist, mein Docker-Fu ist klein.
Gruß, Björn
Hallo Björn,
also in der
.jitsi-meet-cfg/web/config.js
werden „nur“ die STUN Server eingetragen unterstunServers:
.Die TURN Daten aus der
.env
werden in der.jitsi-meet-cfg/prosody/config/conf.d/jitsi-meet.cfg.lua
automatisch eingetragen. Somit ja es sollte die.env
zu editieren ausreichen!Gruß
dominion
Ahoi und danke für den nicen guide!
Ich glaube, ich habe einen kleinen Schreibfehler in der restart.sh gefunden: ganz unten wenn du den docker container restartest gehört jitsi-meet-jvb_1 statt jitsi-meet-jvb-1, der underscore ist der unterschied (oder vllt war das nur bei mir der Fall mit docker-jitsi-meet-6865)
Ich weiß nicht, ob das für andere relevant ist, aber es gibt noch eine (imho) schönere Feintune-Option, anstatt die LastN einfach nur auf einen fixen wert zu setzen: lastNLimits lässt die ChannelLastN dynamisch mit den Anzahld der Stream anpassen: https://github.com/jitsi/jitsi-meet/blob/master/config.js#L330
// For the given example mapping, „last N“ will be set to 20 as long as there are at least 5, but less than
// 29 participants in the call and it will be lowered to 15 when the 30th participant joins. The ‚channelLastN‘
// will be used as default until the first threshold is reached.
//
// lastNLimits: {
// 5: 20,
// 30: 15,
// 50: 10,
// 70: 5,
// 90: 2
// },
Ich bin aber nicht sicher, wie man Mehrzeilen Kommentare mit sed am besten deaktiviert oder umschreibt. Eventuell geht auch einfach nur lastNLimits={5: 20,30: 9,50: 5,70: 4,90: 2}; aber ich kenne mich mit .js nicht so aus
Hallo Jan,
ja das mit dem „_“ hat sich geändert. Ab docker-compose v2.x meine ich werden aus „_“ dann „-“ bei den Containernamen. Ich glaube es ist da dann doch mal sinnvoll Namen in der Config zu vergeben 😉
Gruß
Dominion
I am using a docker-jitsi-meet instance.Etherpad works ok.Could you help me how to add etherdraw plugin in etherpad.Thank you.
I started etherpad docker container with this additional argument line:
docker-compose.yml:
args:
ETHERPAD_PLUGINS: "... ... ep_whiteboard"
In the etherpad settings file I added my own draw instance:
etherpad-lite/settings.json.docker:
"ep_draw": {
"host": "paint.adminforge.de"
},
Hallo Dominion,
wie muss denn das restart-Script aussehen, wenn ich damit mehrere Container stoppen und neustarten möchte? Füge ich dazu die STOP – START-Struktur unten wieder an für jeden Container?
Vielen Dank wie immer!!
VG Frank
Hallo Frank,
der Restart unten ist nur um das „JVB Logging“ zu deaktivieren.
Alle Container aus der docker-compose.yml werden mittels „docker-compose down“ und „docker-compose up -d“ neugestartet.
Was hast du genau vor?
Grüße
dominion