BBB in docker mit eigenem reverse-proxy

Hi.
Wer (ein aktuelles) BBB in einem docker laufen lassen will, weil er/sie nebenher noch andere Dienste auf dem Server haben will, ohne gleich die ganze Virtualisierung für 16.04 anzuschmeißen, dafür gibt es mindestens einen Ansatz:

GitHub - alangecker/bigbluebutton-docker: Docker files for BigBluebutton

Danke an @dorian, wie er unten ausführt, ist das Repository von alangecker inzwischen in ein offizielles Docker-Repo übergegangen.

Dort die Anleitung befolgen… ein skript erzeugt aktuelle Dockercontainer aus den stabilen BBB-Sourcen … wenn man keinen weiteren Dienst (in docker) laufen lassen, dann ist das auch schon alles, aber dafür kann man ja auch @thoschi s script: 02_bbb · master · thoschi / bigbluebutton-scripts · GitLab (ohne docker) oder das bbb-install.sh nehmen.

Eigener nginx-reverse-proxy

Ich habe bei der Einrichtung „externen http-server“ gewählt, weil ich die LE-ZErtifikate selbst regeln will und auch noch andere docker-dienste laufen lassen will.

vorab: Greenlight auf externe-IP:8080 lauschen lassen?

Dass Greenlight auf port 8080 nach außen offen ist, hat mich gestört. Folgende manuelle Änderung lässt den Greenlight nicht mehr nach außen auf port 8080 erscheinen (man kann auch die FW von außen auf dem Port schließen stattdessen). Ob diese Änderung noch andere Probleme bei der vollen Nutzung der BBB-Sitzungen inkl. Aufnahme etc. bringt, weiß ich nicht. Ist nur eine Idee:

diff --git a/docker-compose.yml b/docker-compose.yml
index d95620e..99723b7 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -58,13 +58,18 @@ services:
       - bigbluebutton:/var/bigbluebutton
       - html5-static:/html5-static:ro
       - ${DEFAULT_PRESENTATION:-/dev/null}:/etc/nginx/html/default.pdf
-    network_mode: host
+    #network_mode: host
     extra_hosts:
       - "host.docker.internal:10.7.7.1"
       - "core:10.7.7.2"
       - "etherpad:10.7.7.4"
       - "webrtc-sfu:10.7.7.10"
       - "html5:10.7.7.11"
+    networks:
+      bbb-net:
+        ipv4_address: 10.7.7.20
+    ports:
+      - "10.7.7.1:8080:8080"
 
   etherpad:
     build: mod/etherpad

Jetzt läuft der Greenlight im sowieso eigenen Netzwerk unter einen IP und der Port wird von dem Gateway dieses Netzes nach „draußen“ gereicht, aber nicht auf die externe IP…

reverse-proxy auf dem Host:

Wer jetzt einen nginx-reverse-proxy auf dem Host hat, der hat es relativ einfach, er muss nur diesen auf localhost:8080 (oder 10.7.7.1:8080) zeigen lassen, wenn die Greenlight-Anfragen von außen kommen. Hier gibt es dafür einen Konfigurationsvorschlag

reverse-proxy mit jwilder in docker

Wer den jwilder-docker nginx verwendet, der muss irgendwie den eigenen nginx-docker-container dazu bringen, den/die bbb-docker-container als proxy-ziel zu verwenden. Ist auch wieder hackisch, cwempe hat hier einen Vorschlag. Ich nutze die Variante ein eigenes nginx.tmpl abzulegen.

Man kann sicher auch versuchen über gemeinsame Netzwerke beide docker-WElten miteinander zu verbinden → zu komplex für mich.

meine relevante Config lautet dann:

version: "2"
services:
## Proxy
  proxy:
    container_name: proxy
    restart: always
    image: jwilder/nginx-proxy:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./proxy/certs:/etc/nginx/certs:ro
      - ./proxy/vhost.d:/etc/nginx/vhost.d
      - ./proxy/html:/usr/share/nginx/html
      - ./proxy/nginx.tmpl:/app/nginx.tmpl                           # if you need a custom (global) nginx template
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
## Letsencrypt
  proxy-le-companion:
    container_name: proxy-letsencrypt
    restart: always
    image: jrcs/letsencrypt-nginx-proxy-companion:latest
    volumes:
      - ./proxy/certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - proxy
## BigBlueButton/Greenlight Production 
  bbb:
    image: debian:buster-slim
    container_name: bbb
    command: tail -f /dev/null
    restart: unless-stopped
    environment:
      - "VIRTUAL_HOST=bbb.meine-schule.de"
      - "VIRTUAL_PORT=8080"
      - "UPSTREAM_NAME=10.7.7.1"  ## oder Externe IP, wenn man den obigen Hack nicht hat
      - "VIRTUAL_PROTO=http"
      - "LETSENCRYPT_HOST=bbb.meine-schule.de"
      - "LETSENCRYPT_EMAIL=mail@meine-schule.de"
      #- "LETSENCRYPT_TEST=true"

Fazit:

Letztendlich habe ich auf dem server zwei Docker-systeme:

/srv/docker/docker-compose.yml
/srv/docker/proxy/{certs,html,vhost.d}
/srv/docker/proxy/nginx.tmpl
/srv/docker/weitere-container-wie-nextcloud-o.ä.

welches mit docker-compose up -d in dem Verzeichnis gestartet wird
und

/srv/docker/bbb-docker/*

welches momentan (noch) mit /srv/docker/bbb-docker/scripts/compose up -d hochgefahren wird, wie vom Autor empfohlen.

  • Jetzt kann man BBB unabhängig von dem Rest auf dem Server betreiben und auch updaten und auch mal v2.3 ausprobieren usw.
  • Einzig der Hack für 10.7.7.1:8080 ist nicht upgrade-kompatibel…
  • Kein Gewähr…
  • Nachteil: (noch) nicht richtig ansible-sierbar, wie jemand anmerkte…

VG, Tobias

heute morgen noch drüber nachgedacht, ob ich das mal ausprobieren sollte, aber dann gleich verworfen, weil ich keine Lust auf Gefrickel hatte :slight_smile:

Ich lasse lieber alles auf einem einzigen Server ohne weitere Dienste laufen. Und das geht dann auch ohne Docker

Vollkommen richtig. Ich vermute, dass es auch nicht viele ernsthafte Szenarien gibt, außer jemand richtet das für eine super kleine Schule oder für sich selbst ein.

Zum Testen ist es jedenfalls nützlich, weil der update-Prozess sich die Updates von BBB, greenlight, etc. zieht und die docker-images selbst baut.

Sobald die oben angerissenen PullRequests mal in den Repositories sind, ist es auch weniger Gefrickel…

Hi,

Es gibt jetzt scheinbar auch eine offizielle Docker Implementierung:

VG, Dorian

1 „Gefällt mir“

Danke, habe es oben ersetzt. Ich benutze das inzwischen auch. VG, Tobias

1 „Gefällt mir“

Läuft BBB v2.4.x eigentlich schon stabil?

Hallo!

Danke für den Hinweis auf BigBlueButton/Docker. Das hat mich ermutigt, es für die 2.3 mal damit zu versuchen. Und ich bin nun auch bis zum Login gekommen. Ich bekomme allerdings die Meldung " BigBlueButton Endpunkt und Sicherheitsschlüssel ungültig", bevor ich richtig loslegen kann. Hat jemand aus der Runde hier einen Tipp? „bbbconf --secret“ kann ich ja schwer ausführen, vermute ich.

Ciao,
Mészi.

Warum nicht? Man kommt auch in den Container rein.

docker exec -it der_container_name bash

Danke für den Tipp. Bin nun alle Container durchgegangen. Leider entweder keine Bash-Shell da oder -wenn da- trotzdem kein „bbb-conf“. Ich bin etwas ratlos…

Wie haben es die Anderen hier gelöst? Ich würde mich über einen kleinen Schubs in die richtige Richtung sehr freuen.

Was sagt denn sudo docker ps? Da müssten alle Container aufgelistet sein.

ich@bbb:~/bbb-docker# docker ps --format '{{.Names}}'
bbb-docker_nginx_1
bbb-docker_html5-frontend-1_1
bbb-docker_html5-backend-2_1
bbb-docker_html5-frontend-2_1
bbb-docker_html5-backend-1_1
bbb-docker_fsesl-akka_1
bbb-docker_etherpad_1
bbb-docker_webrtc-sfu_1
bbb-docker_apps-akka_1
bbb-docker_bbb-web_1
bbb-docker_periodic_1
bbb-docker_greenlight_1
bbb-docker_freeswitch_1
bbb-docker_postgres_1
bbb-docker_redis_1
bbb-docker_jodconverter_1
bbb-docker_mongodb_1
bbb-docker_kurento_1```

Ich habe alle durchprobiert. Leider ohne Erfolg. :-/

Fehlermeldung:
Serverfehler
BigBlueButton Endpunkt und Sicherheitsschlüssel ungültig
Bitte stellen Sie sicher, dass die notwendigen Schritte durchgeführt wurden. Mehr erfahren

In .env kann ich ein SharedSecret definieren. Aber das wird entweder nicht durchgereicht oder ich soll dort den Output von bbb-conf --secret hinterlegen. Es ist mir nur völlig unklar, wie ich an diesen Punkt komme. https://github.com/bigbluebutton/docker schweigt sich dazu leider auch aus … und beim Googeln treffe ich nur auf Andere, die ebenfalls hier gestoppt sind.