This guide uses Docker Compose to run Jitsi Meet in containers. Jitsi Meet is a fully encrypted, open-source video conferencing platform. The full stack includes multiple services for WebRTC communication.
For Docker installation, see Docker.
Generate secure passwords for the services:
# Create config directory
mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
# Generate passwords
./gen-passwords.sh
Or manually create a .env file:
# Generate random passwords
echo "JICOFO_AUTH_PASSWORD=$(openssl rand -hex 32)" > .env
echo "JVB_AUTH_PASSWORD=$(openssl rand -hex 32)" >> .env
echo "JIGASI_XMPP_PASSWORD=$(openssl rand -hex 32)" >> .env
echo "JIBRI_RECORDER_PASSWORD=$(openssl rand -hex 32)" >> .env
echo "JIBRI_XMPP_PASSWORD=$(openssl rand -hex 32)" >> .env
Create a docker-compose.yml file with the following content:
version: '3.8'
services:
web:
image: jitsi/web:latest
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ${CONFIG}/web:/config
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts
environment:
- ENABLE_LETSENCRYPT=0
- ENABLE_HTTP_REDIRECT=0
- DISABLE_HTTPS=0
- PUBLIC_URL=https://meet.example.com
- JICOFO_AUTH_PASSWORD=${JICOFO_AUTH_PASSWORD}
- JVB_AUTH_PASSWORD=${JVB_AUTH_PASSWORD}
depends_on:
- jicofo
- prosody
prosody:
image: jitsi/prosody:latest
restart: unless-stopped
volumes:
- ${CONFIG}/prosody/config:/config
- ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom
environment:
- JICOFO_AUTH_PASSWORD=${JICOFO_AUTH_PASSWORD}
- JVB_AUTH_PASSWORD=${JVB_AUTH_PASSWORD}
- JIGASI_XMPP_PASSWORD=${JIGASI_XMPP_PASSWORD}
- JIBRI_XMPP_PASSWORD=${JIBRI_XMPP_PASSWORD}
jicofo:
image: jitsi/jicofo:latest
restart: unless-stopped
volumes:
- ${CONFIG}/jicofo:/config
environment:
- JICOFO_AUTH_PASSWORD=${JICOFO_AUTH_PASSWORD}
- JICOFO_COMPONENT_SECRET=${JICOFO_COMPONENT_SECRET}
- XMPP_SERVER=prosody
depends_on:
- prosody
jvb:
image: jitsi/jvb:latest
restart: unless-stopped
ports:
- "10000:10000/udp"
volumes:
- ${CONFIG}/jvb:/config
environment:
- JVB_AUTH_PASSWORD=${JVB_AUTH_PASSWORD}
- JVB_STUN_SERVERS=stun.l.google.com:19302
- JVB_ADVERTISE_IPS=YOUR_SERVER_IP
depends_on:
- prosody
Security Note: Replace the following before deployment:
YOUR_SERVER_IP with your server’s public IP addressmeet.example.com with your domaindocker compose up -d
Wait for all containers to start (approximately 2-3 minutes for first run).
Open https://YOUR-SERVER to access Jitsi Meet.
Create a room by entering a room name, and share the URL with participants.
For production deployments:
For automatic SSL certificates:
environment:
- ENABLE_LETSENCRYPT=1
- LETSENCRYPT_DOMAIN=meet.example.com
- LETSENCRYPT_EMAIL=admin@example.com
- ENABLE_HTTP_REDIRECT=1
For better connectivity, add coturn:
services:
coturn:
image: coturn/coturn:latest
ports:
- "3478:3478"
- "3478:3478/udp"
- "5349:5349"
- "5349:5349/udp"
environment:
- TURN_SERVER_REALM=meet.example.com
- TURN_SERVER_USERNAME=turn-user
- TURN_SERVER_PASSWORD=turn-password
See Configuration and Security for production hardening.
Any questions?
Feel free to contact us. Find all contact information on our contact page.