BigBlueButton Web Conferencing
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:latest4 ports: 5 - "8080:8080"6 environment: 7 - BBB_SECRET=${BBB_SECRET}8 - BBB_SERVER_URL=http://localhost9 volumes: 10 - bbb_data:/var/bigbluebutton11 networks: 12 - bbb_net1314 bbb-html5: 15 image: bigbluebutton/bbb-html5:latest16 environment: 17 - MONGO_URL=mongodb://mongodb:27017/bbb18 - REDIS_HOST=redis19 depends_on: 20 - mongodb21 - redis22 networks: 23 - bbb_net2425 bbb-freeswitch: 26 image: bigbluebutton/bbb-freeswitch:latest27 environment: 28 - EXTERNAL_IP=${EXTERNAL_IP}29 ports: 30 - "16384-32768:16384-32768/udp"31 networks: 32 - bbb_net3334 bbb-kurento: 35 image: bigbluebutton/bbb-kurento:latest36 environment: 37 - TURN_URL=${TURN_URL}38 - TURN_USERNAME=${TURN_USER}39 - TURN_PASSWORD=${TURN_PASSWORD}40 networks: 41 - bbb_net4243 mongodb: 44 image: mongo:4.445 volumes: 46 - mongodb_data:/data/db47 networks: 48 - bbb_net4950 redis: 51 image: redis:7-alpine52 volumes: 53 - redis_data:/data54 networks: 55 - bbb_net5657 coturn: 58 image: coturn/coturn:latest59 ports: 60 - "3478:3478"61 - "3478:3478/udp"62 environment: 63 - TURN_USER=${TURN_USER}64 - TURN_PASSWORD=${TURN_PASSWORD}65 networks: 66 - bbb_net6768 nginx: 69 image: nginx:alpine70 ports: 71 - "80:80"72 - "443:443"73 volumes: 74 - ./nginx.conf:/etc/nginx/nginx.conf:ro75 depends_on: 76 - bbb-web77 networks: 78 - bbb_net7980volumes: 81 bbb_data: 82 mongodb_data: 83 redis_data: 8485networks: 86 bbb_net: .env Template
.env
1# BigBlueButton2BBB_SECRET=your_bbb_shared_secret_key3EXTERNAL_IP=your.external.ip4TURN_URL=turn:your.turn.server:34785TURN_USER=turnuser6TURN_PASSWORD=secure_turn_password78# BBB at http://localhost9# API at http://localhost/bigbluebutton/apiUsage Notes
- 1BBB at http://localhost
- 2API endpoint at /bigbluebutton/api
- 3Designed for online learning
- 4Breakout rooms support
- 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 file2cat > docker-compose.yml << 'EOF'3services:4 bbb-web:5 image: bigbluebutton/bbb-web:latest6 ports:7 - "8080:8080"8 environment:9 - BBB_SECRET=${BBB_SECRET}10 - BBB_SERVER_URL=http://localhost11 volumes:12 - bbb_data:/var/bigbluebutton13 networks:14 - bbb_net1516 bbb-html5:17 image: bigbluebutton/bbb-html5:latest18 environment:19 - MONGO_URL=mongodb://mongodb:27017/bbb20 - REDIS_HOST=redis21 depends_on:22 - mongodb23 - redis24 networks:25 - bbb_net2627 bbb-freeswitch:28 image: bigbluebutton/bbb-freeswitch:latest29 environment:30 - EXTERNAL_IP=${EXTERNAL_IP}31 ports:32 - "16384-32768:16384-32768/udp"33 networks:34 - bbb_net3536 bbb-kurento:37 image: bigbluebutton/bbb-kurento:latest38 environment:39 - TURN_URL=${TURN_URL}40 - TURN_USERNAME=${TURN_USER}41 - TURN_PASSWORD=${TURN_PASSWORD}42 networks:43 - bbb_net4445 mongodb:46 image: mongo:4.447 volumes:48 - mongodb_data:/data/db49 networks:50 - bbb_net5152 redis:53 image: redis:7-alpine54 volumes:55 - redis_data:/data56 networks:57 - bbb_net5859 coturn:60 image: coturn/coturn:latest61 ports:62 - "3478:3478"63 - "3478:3478/udp"64 environment:65 - TURN_USER=${TURN_USER}66 - TURN_PASSWORD=${TURN_PASSWORD}67 networks:68 - bbb_net6970 nginx:71 image: nginx:alpine72 ports:73 - "80:80"74 - "443:443"75 volumes:76 - ./nginx.conf:/etc/nginx/nginx.conf:ro77 depends_on:78 - bbb-web79 networks:80 - bbb_net8182volumes:83 bbb_data:84 mongodb_data:85 redis_data:8687networks:88 bbb_net:89EOF9091# 2. Create the .env file92cat > .env << 'EOF'93# BigBlueButton94BBB_SECRET=your_bbb_shared_secret_key95EXTERNAL_IP=your.external.ip96TURN_URL=turn:your.turn.server:347897TURN_USER=turnuser98TURN_PASSWORD=secure_turn_password99100# BBB at http://localhost101# API at http://localhost/bigbluebutton/api102EOF103104# 3. Start the services105docker compose up -d106107# 4. View logs108docker compose logs -fOne-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 | bashTroubleshooting
- 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
Components
bigbluebuttonnginxredismongodbcoturn
Tags
#bigbluebutton#video#education#webrtc#lms
Category
Message Queues & BrokersAd Space
Shortcuts: C CopyF FavoriteD Download