mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 02:54:26 +00:00
The version-source update in #1146 moved the bigbluebutton/docker ref from v3.0.23 to v3.0.39. That tag changes three things the role did not handle, and it exposed a fourth defect in compose_file_args. 1. generate-compose renders etherpad and bbb-pads only behind USE_INSECURE_ETHERPAD and otherwise emits bbb-shared-notes-server with a `build:` block and no `image:` (upstream adds the image only after the tag, in 9a6a9a9a4c). compose_mods drops `build` only where an image is set, so the guard "Fail if any service still builds locally" stopped every BigBlueButton deploy (main run 39749899667, Nextcloud#11: `rc: 0`, `stdout: ' build:'`, bootstrap_compose_project.yml:35). meta/services.yml now pins alangecker/bbb-shared-notes-server:v3.0.39, compose_mods takes `pinned` (BBB_PINNED_SERVICES, every service the role config pins an image for) and drops their `build`, and the etherpad leftovers go (ep_redis_publisher patch, etherpad postgres entrypoint and initdb hook, etherpad database tasks, ETHERPAD_* env, etherpad_api_key secret). 2. The notes server connects to postgres once at start and exits with 2 when it is not up yet; upstream gives it no restart policy. The override sets the role's restart policy, so it retries until postgres accepts connections. 3. Greenlight moves from v3.8.0 to v3.9.0.1, which sets `config.hosts = URL_HOST`, and the template passes `URL_HOST: https://${DOMAIN}`. Rails compares hostnames, so every request was blocked (`Blocked hosts: bbb.talk.infinito.test`, 403). Greenlight documents URL_HOST as the bare hostname; the override sets it to the role domain. 4. compose_file_args decided whether a role ships a compose override by templating "{{ application_id | abs_role_path_by_application_id }}" through the templar. ansible-core 2.21 does not render an untrusted string, so the check saw the literal and always returned False: the CA override generation and the pull handler never read BBB's compose.override.yml. That was harmless while compose.yml alone was valid; with the notes-server image living in the override, `compose config` failed ("has neither an image nor a build context"). The check now resolves the role path for the application id it is given. BBB is the only role that ships an override, so no other role's file list changes. Existing installations drop the etherpad and bbb-pads containers on the next `compose up --remove-orphans`; the old `etherpad` database stays in PostgreSQL untouched. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
158 lines
7.1 KiB
Markdown
158 lines
7.1 KiB
Markdown
# BigBlueButton
|
|
|
|
## Description
|
|
|
|
This Ansible role deploys [BigBlueButton](https://bigbluebutton.org/) using Docker Compose. It includes support for Greenlight, OIDC, LDAP, TURN/STUN, health checks, and a modular `.env` setup. This role is ideal for educational institutions and teams requiring a self-hosted video conferencing solution.
|
|
> 🔧 **Note**: The database layer should be decoupled in a future release to improve modularity and integration.
|
|
>
|
|
|
|
## Overview
|
|
|
|
This role provides a fully automated deployment of [BigBlueButton](https://bigbluebutton.org/) using Docker Compose on Arch Linux. It manages the entire lifecycle of the deployment, from cloning the upstream Docker repository and generating the `.env` configuration to customizing `compose.yml` for volume usage, WebSocket proxying, and optional LDAP/OIDC integration.
|
|
The setup includes conditional Greenlight activation, WebRTC support via TURN/STUN, and various fixes for known container orchestration issues. The role is modular and integrates seamlessly with the Infinito.Nexus infrastructure, including reverse proxy configuration, domain management, and secrets templating.
|
|
By default, BigBlueButton is deployed with best-practice hardening, modular secrets, and support for multiple authentication methods and scalable storage backends.
|
|
|
|
## Cosmos
|
|
|
|
The diagram places BigBlueButton in the Infinito.Nexus cosmos: the components it deploys (capabilities), the central services it consumes (dependencies), and its outward reach (federation and bridged external networks).
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
subgraph deps [Dependencies]
|
|
dep_svc_bkp_volume_2_local["svc-bkp-volume-2-local 💻"]
|
|
dep_svc_db_openldap["svc-db-openldap 🐳🐝"]
|
|
dep_web_app_dashboard["web-app-dashboard 🐳🐝"]
|
|
dep_web_app_keycloak["web-app-keycloak 🐳🐝"]
|
|
dep_web_app_matomo["web-app-matomo 🐳🐝"]
|
|
dep_web_app_prometheus["web-app-prometheus 🐳🐝"]
|
|
dep_web_app_stalwart["web-app-stalwart 🐳🐝"]
|
|
dep_web_svc_collabora["web-svc-collabora 🐳🐝"]
|
|
dep_web_svc_coturn["web-svc-coturn 🐳🐝"]
|
|
dep_web_svc_css["web-svc-css 💻"]
|
|
dep_web_svc_logout["web-svc-logout 🐳🐝"]
|
|
end
|
|
subgraph role [web-app-bigbluebutton 🐳🐝]
|
|
svc_sso["sso"]
|
|
svc_logout["logout"]
|
|
svc_ldap["ldap"]
|
|
svc_dashboard["dashboard"]
|
|
svc_matomo["matomo"]
|
|
svc_email["email"]
|
|
svc_bigbluebutton["bigbluebutton"]
|
|
svc_postgres["postgres"]
|
|
svc_greenlight["greenlight"]
|
|
svc_coturn["coturn"]
|
|
svc_collabora["collabora"]
|
|
svc_css["css"]
|
|
svc_prometheus["prometheus"]
|
|
svc_bbb_web["bbb-web"]
|
|
svc_freeswitch["freeswitch"]
|
|
svc_nginx["nginx"]
|
|
svc_bbb_shared_notes_server["bbb-shared-notes-server"]
|
|
svc_bbb_export_annotations["bbb-export-annotations"]
|
|
svc_webrtc_sfu["webrtc-sfu"]
|
|
svc_fsesl_akka["fsesl-akka"]
|
|
svc_apps_akka["apps-akka"]
|
|
svc_bbb_graphql_server["bbb-graphql-server"]
|
|
svc_bbb_graphql_actions["bbb-graphql-actions"]
|
|
svc_bbb_graphql_middleware["bbb-graphql-middleware"]
|
|
svc_periodic["periodic"]
|
|
svc_recordings["recordings"]
|
|
svc_bbb_webrtc_recorder["bbb-webrtc-recorder"]
|
|
svc_dockerize["dockerize"]
|
|
svc_container_backup["container_backup"]
|
|
svc_tor["tor ❌"]
|
|
end
|
|
subgraph dependents [Dependents]
|
|
dpt_web_app_nextcloud["web-app-nextcloud 🐳🐝"]
|
|
end
|
|
dep_svc_bkp_volume_2_local -. "0..1" .-> svc_container_backup
|
|
dep_svc_db_openldap -- "1:1" --> svc_ldap
|
|
dep_web_app_dashboard -. "0..1" .-> svc_dashboard
|
|
dep_web_app_keycloak -. "0..1" .-> svc_sso
|
|
dep_web_app_matomo -. "0..1" .-> svc_matomo
|
|
dep_web_app_prometheus -. "0..1" .-> svc_prometheus
|
|
dep_web_app_stalwart -. "0..1" .-> svc_email
|
|
dep_web_svc_collabora -. "0..1" .-> svc_collabora
|
|
dep_web_svc_coturn -. "0..1" .-> svc_coturn
|
|
dep_web_svc_css -. "0..1" .-> svc_css
|
|
dep_web_svc_logout -. "0..1" .-> svc_logout
|
|
svc_sso -. "0..1" .-> dpt_web_app_nextcloud
|
|
```
|
|
|
|
Solid `1:1` edges are fixed relationships; dashed `0..1` edges are conditional (enabled only in matching deployments); red `0..0` edges are turned off in this role. Node markers show the role's deploy modes (💻 host, 🐳 compose, 🐝 swarm); ❌ marks a service that is explicitly turned off, and ⚙️ an Ansible role dependency declared in `meta/main.yml`.
|
|
|
|
## Features
|
|
|
|
- 🐳 **Docker-based** deployment via official [bigbluebutton/docker](https://github.com/bigbluebutton/docker)
|
|
- ✅ **Greenlight** (v3) frontend support
|
|
- 🔐 **SSO with OIDC & LDAP** (optional)
|
|
- 🧱 Automatic `.env` templating and domain/NGINX integration
|
|
- 🛠 Volume patching and Docker Compose customization
|
|
- 📬 SMTP integration and Greenlight admin creation
|
|
- 🧪 Workarounds for known Docker Compose issues
|
|
|
|
## Quick Setup
|
|
|
|
### Development
|
|
|
|
Clone, set up the workstation, and deploy BigBlueButton onto the local stack:
|
|
|
|
```bash
|
|
git clone https://github.com/infinito-nexus/core.git
|
|
cd core
|
|
make onboard
|
|
make compose-deploy mode=reinstall apps=web-app-bigbluebutton full_cycle=false
|
|
```
|
|
|
|
### Production
|
|
|
|
Run the published image to provision the inventory and deploy BigBlueButton to a managed server (the mounted volume persists the inventory):
|
|
|
|
```bash
|
|
APP=web-app-bigbluebutton
|
|
HOST=<your-server>
|
|
DOMAIN=<your-domain>
|
|
TLS_MODE=self_signed
|
|
SSH_PUBLIC_KEY="<your-ssh-public-key>"
|
|
|
|
docker run --rm -it \
|
|
-v "$PWD/inventories:/etc/infinito.nexus/inventories" \
|
|
-e APP="$APP" -e HOST="$HOST" -e DOMAIN="$DOMAIN" -e TLS_MODE="$TLS_MODE" -e SSH_PUBLIC_KEY="$SSH_PUBLIC_KEY" \
|
|
ghcr.io/infinito-nexus/core/debian bash -c '
|
|
INVENTORY=/etc/infinito.nexus/inventories/production
|
|
infinito administration inventory provision "$INVENTORY" \
|
|
--inventory-file "$INVENTORY/devices.yml" \
|
|
--host "$HOST" \
|
|
--include "$APP" \
|
|
--vars "{\"TLS_MODE\": \"$TLS_MODE\", \"DOMAIN_PRIMARY\": \"$DOMAIN\", \"users\": {\"administrator\": {\"authorized_keys\": [\"$SSH_PUBLIC_KEY\"]}}}" &&
|
|
infinito administration deploy dedicated "$INVENTORY/devices.yml" \
|
|
--password-file "$INVENTORY/.password" \
|
|
--diff -vv'
|
|
```
|
|
|
|
## Single Sign-On (SSO)
|
|
|
|
- Docs: [External Authentication](https://docs.bigbluebutton.org/greenlight/v3/external-authentication/)
|
|
- Supports:
|
|
- ✅ OpenID Connect (OIDC)
|
|
- ✅ LDAP (with custom DN and filters)
|
|
- 🧩 Custom OAuth2 flows via ENV vars
|
|
|
|
## System Requirements
|
|
|
|
- Arch Linux with Docker, Compose, and NGINX roles pre-installed
|
|
- DNS and reverse proxy configuration using `sys-svc-proxy`
|
|
- Functional email system for Greenlight SMTP
|
|
|
|
## Further Resources
|
|
|
|
- [BigBlueButton Docker Docs](https://docs.bigbluebutton.org/greenlight/v3/install/)
|
|
- [Networking Fixes & Issues](https://stackoverflow.com/questions/53347951/web-app-network-not-found)
|
|
|
|
## Credits
|
|
|
|
Implemented by **[Kevin Veen-Birkenbach](https://www.veen.world)**.
|
|
Part of the [Infinito.Nexus Project](https://s.infinito.nexus/code) and maintained by [Kevin Veen-Birkenbach](https://www.veen.world).
|
|
Licensed under the [Infinito.Nexus Community License (Non-Commercial)](https://s.infinito.nexus/license).
|