Deploying BigBlueButton
BigBlueButton is a powerful, open-source web conferencing platform designed specifically for online learning and virtual collaboration. Built with educators and organizations in mind, BigBlueButton provides a complete solution for hosting interactive virtual classrooms, training sessions, webinars, and meetings. With a focus on usability, accessibility, and privacy, BigBlueButton enables seamless real-time communication with video, audio, screen sharing, whiteboarding, and collaborative tools—all while keeping your data secure on your own infrastructure.
Why BigBlueButton?
BigBlueButton stands out in the web conferencing landscape with its education-first approach and comprehensive features:
- Video and Audio: High-quality video conferencing with multiple layout options and dynamic participant switching
- Screen Sharing: Share your screen or applications with full control and annotation capabilities
- Whiteboarding: Built-in whiteboard with drawing tools for collaborative problem-solving
- Chat and Messaging: Real-time text chat with public and private messaging options
- Polls and Surveys: Engage participants with interactive polls and instant feedback collection
- Breakout Rooms: Divide participants into smaller groups for collaborative work
- Virtual Backgrounds: Support for custom backgrounds to enhance professionalism
- Recording and Playback: Automatically record sessions for asynchronous learning
- Accessibility Features: Full support for captions, screen reader compatibility, and keyboard navigation
- API Integration: Comprehensive REST API for integrating with learning management systems
- Privacy First: No analytics tracking, data stays on your server
- Multi-User Support: Hundreds of concurrent users with role-based permissions
- Open Source: AGPL licensed with active community and commercial support available
BigBlueButton is ideal for educational institutions, training organizations, enterprises, and anyone who needs reliable, private web conferencing without vendor lock-in. With persistent storage on Klutch.sh, your meeting recordings and configuration are always safe and accessible.
Prerequisites
Before deploying BigBlueButton, ensure you have:
- A Klutch.sh account
- A GitHub repository with your BigBlueButton deployment configuration
- Basic familiarity with Docker, Git, and web conferencing
- A domain name (recommended for SSL certificates and professional appearance)
- At least 4GB RAM recommended for smooth operation
- Sufficient bandwidth for video streaming
Important Considerations
Deploying BigBlueButton
Create a New Project
Log in to your Klutch.sh dashboard and create a new project for your BigBlueButton deployment.
Prepare Your Repository
Create a GitHub repository with the following structure for your BigBlueButton deployment:
bigbluebutton-deploy/├─ Dockerfile├─ .env.example├─ bbb-config.yml├─ .gitignore└─ README.mdHere’s a Dockerfile for BigBlueButton (note: this uses a pre-built BigBlueButton image for simplicity):
FROM bigbluebutton/bigbluebutton:latest# Install additional dependenciesRUN apt-get update && apt-get install -y \curl \wget \ssl-cert \&& rm -rf /var/lib/apt/lists/*# Create necessary directoriesRUN mkdir -p /bbb-data /bbb-recordings /bbb/logs# Expose ports for BigBlueButton# 80: HTTP# 443: HTTPS# 1935: RTMP# 3478-3479: STUN serversEXPOSE 80 443 1935 3478 3479# Health checkHEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \CMD curl -f http://localhost/bigbluebutton/api/getMeetings || exit 1# Start BigBlueButton servicesCMD ["/etc/bigbluebutton/bbb-entrypoint.sh"]Create a
.env.examplefile for environment configuration:Terminal window # BigBlueButton ConfigurationBBB_HOSTNAME=bbb.yourdomain.comBBB_PROTOCOL=httpsBBB_PORT=443# Security and APIBBB_SECRET_SHARED_SECRET=your-secure-secret-keyBBB_MODERATOR_PASSWORD=secure-password-hereBBB_VIEWER_PASSWORD=secure-password-here# Recording ConfigurationBBB_RECORDING_ENABLED=trueBBB_RECORDING_FORMAT=mp4BBB_RECORDING_KEEP_DAYS=90# Performance TuningBBB_MAX_PARTICIPANTS=100BBB_MEETING_DURATION_MINUTES=240# FeaturesBBB_ENABLE_VIRTUAL_BACKGROUNDS=trueBBB_ENABLE_CAPTIONS=trueBBB_ENABLE_POLLING=trueBBB_ENABLE_BREAKOUT_ROOMS=trueBBB_ENABLE_SCREEN_SHARING=trueCommit and push to your GitHub repository:
Terminal window git initgit add .git commit -m "Initial BigBlueButton deployment"git remote add origin https://github.com/yourusername/bigbluebutton-deploy.gitgit push -u origin mainCreate a New App
In the Klutch.sh dashboard:
- Click “Create New App”
- Select your GitHub repository containing the Dockerfile
- Choose the branch (typically
mainormaster) - Klutch.sh will automatically detect the Dockerfile in the root directory
Configure Environment Variables
Set up these essential environment variables in your Klutch.sh dashboard:
Variable Description Example BBB_HOSTNAMEYour domain name for BigBlueButton bbb.example.comBBB_PROTOCOLProtocol (http or https) httpsBBB_PORTPort number (usually 443 for HTTPS) 443BBB_SECRET_SHARED_SECRETShared secret for API authentication (generate a secure random string) your-secure-secret-keyBBB_MODERATOR_PASSWORDDefault moderator password secure-password-hereBBB_VIEWER_PASSWORDDefault viewer password secure-password-hereBBB_RECORDING_ENABLEDEnable recording functionality trueBBB_MAX_PARTICIPANTSMaximum concurrent participants 100BBB_ENABLE_VIRTUAL_BACKGROUNDSEnable virtual background support trueBBB_ENABLE_CAPTIONSEnable live captions trueConfigure Persistent Storage
BigBlueButton requires persistent storage for recordings and configuration data. Add persistent volumes:
Mount Path Description Recommended Size /var/bigbluebuttonBigBlueButton data directory 50GB /var/bigbluebutton/publishedPublished recordings and media 500GB+ /var/bigbluebutton/unpublishedUnpublished recordings (work in progress) 100GB /var/log/bigbluebuttonApplication logs 20GB In the Klutch.sh dashboard:
- Navigate to your app settings
- Go to the “Volumes” section
- Click “Add Volume” for each mount path
- Set mount paths and sizes as specified above
Set Network Configuration
Configure your app’s network settings:
- Select traffic type: HTTP (BigBlueButton uses standard web ports)
- Klutch.sh will automatically handle HTTPS termination via reverse proxy
- Ensure ports 80 and 443 are accessible from your domain
Configure Custom Domain
BigBlueButton requires a domain for proper operation:
- Navigate to your app’s “Domains” section in Klutch.sh
- Click “Add Custom Domain”
- Enter your domain (e.g.,
bbb.yourdomain.com) - Configure DNS with a CNAME record to point to your Klutch.sh app
- Update
BBB_HOSTNAMEenvironment variable to match your domain
Deploy Your App
- Review all settings
- Click “Deploy”
- Klutch.sh will build the Docker image and start your BigBlueButton instance
- Wait for the deployment to complete (typically 5-10 minutes for the initial build)
- BigBlueButton services will initialize on first startup (may take several minutes)
Initial Setup and Configuration
After deployment completes, access your BigBlueButton instance:
Accessing BigBlueButton
Navigate to your app’s domain: https://bbb.yourdomain.com
You’ll see the BigBlueButton administration interface where you can configure settings and test the system.
Creating Your First Meeting
- Log in to BigBlueButton (use default credentials or configured credentials)
- Click “Create Meeting” or “Start New Meeting”
- Enter meeting details:
- Meeting name (e.g., “Weekly Team Standup”)
- Meeting description (optional)
- Duration (in minutes, or leave blank for unlimited)
- Setting password (optional)
- Configure meeting options:
- Allow webcam sharing
- Allow microphone use
- Enable whiteboard
- Allow screen sharing
- Start the meeting
Joining a Meeting
Participants can join through:
- Direct meeting link
- Meeting name and password
- Integration with LMS (Moodle, Canvas, Blackboard)
- API-generated join links
Recording Meetings
Enable recording for any meeting:
- Before starting: Check “Record this meeting” option
- During meeting: Recording indicator shows active recording
- After meeting: Recordings process automatically
- Access recordings in meeting history or recordings section
Environment Variable Examples
Basic Configuration
BBB_HOSTNAME=bbb.yourdomain.comBBB_PROTOCOL=httpsBBB_PORT=443BBB_SECRET_SHARED_SECRET=your-secure-random-stringBBB_MODERATOR_PASSWORD=moderator-passwordBBB_VIEWER_PASSWORD=viewer-passwordBBB_RECORDING_ENABLED=trueAdvanced Configuration
For fine-tuned control:
BBB_HOSTNAME=bbb.yourdomain.comBBB_PROTOCOL=httpsBBB_PORT=443BBB_SECRET_SHARED_SECRET=your-secure-secretBBB_MAX_PARTICIPANTS=200BBB_MEETING_DURATION_MINUTES=480BBB_RECORDING_ENABLED=trueBBB_RECORDING_FORMAT=mp4BBB_RECORDING_KEEP_DAYS=90BBB_ENABLE_VIRTUAL_BACKGROUNDS=trueBBB_ENABLE_CAPTIONS=trueBBB_ENABLE_POLLING=trueBBB_ENABLE_BREAKOUT_ROOMS=trueBBB_ENABLE_SCREEN_SHARING=trueBBB_ENABLE_CHAT=trueBBB_CHAT_HISTORY_ENABLED=trueBBB_PRESENTATION_TIMEOUT_MINUTES=30BBB_ALLOW_REQUEST_AUDIO_COOKIE=trueSample Code and Getting Started
BigBlueButton API Integration
# Get list of active meetingscurl https://bbb.yourdomain.com/bigbluebutton/api/getMeetings \ -d checksum=YOUR_CHECKSUM
# Create a new meetingcurl -X POST https://bbb.yourdomain.com/bigbluebutton/api/create \ -d "name=My+Meeting&meetingID=meeting-123" \ -d "checksum=YOUR_CHECKSUM"
# Join a meetingcurl https://bbb.yourdomain.com/bigbluebutton/api/join \ -d "meetingID=meeting-123&fullName=User+Name&role=MODERATOR" \ -d "checksum=YOUR_CHECKSUM"
# End a meetingcurl https://bbb.yourdomain.com/bigbluebutton/api/end \ -d "meetingID=meeting-123" \ -d "checksum=YOUR_CHECKSUM"JavaScript Example - Creating Meeting with API
const crypto = require('crypto');
const BBB_URL = "https://bbb.yourdomain.com/bigbluebutton/api";const SHARED_SECRET = "your-shared-secret";
function getChecksum(params, secret) { const str = params + secret; return crypto.createHash('sha1').update(str).digest('hex');}
function createMeeting(meetingName, meetingID) { const params = `name=${encodeURIComponent(meetingName)}&meetingID=${meetingID}`; const checksum = getChecksum(`create${params}`, SHARED_SECRET);
const url = `${BBB_URL}/create?${params}&checksum=${checksum}`;
fetch(url) .then(response => response.text()) .then(data => { console.log("Meeting created:", data); // Parse XML response and extract meetingToken }) .catch(error => console.error('Error creating meeting:', error));}
function joinMeeting(meetingID, fullName, role = "MODERATOR") { const params = `meetingID=${meetingID}&fullName=${encodeURIComponent(fullName)}&role=${role}`; const checksum = getChecksum(`join${params}`, SHARED_SECRET);
const url = `${BBB_URL}/join?${params}&checksum=${checksum}`; window.location.href = url;}
// UsagecreateMeeting("Team Meeting", "meeting-123");// joinMeeting("meeting-123", "John Doe", "MODERATOR");Python Example - Meeting Management
import hashlibimport requestsfrom urllib.parse import quote
BBB_URL = "https://bbb.yourdomain.com/bigbluebutton/api"SHARED_SECRET = "your-shared-secret"
def get_checksum(params, secret): """Generate checksum for BigBlueButton API calls""" data = params + secret return hashlib.sha1(data.encode()).hexdigest()
def create_meeting(meeting_name, meeting_id, max_participants=100): """Create a new BigBlueButton meeting""" params = f"name={quote(meeting_name)}&meetingID={meeting_id}&maxParticipants={max_participants}" checksum = get_checksum(f"create{params}", SHARED_SECRET)
url = f"{BBB_URL}/create?{params}&checksum={checksum}"
try: response = requests.get(url) if response.status_code == 200: print(f"Meeting '{meeting_name}' created successfully") return response.text else: print(f"Error creating meeting: {response.status_code}") except requests.exceptions.RequestException as e: print(f"Request error: {e}")
def get_meetings(): """Get list of active meetings""" params = "" checksum = get_checksum(f"getMeetings{params}", SHARED_SECRET)
url = f"{BBB_URL}/getMeetings?checksum={checksum}"
try: response = requests.get(url) if response.status_code == 200: print("Active meetings:", response.text) return response.text else: print(f"Error retrieving meetings: {response.status_code}") except requests.exceptions.RequestException as e: print(f"Request error: {e}")
def get_recordings(): """Get list of recordings""" params = "" checksum = get_checksum(f"getRecordings{params}", SHARED_SECRET)
url = f"{BBB_URL}/getRecordings?checksum={checksum}"
try: response = requests.get(url) if response.status_code == 200: print("Recordings:", response.text) return response.text else: print(f"Error retrieving recordings: {response.status_code}") except requests.exceptions.RequestException as e: print(f"Request error: {e}")
# Usagecreate_meeting("Team Standup", "standup-123")get_meetings()get_recordings()Docker Compose for Local Development
For local testing before deploying to Klutch.sh:
version: '3.8'
services: bigbluebutton: image: bigbluebutton/bigbluebutton:latest container_name: bigbluebutton environment: - BBB_HOSTNAME=localhost - BBB_PROTOCOL=http - BBB_PORT=8080 - BBB_SECRET_SHARED_SECRET=dev-secret-key - BBB_RECORDING_ENABLED=true ports: - "80:80" - "443:443" - "1935:1935" - "3478:3478" - "3479:3479" volumes: - ./bbb-data:/var/bigbluebutton - ./recordings:/var/bigbluebutton/published - ./logs:/var/log/bigbluebutton restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost/bigbluebutton/api/getMeetings"] interval: 30s timeout: 10s retries: 3 start_period: 60sSave as docker-compose.yml and run:
docker-compose up -dAccess BigBlueButton at http://localhost
LMS Integration
Moodle Integration
BigBlueButton integrates natively with Moodle:
- Install BigBlueButton plugin in Moodle
- Configure plugin with your BigBlueButton server details
- Add “BigBlueButton Room” activity to courses
- Students access meetings directly from Moodle
Canvas Integration
For Canvas LMS:
- Use BigBlueButton’s Canvas integration tools
- Configure API credentials in Canvas
- Add BigBlueButton to course collaborations
- Launch meetings from Canvas interface
Custom LMS Integration
Use the BigBlueButton API to integrate with custom systems:
# Generate join URL for custom integrationcurl https://bbb.yourdomain.com/bigbluebutton/api/join \ -d "meetingID=course-123-lesson-1" \ -d "fullName=Student+Name" \ -d "password=meeting-password" \ -d "checksum=YOUR_CHECKSUM"Recording Management
Accessing Recordings
- Navigate to “Recordings” section in BigBlueButton admin
- View all recordings with metadata and statistics
- Publish or unpublish recordings
- Delete recordings as needed
Recording Storage
Configure recording storage paths:
BBB_RECORDING_ENABLED=trueBBB_RECORDING_FORMAT=mp4BBB_RECORDING_QUALITY=mediumBBB_RECORDING_KEEP_DAYS=90BBB_RECORDING_STORAGE_PATH=/var/bigbluebutton/publishedDownloading and Sharing Recordings
# List available recordingscurl https://bbb.yourdomain.com/bigbluebutton/api/getRecordings
# Access recording playback link# URL format: https://bbb.yourdomain.com/playback/presentation/2.3/[recordID]Performance and Scaling
Vertical Scaling
For larger deployments:
- Navigate to your app settings in Klutch.sh
- Increase instance resources:
- Increase CPU cores (4+ cores recommended for 50+ users)
- Increase RAM (8GB+ for production)
- Increase persistent volume sizes:
- Scale recording storage based on usage
- Plan for growth: ~500MB per hour of recorded meetings
Performance Tuning
Optimize for your deployment:
BBB_MAX_PARTICIPANTS=150BBB_JBOSS_HEAP_SIZE=2048mBBB_RECORDING_PROCESS_TIMEOUT=3600BBB_AUDIO_QUALITY=highBBB_VIDEO_BITRATE=1000Monitoring Performance
Monitor key metrics:
- Active meeting count
- Participant count
- Recording queue length
- Disk usage on recording volume
- CPU and memory utilization
Custom Domain Configuration
BigBlueButton requires a proper domain for operation:
- Navigate to your app’s “Domains” section in Klutch.sh
- Click “Add Custom Domain”
- Enter your domain (e.g.,
bbb.yourdomain.com) - Configure your DNS provider:
bbb.yourdomain.com → example-app.klutch.sh (CNAME record)
- Update
BBB_HOSTNAMEenvironment variable - Redeploy the application
- Klutch.sh automatically provisions SSL certificates
Security Best Practices
Authentication and Access Control
- Use strong, unique moderator and viewer passwords
- Generate secure shared secret using cryptographically random methods
- Implement role-based access control (moderator vs participant)
- Enable password protection for sensitive meetings
- Rotate shared secrets regularly
Meeting Security
- Set meeting duration limits to prevent resource hogging
- Enable waiting room for authenticated meetings
- Require moderator approval for participant entry
- Log all meeting access and recordings
- Monitor for unauthorized access attempts
Network Security
- Always use HTTPS (Klutch.sh provides this automatically)
- Restrict API access to authorized applications only
- Implement rate limiting to prevent abuse
- Monitor network traffic for suspicious activity
- Keep BigBlueButton and dependencies updated
Data Privacy
- Recordings stay on your server
- No third-party data collection or analytics
- Full control over data retention policies
- Implement GDPR/CCPA compliance measures
- Regular backups of all meeting data and recordings
Troubleshooting
Common Issues and Solutions
Issue: BigBlueButton fails to start
Check the deployment logs in Klutch.sh dashboard. Common causes:
- Missing
BBB_HOSTNAMEenvironment variable - Insufficient disk space on recording volume
- Port conflicts (ensure 80, 443 are available)
- Insufficient memory allocation
Issue: Unable to join meetings
Solutions:
- Verify domain is correctly configured (
BBB_HOSTNAME) - Check that domain resolves properly via DNS
- Ensure SSL certificate is valid
- Verify meeting URL format is correct
- Check network firewall rules
Issue: No audio/video in meetings
Causes and solutions:
- Check browser permissions for camera/microphone
- Verify network bandwidth is sufficient
- Check WebRTC configuration
- Enable TURN servers if behind restrictive firewall
- Test audio/video in meeting setup screen
Issue: Recordings not processing
Troubleshooting:
- Check disk space on recording volume
- Verify recording process is running
- Review recording process logs
- Increase
BBB_RECORDING_PROCESS_TIMEOUT - Check file permissions on recording directories
Issue: High CPU/Memory usage
Solutions:
- Reduce
BBB_MAX_PARTICIPANTS - Disable unused features (virtual backgrounds, etc.)
- Increase instance resources
- Optimize video quality settings
- Monitor and limit concurrent meetings
Upgrading BigBlueButton
To update BigBlueButton to a newer version:
- Update your Dockerfile to use the latest BigBlueButton image:
FROM bigbluebutton/bigbluebutton:2.6-latest
- Commit and push to GitHub
- Klutch.sh will automatically rebuild with the latest version
- Test in a staging environment before production
- Backup all recordings before major version upgrades
Additional Resources
- BigBlueButton Official Website - Project information and news
- BigBlueButton Documentation - Complete reference and guides
- BigBlueButton API Documentation - API reference
- BigBlueButton GitHub Repository - Source code
- BigBlueButton Support - Community and professional support
- Klutch.sh Getting Started Guide
- Klutch.sh Volumes Documentation
- Klutch.sh Custom Domains Guide
Conclusion
Deploying BigBlueButton on Klutch.sh provides you with a complete, self-hosted web conferencing platform that respects privacy while supporting interactive online learning and collaboration. With persistent storage for recordings, powerful meeting features, and full control over your infrastructure, BigBlueButton enables organizations to deliver effective virtual education and meetings. Klutch.sh’s managed infrastructure ensures your conferencing system is always available, secure, and performant.
Start hosting virtual meetings and classrooms today by deploying BigBlueButton on Klutch.sh and give your organization the conferencing solution it deserves.