Why this Configuration?
- True Data Sovereignty: 100% GDPR-compliant on-premises deployment. You own your configuration and data without vendor lock-in.
- Hardware Agnostic: Optimized and verified across low-power ARM64 SBCs (Raspberry Pi 5) and x86_64 hypervisors (Proxmox VE LXC & VM).
- Engine Freedom: Tested and supported under standard Docker Engine and unprivileged rootless Podman.
- Platform Verification: Tested on Proxmox LXC: docker (3.3.3, 2026-09-14), podman (3.3.3, 2026-09-14); Proxmox VM: docker (3.3.3, 2026-09-14), podman (3.3.3, 2026-09-14).
Quick Start (Standalone Docker Compose)
The snippet below is immediately ready to run in any standard Docker or Podman environment:
services:
prosody:
container_name: njorddeploy-jitsi-prosody
image: jitsi/prosody:stable
hostname: xmpp.meet.jitsi
networks:
- njorddeploy_net
volumes:
- "data_root/jitsi/prosody/config:/config"
- "data_root/jitsi/prosody/plugins:/prosody-plugins-custom"
environment:
- XMPP_SERVER=prosody
- XMPP_DOMAIN=meet.jitsi
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- JICOFO_AUTH_USER=jicofo
- JICOFO_AUTH_PASSWORD=changeme
- JVB_AUTH_USER=jvb
- JVB_AUTH_PASSWORD=changeme
- JICOFO_COMPONENT_SECRET=changeme
- PUBLIC_URL=https://meet.example.com
- JVB_PORT=10000
- ENABLE_XMPP_WEBSOCKET=${ENABLE_XMPP_WEBSOCKET}
- ENABLE_AUTH=1
- ENABLE_GUEST=1
- ENABLE_GUESTS=1
- ENABLE_GUEST_IS_GUEST=1
- AUTH_TYPE=internal
jicofo:
container_name: njorddeploy-jitsi-jicofo
image: jitsi/jicofo:stable
networks:
- njorddeploy_net
volumes:
- "data_root/jitsi/jicofo:/config"
environment:
- XMPP_SERVER=prosody
- XMPP_DOMAIN=meet.jitsi
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- JICOFO_AUTH_USER=jicofo
- JICOFO_AUTH_PASSWORD=changeme
- JVB_AUTH_USER=jvb
- JVB_AUTH_PASSWORD=changeme
- JICOFO_COMPONENT_SECRET=changeme
- PUBLIC_URL=https://meet.example.com
- JVB_PORT=10000
- ENABLE_AUTH=1
- ENABLE_GUEST=1
- ENABLE_GUESTS=1
- ENABLE_GUEST_IS_GUEST=1
jvb:
container_name: njorddeploy-jitsi-jvb
image: jitsi/jvb:stable
networks:
- njorddeploy_net
ports:
- "10000:10000/udp"
- "3030:3030/tcp"
volumes:
- "data_root/jitsi/jvb:/config"
environment:
- XMPP_SERVER=prosody
- XMPP_DOMAIN=meet.jitsi
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- JICOFO_AUTH_USER=jicofo
- JICOFO_AUTH_PASSWORD=changeme
- JVB_AUTH_USER=jvb
- JVB_AUTH_PASSWORD=changeme
- JICOFO_COMPONENT_SECRET=changeme
- PUBLIC_URL=https://meet.example.com
- JVB_PORT=10000
- DOCKER_HOST_ADDRESS=${DOCKER_HOST_ADDRESS}
- ENABLE_COLIBRI_WEBSOCKET=${ENABLE_COLIBRI_WEBSOCKET}
web:
container_name: njorddeploy-jitsi-web
image: jitsi/web:stable
networks:
- njorddeploy_net
ports:
- "8001:80"
- "8443:443"
volumes:
- "data_root/jitsi/web:/config"
environment:
- XMPP_SERVER=prosody
- XMPP_DOMAIN=meet.jitsi
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- JICOFO_AUTH_USER=jicofo
- JICOFO_AUTH_PASSWORD=changeme
- JVB_AUTH_USER=jvb
- JVB_AUTH_PASSWORD=changeme
- JICOFO_COMPONENT_SECRET=changeme
- PUBLIC_URL=https://meet.example.com
- JVB_PORT=10000
- ENABLE_AUTH=1
- ENABLE_GUEST=1
- ENABLE_GUESTS=1
- ENABLE_GUEST_IS_GUEST=1
- AUTH_TYPE=internal
- ENABLE_XMPP_WEBSOCKET=${ENABLE_XMPP_WEBSOCKET}
- ETHERPAD_PUBLIC_URL=https://meet.example.com/etherpad
etherpad:
container_name: njorddeploy-jitsi-etherpad
image: etherpad/etherpad:latest
networks:
- njorddeploy_net
volumes:
- "data_root/jitsi/etherpad:/opt/etherpad-lite/var"
jibri:
container_name: njorddeploy-jitsi-jibri
image: jitsi/jibri:stable
networks:
- njorddeploy_net
volumes:
- "data_root/jitsi/jibri:/config"
environment:
- XMPP_SERVER=prosody
- XMPP_DOMAIN=meet.jitsi
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- JICOFO_AUTH_USER=jicofo
- JICOFO_AUTH_PASSWORD=changeme
- JVB_AUTH_USER=jvb
- JVB_AUTH_PASSWORD=changeme
- JICOFO_COMPONENT_SECRET=changeme
- PUBLIC_URL=https://meet.example.com
- JVB_PORT=10000
networks:
njorddeploy_net:
Start the service directly via the command line: docker compose up -d
Configuration & Environment Variables
Key configuration parameters and defaults derived from the NjordDeploy component template:
| Variable | Default Value | Description |
|---|---|---|
JITSI_PUBLIC_URL |
https://meet.example.com |
The public domain or IP address where Jitsi Meet will be accessible. |
JITSI_HTTP_PORT |
8001 |
Host port for HTTP traffic. |
JITSI_HTTPS_PORT |
8443 |
Host port for HTTPS traffic. |
JITSI_JVB_PORT |
10000 |
The UDP port for media streaming routing (essential for audio/video connectivity). |
JICOFO_AUTH_PASSWORD |
changeme |
Secure password for internal signaling. |
JVB_AUTH_PASSWORD |
changeme |
Secure password for internal media bridge authentication. |
JICOFO_COMPONENT_SECRET |
changeme |
Secure component secret for XMPP server authentication. |
JITSI_ENABLE_AUTH |
true |
If enabled, only registered users can create rooms. Guests can join without credentials. |
JITSI_ENABLE_ETHERPAD |
true |
Enables collaborative real-time document editing during meetings. |
JITSI_ENABLE_RECORDING |
true |
Enables call recording and streaming via Jibri. Increases CPU/RAM load. |
JITSI_MEET_USER |
jitsimeet |
The username for the Jitsi Meet moderator account (required to create meetings). |
JITSI_MEET_PASSWORD |
jitsimeetpw |
The password for the Jitsi Meet moderator account. |
Ecosystem & Enterprise Integration
- Reverse Proxy Ingress Ready: Pre-configured for Caddy, Traefik, or Nginx Proxy Manager with automatic Let's Encrypt TLS certificates.
- Zero-Trust Mesh VPN: Seamless integration with WireGuard or Tailscale/Headscale mesh networks for secure remote administration.
- Transactional State Backups: Ready for point-in-time database dumps and container-safe persistent volume freezing.
Effortless Management with NjordDeploy
Deploy, monitor, and update this service with a single click on your own hardware via the NjordDeploy Configurator.