Jitsi Meet Video Conferencing
Self-hosted video conferencing with Jitsi Meet, Jicofo, JVB, and Prosody XMPP.
Overview
Jitsi Meet is an open-source video conferencing solution that enables secure, high-quality virtual meetings without requiring user registration or software downloads. Originally developed by Jitsi and now maintained by 8x8, it provides a complete WebRTC-based communication platform that can be self-hosted for full privacy control. The stack consists of four essential components: jitsi-web serves the browser-based meeting interface, Prosody handles XMPP messaging and authentication, Jicofo (Jitsi Conference Focus) manages conference sessions and participant coordination, and JVB (Jitsi Videobridge) routes media streams efficiently between participants.
This multi-container deployment creates a production-grade video conferencing infrastructure that rivals commercial solutions like Zoom or Teams. The architecture separates concerns effectively - the web frontend handles user interactions, Prosody manages secure messaging protocols, Jicofo orchestrates meeting logistics, and JVB optimizes bandwidth usage through selective forwarding unit technology. Unlike traditional conferencing systems that route all media through central servers, JVB intelligently forwards only necessary streams to each participant, dramatically reducing server load and improving call quality.
Organizations seeking complete control over their communication infrastructure will find this stack invaluable, particularly those in healthcare, government, or finance where data sovereignty is critical. Educational institutions benefit from unlimited meeting duration and participant counts, while development teams appreciate the ability to customize features and integrate with existing authentication systems. The combination eliminates recurring subscription costs while providing enterprise-grade features like recording, screen sharing, and mobile compatibility.
Key Features
- WebRTC-based real-time communication with automatic codec negotiation and adaptive bitrate streaming
- Prosody XMPP server integration for secure messaging, presence, and multi-user chat functionality
- Jicofo conference orchestration with automatic participant load balancing and session management
- JVB selective forwarding unit technology that reduces bandwidth usage by up to 90% compared to traditional MCUs
- Built-in screen sharing, virtual backgrounds, and recording capabilities without third-party plugins
- Guest access support allowing anonymous users to join meetings without account creation
- JWT authentication integration for enterprise single sign-on and user management systems
- Multi-language interface support with real-time transcription and closed captioning features
Common Use Cases
- 1Enterprise organizations replacing Zoom or Teams with self-hosted infrastructure for complete data control
- 2Healthcare providers conducting HIPAA-compliant telemedicine consultations with encrypted communications
- 3Educational institutions hosting unlimited-duration classes and webinars without per-user licensing costs
- 4Government agencies requiring air-gapped video conferencing solutions for classified or sensitive meetings
- 5Open source communities hosting public meetings and conferences with customizable branding and features
- 6Development teams integrating video calling capabilities into custom applications via Jitsi's APIs
- 7Remote teams in privacy-conscious organizations avoiding data sharing with commercial conferencing providers
Prerequisites
- Minimum 4GB RAM and 2 CPU cores for small deployments (up to 20 participants simultaneously)
- Port 10000/UDP open for JVB media traffic and port 8080/8443 for web interface access
- Valid SSL certificate and domain name configured for PUBLIC_URL environment variable
- Generated authentication passwords using openssl rand -hex 16 for JICOFO_AUTH_PASSWORD and JVB_AUTH_PASSWORD
- Understanding of XMPP protocols and WebRTC networking for advanced configuration and troubleshooting
- Firewall configuration allowing UDP traffic on port 10000 and TCP traffic on configured web ports
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 - "8080:80"6 - "8443:443"7 volumes: 8 - web_config:/config:Z9 - web_crontabs:/var/spool/cron/crontabs:Z10 - web_transcripts:/usr/share/jitsi-meet/transcripts:Z11 environment: 12 ENABLE_AUTH: ${ENABLE_AUTH}13 ENABLE_GUESTS: ${ENABLE_GUESTS}14 ENABLE_TRANSCRIPTIONS: ${ENABLE_TRANSCRIPTIONS}15 PUBLIC_URL: ${PUBLIC_URL}16 TZ: ${TZ}17 networks: 18 meet.jitsi: 1920 prosody: 21 image: jitsi/prosody:latest22 volumes: 23 - prosody_config:/config:Z24 - prosody_plugins:/prosody-plugins-custom:Z25 environment: 26 AUTH_TYPE: ${AUTH_TYPE}27 ENABLE_AUTH: ${ENABLE_AUTH}28 ENABLE_GUESTS: ${ENABLE_GUESTS}29 PUBLIC_URL: ${PUBLIC_URL}30 TZ: ${TZ}31 networks: 32 meet.jitsi: 33 aliases: 34 - xmpp.meet.jitsi3536 jicofo: 37 image: jitsi/jicofo:latest38 volumes: 39 - jicofo_config:/config:Z40 environment: 41 AUTH_TYPE: ${AUTH_TYPE}42 TZ: ${TZ}43 JICOFO_AUTH_PASSWORD: ${JICOFO_AUTH_PASSWORD}44 depends_on: 45 - prosody46 networks: 47 meet.jitsi: 4849 jvb: 50 image: jitsi/jvb:latest51 ports: 52 - "10000:10000/udp"53 - "4443:4443"54 volumes: 55 - jvb_config:/config:Z56 environment: 57 PUBLIC_URL: ${PUBLIC_URL}58 TZ: ${TZ}59 JVB_AUTH_PASSWORD: ${JVB_AUTH_PASSWORD}60 JVB_PORT: 1000061 JVB_STUN_SERVERS: stun.l.google.com:19302,stun1.l.google.com:1930262 depends_on: 63 - prosody64 networks: 65 meet.jitsi: 6667volumes: 68 web_config: 69 web_crontabs: 70 web_transcripts: 71 prosody_config: 72 prosody_plugins: 73 jicofo_config: 74 jvb_config: 7576networks: 77 meet.jitsi: 78 driver: bridge.env Template
.env
1# Public URL2PUBLIC_URL=https://meet.example.com34# Authentication5ENABLE_AUTH=16ENABLE_GUESTS=17AUTH_TYPE=internal89# Component Passwords (generate with: openssl rand -hex 16)10JICOFO_AUTH_PASSWORD=your_jicofo_password11JVB_AUTH_PASSWORD=your_jvb_password1213# Timezone14TZ=UTC1516# Optional Features17ENABLE_TRANSCRIPTIONS=0Usage Notes
- 1Jitsi Meet at https://meet.example.com
- 2Port 10000/UDP required for video
- 3Generate passwords with openssl rand -hex 16
- 4Use Jitsi official docker-compose for production
Individual Services(4 services)
Copy individual services to mix and match with your existing compose files.
web
web:
image: jitsi/web:latest
ports:
- "8080:80"
- "8443:443"
volumes:
- web_config:/config:Z
- web_crontabs:/var/spool/cron/crontabs:Z
- web_transcripts:/usr/share/jitsi-meet/transcripts:Z
environment:
ENABLE_AUTH: ${ENABLE_AUTH}
ENABLE_GUESTS: ${ENABLE_GUESTS}
ENABLE_TRANSCRIPTIONS: ${ENABLE_TRANSCRIPTIONS}
PUBLIC_URL: ${PUBLIC_URL}
TZ: ${TZ}
networks:
meet.jitsi: null
prosody
prosody:
image: jitsi/prosody:latest
volumes:
- prosody_config:/config:Z
- prosody_plugins:/prosody-plugins-custom:Z
environment:
AUTH_TYPE: ${AUTH_TYPE}
ENABLE_AUTH: ${ENABLE_AUTH}
ENABLE_GUESTS: ${ENABLE_GUESTS}
PUBLIC_URL: ${PUBLIC_URL}
TZ: ${TZ}
networks:
meet.jitsi:
aliases:
- xmpp.meet.jitsi
jicofo
jicofo:
image: jitsi/jicofo:latest
volumes:
- jicofo_config:/config:Z
environment:
AUTH_TYPE: ${AUTH_TYPE}
TZ: ${TZ}
JICOFO_AUTH_PASSWORD: ${JICOFO_AUTH_PASSWORD}
depends_on:
- prosody
networks:
meet.jitsi: null
jvb
jvb:
image: jitsi/jvb:latest
ports:
- 10000:10000/udp
- "4443:4443"
volumes:
- jvb_config:/config:Z
environment:
PUBLIC_URL: ${PUBLIC_URL}
TZ: ${TZ}
JVB_AUTH_PASSWORD: ${JVB_AUTH_PASSWORD}
JVB_PORT: 10000
JVB_STUN_SERVERS: stun.l.google.com:19302,stun1.l.google.com:19302
depends_on:
- prosody
networks:
meet.jitsi: null
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 web:5 image: jitsi/web:latest6 ports:7 - "8080:80"8 - "8443:443"9 volumes:10 - web_config:/config:Z11 - web_crontabs:/var/spool/cron/crontabs:Z12 - web_transcripts:/usr/share/jitsi-meet/transcripts:Z13 environment:14 ENABLE_AUTH: ${ENABLE_AUTH}15 ENABLE_GUESTS: ${ENABLE_GUESTS}16 ENABLE_TRANSCRIPTIONS: ${ENABLE_TRANSCRIPTIONS}17 PUBLIC_URL: ${PUBLIC_URL}18 TZ: ${TZ}19 networks:20 meet.jitsi:2122 prosody:23 image: jitsi/prosody:latest24 volumes:25 - prosody_config:/config:Z26 - prosody_plugins:/prosody-plugins-custom:Z27 environment:28 AUTH_TYPE: ${AUTH_TYPE}29 ENABLE_AUTH: ${ENABLE_AUTH}30 ENABLE_GUESTS: ${ENABLE_GUESTS}31 PUBLIC_URL: ${PUBLIC_URL}32 TZ: ${TZ}33 networks:34 meet.jitsi:35 aliases:36 - xmpp.meet.jitsi3738 jicofo:39 image: jitsi/jicofo:latest40 volumes:41 - jicofo_config:/config:Z42 environment:43 AUTH_TYPE: ${AUTH_TYPE}44 TZ: ${TZ}45 JICOFO_AUTH_PASSWORD: ${JICOFO_AUTH_PASSWORD}46 depends_on:47 - prosody48 networks:49 meet.jitsi:5051 jvb:52 image: jitsi/jvb:latest53 ports:54 - "10000:10000/udp"55 - "4443:4443"56 volumes:57 - jvb_config:/config:Z58 environment:59 PUBLIC_URL: ${PUBLIC_URL}60 TZ: ${TZ}61 JVB_AUTH_PASSWORD: ${JVB_AUTH_PASSWORD}62 JVB_PORT: 1000063 JVB_STUN_SERVERS: stun.l.google.com:19302,stun1.l.google.com:1930264 depends_on:65 - prosody66 networks:67 meet.jitsi:6869volumes:70 web_config:71 web_crontabs:72 web_transcripts:73 prosody_config:74 prosody_plugins:75 jicofo_config:76 jvb_config:7778networks:79 meet.jitsi:80 driver: bridge81EOF8283# 2. Create the .env file84cat > .env << 'EOF'85# Public URL86PUBLIC_URL=https://meet.example.com8788# Authentication89ENABLE_AUTH=190ENABLE_GUESTS=191AUTH_TYPE=internal9293# Component Passwords (generate with: openssl rand -hex 16)94JICOFO_AUTH_PASSWORD=your_jicofo_password95JVB_AUTH_PASSWORD=your_jvb_password9697# Timezone98TZ=UTC99100# Optional Features101ENABLE_TRANSCRIPTIONS=0102EOF103104# 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/jitsi-meet-stack/run | bashTroubleshooting
- Participants cannot join meetings or see black screens: Verify JVB_STUN_SERVERS are accessible and port 10000/UDP is properly forwarded through firewalls and NAT
- Authentication failures between Jicofo and Prosody: Ensure JICOFO_AUTH_PASSWORD matches across containers and Prosody has fully initialized before Jicofo starts
- Audio/video quality issues or frequent disconnections: Check JVB memory allocation and increase container resources, verify network stability between JVB and participants
- Web interface loads but meetings fail to start: Confirm PUBLIC_URL matches your actual domain and SSL certificates are valid for the configured hostname
- XMPP connection errors in Prosody logs: Verify prosody container has proper DNS resolution for xmpp.meet.jitsi alias and authentication credentials are correctly configured
- Recording or transcription features not working: Check web_transcripts volume permissions and ensure ENABLE_TRANSCRIPTIONS is set to 1 in environment variables
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-webjicofojvbprosody
Tags
#jitsi#video#conferencing#webrtc#xmpp
Category
Productivity & CollaborationAd Space
Shortcuts: C CopyF FavoriteD Download