docker.recipes

BigBlueButton Web Conferencing

advanced

Open source web conferencing for online learning with recordings and breakout rooms.

Overview

BigBlueButton is an open-source web conferencing platform specifically designed for online learning and educational environments. Originally developed at Carleton University in 2009, BigBlueButton has become the de facto standard for educational institutions requiring feature-rich virtual classrooms with screen sharing, interactive whiteboards, breakout rooms, and session recordings. Unlike generic video conferencing solutions, BigBlueButton focuses on pedagogical features that enhance remote learning experiences. This deployment stack integrates BigBlueButton's multiple microservices with supporting infrastructure components to create a fully functional web conferencing platform. The bbb-web service handles the main application logic and API endpoints, while bbb-html5 provides the modern client interface using MongoDB for real-time data storage and Redis for session management and pub/sub messaging. FreeSWITCH manages voice communications, Kurento handles video streaming and WebRTC media processing, and NGINX serves as the reverse proxy to orchestrate traffic between these services. Educational institutions, corporate training departments, and organizations requiring GDPR-compliant self-hosted video conferencing should consider this stack. The combination provides enterprise-grade features like recording management, user analytics, and integration capabilities with Learning Management Systems, while maintaining complete data sovereignty that cloud-hosted solutions cannot guarantee.

Key Features

  • Interactive whiteboard with multi-user drawing capabilities and shape recognition
  • Automated session recordings with playback timeline and chapter markers
  • Breakout room management with drag-and-drop participant assignment
  • Screen sharing with presenter controls and annotation overlay
  • Real-time chat with emoji reactions and private messaging
  • Polling and quiz integration with instant result visualization
  • WebRTC-based audio/video with automatic quality adaptation
  • Learning Management System integration via standardized APIs

Common Use Cases

  • 1Universities deploying virtual classrooms with recording capabilities for hybrid learning
  • 2Corporate training departments requiring breakout room functionality for team exercises
  • 3K-12 schools needing FERPA-compliant video conferencing with parental controls
  • 4Government agencies requiring self-hosted conferencing for sensitive communications
  • 5Healthcare organizations conducting telemedicine consultations with HIPAA compliance
  • 6Non-profit organizations hosting community meetings with multilingual support
  • 7Research institutions conducting remote collaboration with screen sharing and whiteboard tools

Prerequisites

  • Minimum 4GB RAM (8GB+ recommended) due to multiple BigBlueButton microservices
  • External IP address configured for WebRTC connectivity through NAT/firewalls
  • UDP port range 16384-32768 accessible for FreeSWITCH media streaming
  • SSL certificate for HTTPS operation (required for WebRTC in modern browsers)
  • TURN server credentials for participants behind restrictive firewalls
  • Domain name or static IP for consistent API endpoint configuration

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 bbb-web:
3 image: bigbluebutton/bbb-web:latest
4 ports:
5 - "8080:8080"
6 environment:
7 - BBB_SECRET=${BBB_SECRET}
8 - BBB_SERVER_URL=http://localhost
9 volumes:
10 - bbb_data:/var/bigbluebutton
11 networks:
12 - bbb_net
13
14 bbb-html5:
15 image: bigbluebutton/bbb-html5:latest
16 environment:
17 - MONGO_URL=mongodb://mongodb:27017/bbb
18 - REDIS_HOST=redis
19 depends_on:
20 - mongodb
21 - redis
22 networks:
23 - bbb_net
24
25 bbb-freeswitch:
26 image: bigbluebutton/bbb-freeswitch:latest
27 environment:
28 - EXTERNAL_IP=${EXTERNAL_IP}
29 ports:
30 - "16384-32768:16384-32768/udp"
31 networks:
32 - bbb_net
33
34 bbb-kurento:
35 image: bigbluebutton/bbb-kurento:latest
36 environment:
37 - TURN_URL=${TURN_URL}
38 - TURN_USERNAME=${TURN_USER}
39 - TURN_PASSWORD=${TURN_PASSWORD}
40 networks:
41 - bbb_net
42
43 mongodb:
44 image: mongo:4.4
45 volumes:
46 - mongodb_data:/data/db
47 networks:
48 - bbb_net
49
50 redis:
51 image: redis:7-alpine
52 volumes:
53 - redis_data:/data
54 networks:
55 - bbb_net
56
57 coturn:
58 image: coturn/coturn:latest
59 ports:
60 - "3478:3478"
61 - "3478:3478/udp"
62 environment:
63 - TURN_USER=${TURN_USER}
64 - TURN_PASSWORD=${TURN_PASSWORD}
65 networks:
66 - bbb_net
67
68 nginx:
69 image: nginx:alpine
70 ports:
71 - "80:80"
72 - "443:443"
73 volumes:
74 - ./nginx.conf:/etc/nginx/nginx.conf:ro
75 depends_on:
76 - bbb-web
77 networks:
78 - bbb_net
79
80volumes:
81 bbb_data:
82 mongodb_data:
83 redis_data:
84
85networks:
86 bbb_net:

.env Template

.env
1# BigBlueButton
2BBB_SECRET=your_bbb_shared_secret_key
3EXTERNAL_IP=your.external.ip
4TURN_URL=turn:your.turn.server:3478
5TURN_USER=turnuser
6TURN_PASSWORD=secure_turn_password
7
8# BBB at http://localhost
9# API at http://localhost/bigbluebutton/api

Usage Notes

  1. 1BBB at http://localhost
  2. 2API endpoint at /bigbluebutton/api
  3. 3Designed for online learning
  4. 4Breakout rooms support
  5. 5Recording and playback

Individual Services(8 services)

Copy individual services to mix and match with your existing compose files.

bbb-web
bbb-web:
  image: bigbluebutton/bbb-web:latest
  ports:
    - "8080:8080"
  environment:
    - BBB_SECRET=${BBB_SECRET}
    - BBB_SERVER_URL=http://localhost
  volumes:
    - bbb_data:/var/bigbluebutton
  networks:
    - bbb_net
bbb-html5
bbb-html5:
  image: bigbluebutton/bbb-html5:latest
  environment:
    - MONGO_URL=mongodb://mongodb:27017/bbb
    - REDIS_HOST=redis
  depends_on:
    - mongodb
    - redis
  networks:
    - bbb_net
bbb-freeswitch
bbb-freeswitch:
  image: bigbluebutton/bbb-freeswitch:latest
  environment:
    - EXTERNAL_IP=${EXTERNAL_IP}
  ports:
    - 16384-32768:16384-32768/udp
  networks:
    - bbb_net
bbb-kurento
bbb-kurento:
  image: bigbluebutton/bbb-kurento:latest
  environment:
    - TURN_URL=${TURN_URL}
    - TURN_USERNAME=${TURN_USER}
    - TURN_PASSWORD=${TURN_PASSWORD}
  networks:
    - bbb_net
mongodb
mongodb:
  image: mongo:4.4
  volumes:
    - mongodb_data:/data/db
  networks:
    - bbb_net
redis
redis:
  image: redis:7-alpine
  volumes:
    - redis_data:/data
  networks:
    - bbb_net
coturn
coturn:
  image: coturn/coturn:latest
  ports:
    - "3478:3478"
    - 3478:3478/udp
  environment:
    - TURN_USER=${TURN_USER}
    - TURN_PASSWORD=${TURN_PASSWORD}
  networks:
    - bbb_net
nginx
nginx:
  image: nginx:alpine
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf:ro
  depends_on:
    - bbb-web
  networks:
    - bbb_net

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 bbb-web:
5 image: bigbluebutton/bbb-web:latest
6 ports:
7 - "8080:8080"
8 environment:
9 - BBB_SECRET=${BBB_SECRET}
10 - BBB_SERVER_URL=http://localhost
11 volumes:
12 - bbb_data:/var/bigbluebutton
13 networks:
14 - bbb_net
15
16 bbb-html5:
17 image: bigbluebutton/bbb-html5:latest
18 environment:
19 - MONGO_URL=mongodb://mongodb:27017/bbb
20 - REDIS_HOST=redis
21 depends_on:
22 - mongodb
23 - redis
24 networks:
25 - bbb_net
26
27 bbb-freeswitch:
28 image: bigbluebutton/bbb-freeswitch:latest
29 environment:
30 - EXTERNAL_IP=${EXTERNAL_IP}
31 ports:
32 - "16384-32768:16384-32768/udp"
33 networks:
34 - bbb_net
35
36 bbb-kurento:
37 image: bigbluebutton/bbb-kurento:latest
38 environment:
39 - TURN_URL=${TURN_URL}
40 - TURN_USERNAME=${TURN_USER}
41 - TURN_PASSWORD=${TURN_PASSWORD}
42 networks:
43 - bbb_net
44
45 mongodb:
46 image: mongo:4.4
47 volumes:
48 - mongodb_data:/data/db
49 networks:
50 - bbb_net
51
52 redis:
53 image: redis:7-alpine
54 volumes:
55 - redis_data:/data
56 networks:
57 - bbb_net
58
59 coturn:
60 image: coturn/coturn:latest
61 ports:
62 - "3478:3478"
63 - "3478:3478/udp"
64 environment:
65 - TURN_USER=${TURN_USER}
66 - TURN_PASSWORD=${TURN_PASSWORD}
67 networks:
68 - bbb_net
69
70 nginx:
71 image: nginx:alpine
72 ports:
73 - "80:80"
74 - "443:443"
75 volumes:
76 - ./nginx.conf:/etc/nginx/nginx.conf:ro
77 depends_on:
78 - bbb-web
79 networks:
80 - bbb_net
81
82volumes:
83 bbb_data:
84 mongodb_data:
85 redis_data:
86
87networks:
88 bbb_net:
89EOF
90
91# 2. Create the .env file
92cat > .env << 'EOF'
93# BigBlueButton
94BBB_SECRET=your_bbb_shared_secret_key
95EXTERNAL_IP=your.external.ip
96TURN_URL=turn:your.turn.server:3478
97TURN_USER=turnuser
98TURN_PASSWORD=secure_turn_password
99
100# BBB at http://localhost
101# API at http://localhost/bigbluebutton/api
102EOF
103
104# 3. Start the services
105docker compose up -d
106
107# 4. View logs
108docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/bigbluebutton-complete/run | bash

Troubleshooting

  • Audio/video connection failures: Verify TURN server credentials and ensure UDP port range 16384-32768 is not blocked by firewall
  • MongoDB connection timeout errors: Increase MongoDB memory allocation and check network connectivity between bbb-html5 and mongodb services
  • FreeSWITCH registration failures: Confirm EXTERNAL_IP environment variable matches your server's public IP address
  • NGINX 502 Bad Gateway errors: Check that bbb-web service is fully started before NGINX attempts proxying (add health checks or startup delays)
  • Recording playback failures: Verify bbb_data volume has sufficient disk space and proper write permissions for recording storage
  • Kurento WebRTC negotiation errors: Ensure TURN_URL, TURN_USERNAME, and TURN_PASSWORD environment variables are correctly configured for NAT traversal

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space