Jitsi Meet Video Conferencing
Self-hosted video conferencing with Jitsi Meet, Jibri recording, and Jigasi.
Overview
Jitsi Meet is an open-source video conferencing platform that provides secure, browser-based communication without requiring user registration or software downloads. Originally developed by Emil Ivov and later acquired by 8x8, Jitsi has become a leading alternative to commercial video conferencing solutions, offering end-to-end encryption and complete control over data privacy. The platform leverages WebRTC technology to deliver high-quality audio and video directly through web browsers, making it accessible across all major operating systems and devices.
This comprehensive Jitsi stack combines five essential components that work together to create a complete video conferencing infrastructure. The jitsi-web container serves the web interface and client application, while Prosody acts as the XMPP server handling user authentication and messaging. Jicofo (JItsi COnference FOcus) manages conference sessions and participant coordination, JVB (Jitsi Videobridge) handles the actual media routing and streaming, and Jibri provides recording and live streaming capabilities to external platforms like YouTube or file storage.
This deployment is ideal for organizations requiring complete control over their video conferencing infrastructure, including educational institutions conducting remote learning, healthcare providers needing HIPAA-compliant communication, and enterprises with strict data sovereignty requirements. The inclusion of Jibri recording capabilities makes it particularly valuable for businesses needing to archive meetings for compliance or training purposes, while the Prosody XMPP server enables custom authentication integration with existing enterprise systems.
Key Features
- WebRTC-based peer-to-peer video conferencing with automatic quality adaptation based on network conditions
- Jibri integration for recording meetings to local storage and live streaming to YouTube, Facebook, or custom RTMP endpoints
- Prosody XMPP server with internal authentication and support for LDAP, JWT, and SAML integration
- JVB media routing with support for simulcast, VP8/VP9 video codecs, and Opus audio encoding
- Jicofo conference management with automatic load balancing across multiple JVB instances
- Built-in screen sharing, chat messaging, and whiteboard collaboration tools
- End-to-end encryption support with configurable security policies and lobby mode
- REST API access for programmatic room creation, participant management, and recording control
Common Use Cases
- 1Enterprise video conferencing with meeting recording for compliance and training documentation
- 2Educational institutions hosting virtual classrooms with lecture recording and screen sharing capabilities
- 3Healthcare organizations requiring HIPAA-compliant video consultations with encrypted communication
- 4Government agencies needing self-hosted communication platforms with complete data sovereignty control
- 5Software development teams conducting daily standups, code reviews, and sprint planning meetings
- 6Event organizers hosting virtual conferences with live streaming to social media platforms
- 7Customer support teams providing face-to-face technical assistance with screen sharing functionality
Prerequisites
- Minimum 4GB RAM and 2 CPU cores for basic deployment, 8GB+ for recording with Jibri
- UDP port 10000 open on firewall for JVB media traffic and TCP ports 80/443 for web access
- Valid SSL certificate for production deployment (Let's Encrypt integration available)
- TURN server configuration for participants behind restrictive NATs or corporate firewalls
- Docker host with sufficient /dev/shm space (2GB+) for Jibri Chrome browser instances
- Domain name with proper DNS A records pointing to your server's public IP address
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 web: 3 image: jitsi/web:latest4 ports: 5 - "8443:443"6 - "8080:80"7 environment: 8 - ENABLE_LETSENCRYPT=09 - PUBLIC_URL=https://localhost:844310 - TZ=UTC11 volumes: 12 - ./web:/config13 - ./transcripts:/usr/share/jitsi-meet/transcripts14 networks: 15 jitsi: 16 aliases: 17 - meet.jitsi1819 prosody: 20 image: jitsi/prosody:latest21 environment: 22 - ENABLE_AUTH=123 - AUTH_TYPE=internal24 - JICOFO_AUTH_PASSWORD=${JICOFO_PASSWORD}25 - JVB_AUTH_PASSWORD=${JVB_PASSWORD}26 - JIBRI_RECORDER_PASSWORD=${JIBRI_PASSWORD}27 volumes: 28 - ./prosody/config:/config29 - ./prosody/prosody-plugins-custom:/prosody-plugins-custom30 networks: 31 jitsi: 32 aliases: 33 - xmpp.meet.jitsi3435 jicofo: 36 image: jitsi/jicofo:latest37 environment: 38 - JICOFO_AUTH_PASSWORD=${JICOFO_PASSWORD}39 - TZ=UTC40 volumes: 41 - ./jicofo:/config42 depends_on: 43 - prosody44 networks: 45 - jitsi4647 jvb: 48 image: jitsi/jvb:latest49 ports: 50 - "10000:10000/udp"51 environment: 52 - JVB_AUTH_PASSWORD=${JVB_PASSWORD}53 - JVB_PORT=1000054 - JVB_TCP_PORT=444355 - TZ=UTC56 volumes: 57 - ./jvb:/config58 depends_on: 59 - prosody60 networks: 61 - jitsi6263 jibri: 64 image: jitsi/jibri:latest65 cap_add: 66 - SYS_ADMIN67 environment: 68 - JIBRI_RECORDER_PASSWORD=${JIBRI_PASSWORD}69 - DISPLAY=:070 volumes: 71 - ./jibri:/config72 - /dev/shm:/dev/shm73 - ./recordings:/recordings74 depends_on: 75 - jicofo76 networks: 77 - jitsi7879volumes: 80 web: 81 prosody: 82 jicofo: 83 jvb: 84 jibri: 8586networks: 87 jitsi: .env Template
.env
1# Jitsi Meet2JICOFO_PASSWORD=secure_jicofo_password3JVB_PASSWORD=secure_jvb_password4JIBRI_PASSWORD=secure_jibri_password56# Jitsi at https://localhost:84437# UDP 10000 for video bridgeUsage Notes
- 1Jitsi at https://localhost:8443
- 2Jibri for recording/streaming
- 3UDP port 10000 required for video
- 4Configure TURN server for NAT
- 5Internal auth by default
Individual Services(5 services)
Copy individual services to mix and match with your existing compose files.
web
web:
image: jitsi/web:latest
ports:
- "8443:443"
- "8080:80"
environment:
- ENABLE_LETSENCRYPT=0
- PUBLIC_URL=https://localhost:8443
- TZ=UTC
volumes:
- ./web:/config
- ./transcripts:/usr/share/jitsi-meet/transcripts
networks:
jitsi:
aliases:
- meet.jitsi
prosody
prosody:
image: jitsi/prosody:latest
environment:
- ENABLE_AUTH=1
- AUTH_TYPE=internal
- JICOFO_AUTH_PASSWORD=${JICOFO_PASSWORD}
- JVB_AUTH_PASSWORD=${JVB_PASSWORD}
- JIBRI_RECORDER_PASSWORD=${JIBRI_PASSWORD}
volumes:
- ./prosody/config:/config
- ./prosody/prosody-plugins-custom:/prosody-plugins-custom
networks:
jitsi:
aliases:
- xmpp.meet.jitsi
jicofo
jicofo:
image: jitsi/jicofo:latest
environment:
- JICOFO_AUTH_PASSWORD=${JICOFO_PASSWORD}
- TZ=UTC
volumes:
- ./jicofo:/config
depends_on:
- prosody
networks:
- jitsi
jvb
jvb:
image: jitsi/jvb:latest
ports:
- 10000:10000/udp
environment:
- JVB_AUTH_PASSWORD=${JVB_PASSWORD}
- JVB_PORT=10000
- JVB_TCP_PORT=4443
- TZ=UTC
volumes:
- ./jvb:/config
depends_on:
- prosody
networks:
- jitsi
jibri
jibri:
image: jitsi/jibri:latest
cap_add:
- SYS_ADMIN
environment:
- JIBRI_RECORDER_PASSWORD=${JIBRI_PASSWORD}
- DISPLAY=:0
volumes:
- ./jibri:/config
- /dev/shm:/dev/shm
- ./recordings:/recordings
depends_on:
- jicofo
networks:
- jitsi
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 web:5 image: jitsi/web:latest6 ports:7 - "8443:443"8 - "8080:80"9 environment:10 - ENABLE_LETSENCRYPT=011 - PUBLIC_URL=https://localhost:844312 - TZ=UTC13 volumes:14 - ./web:/config15 - ./transcripts:/usr/share/jitsi-meet/transcripts16 networks:17 jitsi:18 aliases:19 - meet.jitsi2021 prosody:22 image: jitsi/prosody:latest23 environment:24 - ENABLE_AUTH=125 - AUTH_TYPE=internal26 - JICOFO_AUTH_PASSWORD=${JICOFO_PASSWORD}27 - JVB_AUTH_PASSWORD=${JVB_PASSWORD}28 - JIBRI_RECORDER_PASSWORD=${JIBRI_PASSWORD}29 volumes:30 - ./prosody/config:/config31 - ./prosody/prosody-plugins-custom:/prosody-plugins-custom32 networks:33 jitsi:34 aliases:35 - xmpp.meet.jitsi3637 jicofo:38 image: jitsi/jicofo:latest39 environment:40 - JICOFO_AUTH_PASSWORD=${JICOFO_PASSWORD}41 - TZ=UTC42 volumes:43 - ./jicofo:/config44 depends_on:45 - prosody46 networks:47 - jitsi4849 jvb:50 image: jitsi/jvb:latest51 ports:52 - "10000:10000/udp"53 environment:54 - JVB_AUTH_PASSWORD=${JVB_PASSWORD}55 - JVB_PORT=1000056 - JVB_TCP_PORT=444357 - TZ=UTC58 volumes:59 - ./jvb:/config60 depends_on:61 - prosody62 networks:63 - jitsi6465 jibri:66 image: jitsi/jibri:latest67 cap_add:68 - SYS_ADMIN69 environment:70 - JIBRI_RECORDER_PASSWORD=${JIBRI_PASSWORD}71 - DISPLAY=:072 volumes:73 - ./jibri:/config74 - /dev/shm:/dev/shm75 - ./recordings:/recordings76 depends_on:77 - jicofo78 networks:79 - jitsi8081volumes:82 web:83 prosody:84 jicofo:85 jvb:86 jibri:8788networks:89 jitsi:90EOF9192# 2. Create the .env file93cat > .env << 'EOF'94# Jitsi Meet95JICOFO_PASSWORD=secure_jicofo_password96JVB_PASSWORD=secure_jvb_password97JIBRI_PASSWORD=secure_jibri_password9899# Jitsi at https://localhost:8443100# UDP 10000 for video bridge101EOF102103# 3. Start the services104docker compose up -d105106# 4. View logs107docker 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/jitsi-meet-complete/run | bashTroubleshooting
- Participants can't join meetings: Verify UDP port 10000 is open and accessible from external networks
- Jibri recording fails with Chrome crashes: Increase /dev/shm size to at least 2GB and ensure SYS_ADMIN capability
- Audio/video quality issues: Configure TURN server settings and check bandwidth between JVB and participants
- Prosody authentication errors: Verify JICOFO_PASSWORD and JVB_PASSWORD match across all service configurations
- Web interface shows 'connection failed': Check that prosody container is healthy and XMPP domain resolution works
- Recordings have no audio: Ensure PulseAudio is properly configured in Jibri container and ALSA devices are accessible
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
jitsi-webjicofojvbjibriprosody
Tags
#jitsi#video#conferencing#webrtc#recording
Category
Message Queues & BrokersAd Space
Shortcuts: C CopyF FavoriteD Download