Back to Apps
Jitsi

Deploy Jitsi on Your Own Server

Free open-source video conferencing for web & mobile

🛠️ Developer Tools

Want to deploy Jitsi on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.

Get Started

What is Jitsi?

This one click app is based on Jitsi docker image.

Learn more

Self-Host Jitsi

Follow these steps to deploy on your own server.

1

Install Docker

Skip this step if Docker is already installed on your server.

curl -fsSL https://get.docker.com | sh
2

Configure

Customize the settings below. Defaults work for most cases.

3

Deploy

Copy the configuration and run it on your server.

services:
  jitsi-jicofo:
    image: jitsi/jicofo:4416
    environment:
      HTTPS_PORT: "8443"
      HTTP_PORT: "8000"
      JIBRI_BREWERY_MUC: jibribrewery
      JIBRI_FINALIZE_RECORDING_SCRIPT_PATH: /config/finalize.sh
      JIBRI_LOGS_DIR: /config/logs
      JIBRI_PENDING_TIMEOUT: "90"
      JIBRI_RECORDER_PASSWORD: pass
      JIBRI_RECORDER_USER: recorder
      JIBRI_RECORDING_DIR: /config/recordings
      JIBRI_STRIP_DOMAIN_JID: muc
      JIBRI_XMPP_PASSWORD: pass
      JIBRI_XMPP_USER: jibri
      JICOFO_AUTH_PASSWORD: pass
      JICOFO_AUTH_USER: focus
      JICOFO_COMPONENT_SECRET: pass
      JIGASI_BREWERY_MUC: jigasibrewery
      JIGASI_PORT_MAX: "20050"
      JIGASI_PORT_MIN: "20000"
      JIGASI_XMPP_PASSWORD: pass
      JIGASI_XMPP_USER: jigasi
      JVB_AUTH_PASSWORD: pass
      JVB_AUTH_USER: jvb
      JVB_BREWERY_MUC: jvbbrewery
      JVB_PORT: "10000"
      JVB_STUN_SERVERS: meet-jit-si-turnrelay.jitsi.net:443
      JVB_TCP_HARVESTER_DISABLED: "true"
      JVB_TCP_PORT: "4443"
      TZ: Europe/Amsterdam
      XMPP_AUTH_DOMAIN: auth.meet.jitsi
      XMPP_BOSH_URL_BASE: http://jitsi-prosody:5280
      XMPP_DOMAIN: meet.jitsi
      XMPP_GUEST_DOMAIN: guest.meet.jitsi
      XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.jitsi
      XMPP_INTERNAL_MUC_MODULES: ""
      XMPP_MODULES: ""
      XMPP_MUC_DOMAIN: muc.meet.jitsi
      XMPP_MUC_MODULES: ""
      XMPP_RECORDER_DOMAIN: recorder.meet.jitsi
      XMPP_SERVER: jitsi-prosody
    volumes:
      - jitsi-jicofo:/config
    depends_on:
      - jitsi-prosody
  jitsi-jvb:
    image: jitsi/jvb:4416
    environment:
      HTTPS_PORT: "8443"
      HTTP_PORT: "8000"
      JIBRI_BREWERY_MUC: jibribrewery
      JIBRI_FINALIZE_RECORDING_SCRIPT_PATH: /config/finalize.sh
      JIBRI_LOGS_DIR: /config/logs
      JIBRI_PENDING_TIMEOUT: "90"
      JIBRI_RECORDER_PASSWORD: pass
      JIBRI_RECORDER_USER: recorder
      JIBRI_RECORDING_DIR: /config/recordings
      JIBRI_STRIP_DOMAIN_JID: muc
      JIBRI_XMPP_PASSWORD: pass
      JIBRI_XMPP_USER: jibri
      JICOFO_AUTH_PASSWORD: pass
      JICOFO_AUTH_USER: focus
      JICOFO_COMPONENT_SECRET: pass
      JIGASI_BREWERY_MUC: jigasibrewery
      JIGASI_PORT_MAX: "20050"
      JIGASI_PORT_MIN: "20000"
      JIGASI_XMPP_PASSWORD: pass
      JIGASI_XMPP_USER: jigasi
      JVB_AUTH_PASSWORD: pass
      JVB_AUTH_USER: jvb
      JVB_BREWERY_MUC: jvbbrewery
      JVB_PORT: "10000"
      JVB_STUN_SERVERS: meet-jit-si-turnrelay.jitsi.net:443
      JVB_TCP_HARVESTER_DISABLED: "true"
      JVB_TCP_PORT: "4443"
      TZ: Europe/Amsterdam
      XMPP_AUTH_DOMAIN: auth.meet.jitsi
      XMPP_BOSH_URL_BASE: http://jitsi-prosody:5280
      XMPP_DOMAIN: meet.jitsi
      XMPP_GUEST_DOMAIN: guest.meet.jitsi
      XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.jitsi
      XMPP_INTERNAL_MUC_MODULES: ""
      XMPP_MODULES: ""
      XMPP_MUC_DOMAIN: muc.meet.jitsi
      XMPP_MUC_MODULES: ""
      XMPP_RECORDER_DOMAIN: recorder.meet.jitsi
      XMPP_SERVER: jitsi-prosody
    volumes:
      - jitsi-jvb:/config
    ports:
      - $$cap_jvb_udp:$$cap_jvb_udp
      - $$cap_jvb_tcp:$$cap_jvb_tcp
    depends_on:
      - jitsi-prosody
  jitsi-prosody:
    image: jitsi/prosody:4416
    environment:
      HTTPS_PORT: "8443"
      HTTP_PORT: "8000"
      JIBRI_BREWERY_MUC: jibribrewery
      JIBRI_FINALIZE_RECORDING_SCRIPT_PATH: /config/finalize.sh
      JIBRI_LOGS_DIR: /config/logs
      JIBRI_PENDING_TIMEOUT: "90"
      JIBRI_RECORDER_PASSWORD: pass
      JIBRI_RECORDER_USER: recorder
      JIBRI_RECORDING_DIR: /config/recordings
      JIBRI_STRIP_DOMAIN_JID: muc
      JIBRI_XMPP_PASSWORD: pass
      JIBRI_XMPP_USER: jibri
      JICOFO_AUTH_PASSWORD: pass
      JICOFO_AUTH_USER: focus
      JICOFO_COMPONENT_SECRET: pass
      JIGASI_BREWERY_MUC: jigasibrewery
      JIGASI_PORT_MAX: "20050"
      JIGASI_PORT_MIN: "20000"
      JIGASI_XMPP_PASSWORD: pass
      JIGASI_XMPP_USER: jigasi
      JVB_AUTH_PASSWORD: pass
      JVB_AUTH_USER: jvb
      JVB_BREWERY_MUC: jvbbrewery
      JVB_PORT: "10000"
      JVB_STUN_SERVERS: meet-jit-si-turnrelay.jitsi.net:443
      JVB_TCP_HARVESTER_DISABLED: "true"
      JVB_TCP_PORT: "4443"
      TZ: Europe/Amsterdam
      XMPP_AUTH_DOMAIN: auth.meet.jitsi
      XMPP_BOSH_URL_BASE: http://jitsi-prosody:5280
      XMPP_DOMAIN: meet.jitsi
      XMPP_GUEST_DOMAIN: guest.meet.jitsi
      XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.jitsi
      XMPP_INTERNAL_MUC_MODULES: ""
      XMPP_MODULES: ""
      XMPP_MUC_DOMAIN: muc.meet.jitsi
      XMPP_MUC_MODULES: ""
      XMPP_RECORDER_DOMAIN: recorder.meet.jitsi
      XMPP_SERVER: jitsi-prosody
    volumes:
      - jitsi-prosody:/config
  jitsi-web:
    image: jitsi/web:4416
    environment:
      HTTPS_PORT: "8443"
      HTTP_PORT: "8000"
      JIBRI_BREWERY_MUC: jibribrewery
      JIBRI_FINALIZE_RECORDING_SCRIPT_PATH: /config/finalize.sh
      JIBRI_LOGS_DIR: /config/logs
      JIBRI_PENDING_TIMEOUT: "90"
      JIBRI_RECORDER_PASSWORD: pass
      JIBRI_RECORDER_USER: recorder
      JIBRI_RECORDING_DIR: /config/recordings
      JIBRI_STRIP_DOMAIN_JID: muc
      JIBRI_XMPP_PASSWORD: pass
      JIBRI_XMPP_USER: jibri
      JICOFO_AUTH_PASSWORD: pass
      JICOFO_AUTH_USER: focus
      JICOFO_COMPONENT_SECRET: pass
      JIGASI_BREWERY_MUC: jigasibrewery
      JIGASI_PORT_MAX: "20050"
      JIGASI_PORT_MIN: "20000"
      JIGASI_XMPP_PASSWORD: pass
      JIGASI_XMPP_USER: jigasi
      JVB_AUTH_PASSWORD: pass
      JVB_AUTH_USER: jvb
      JVB_BREWERY_MUC: jvbbrewery
      JVB_PORT: "10000"
      JVB_STUN_SERVERS: meet-jit-si-turnrelay.jitsi.net:443
      JVB_TCP_HARVESTER_DISABLED: "true"
      JVB_TCP_PORT: "4443"
      TZ: Europe/Amsterdam
      XMPP_AUTH_DOMAIN: auth.meet.jitsi
      XMPP_BOSH_URL_BASE: http://jitsi-prosody:5280
      XMPP_DOMAIN: meet.jitsi
      XMPP_GUEST_DOMAIN: guest.meet.jitsi
      XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.jitsi
      XMPP_INTERNAL_MUC_MODULES: ""
      XMPP_MODULES: ""
      XMPP_MUC_DOMAIN: muc.meet.jitsi
      XMPP_MUC_MODULES: ""
      XMPP_RECORDER_DOMAIN: recorder.meet.jitsi
      XMPP_SERVER: jitsi-prosody
    volumes:
      - jitsi-web:/config
      - jitsi-web-transcripts:/usr/share/jitsi-meet/transcripts
    ports:
      - $$cap_https_port:443
      - $$cap_http_port:80
volumes:
  jitsi-jicofo: {}
  jitsi-jvb: {}
  jitsi-prosody: {}
  jitsi-web: {}
  jitsi-web-transcripts: {}

Then run:

docker compose up -d
4

Access

Once started, access your app at http://localhost:80

Why Self-Host Jitsi?

Full Data Ownership

Your data stays on your servers. No third-party access.

No Monthly Fees

Pay only for your server. No per-seat or usage charges.

Complete Control

Customize, backup, and scale on your own terms.

Privacy & Compliance

Meet GDPR, HIPAA, or internal security requirements.

Technical Details

Docker Image

jitsi/jicofo:${tag_version}

Official Docs

github.com

Want to go faster?

Try Senate! Senate handles Docker, HTTPS, updates, and monitoring for you. Deploy any of our 300+ apps with a single command.

Install on any Linux server:

sh -c "$(curl -sSL https://get.senate.sh)"