LIVEReading: Run Your Own Private Video Calls with Jitsi MeetTotal time: 12 minSteps: 6Worked first time: 65% LIVEReading: Run Your Own Private Video Calls with Jitsi MeetTotal time: 12 minSteps: 6Worked first time: 65%
CBW
Run Your Own Private Video Calls with Jitsi Meet
Mediumgithub.com/jitsi/jitsi-meet2026-06-23

Run Your Own Private Video Calls with Jitsi Meet

Deploy a self-hosted Jitsi Meet video conferencing server using Docker. No coding required — get HD video calls running on your own machine or server in under 30 minutes.

// Build stats

  • Total time12 min
  • Number of steps6
  • DifficultyMedium
  • Worked first time65%
// Before you start

What you need

  • A Linux server or VPS (Ubuntu 22.04 recommended) with at least 2 GB RAM
  • A domain name pointed at your server's IP address (e.g. meet.yourdomain.com)
  • Docker and Docker Compose installed on that server
  • Ports 80, 443, 4443 (TCP) and 10000 (UDP) open in your firewall
  • Basic comfort running commands in a terminal over SSH
01
Step 1 of 6

Download the official Docker setup files

2 min

Jitsi provides a ready-made Docker Compose package called 'docker-jitsi-meet'. This downloads that package and unpacks it into a folder on your server. You are not building anything from source — this is the officially supported quick-start path.

Terminal · mac
$ wget -O jitsi-docker.zip https://github.com/jitsi/docker-jitsi-meet/archive/refs/heads/master.zip && unzip jitsi-docker.zip && mv docker-jitsi-meet-master jitsi && cd jitsi
What you should see
A folder called 'jitsi' containing files like docker-compose.yml, .env.example, and several subdirectories.
This might happen

wget or unzip not found

Run: sudo apt-get install -y wget unzip — then retry the command above.

02
Step 2 of 6

Create your configuration file

2 min

Jitsi reads its settings from a file called '.env'. The package ships an example file. This step copies that example into place and then runs Jitsi's own script to fill in random secret keys automatically. You do not need to invent the secrets yourself.

Terminal · mac
$ cp env.example .env && ./gen-passwords.sh
What you should see
No visible output from gen-passwords.sh is normal. The .env file now contains randomly generated passwords on the lines starting with JICOFO_, JVB_, and JIGASI_.
This might happen

Permission denied when running gen-passwords.sh

Run: chmod +x gen-passwords.sh — then retry.

03
Step 3 of 6

Set your domain name in the config file

3 min

Open the .env file in a text editor and set two values: your domain and a working email address for the automatic HTTPS certificate. The nano editor is the easiest option on most servers. Find the lines shown below, edit them, then save with Ctrl+O and exit with Ctrl+X.

Terminal · mac
$ nano .env
What you should see
The nano editor opens. Find the line that reads: # PUBLIC_URL= and change it to: PUBLIC_URL=https://meet.yourdomain.com Also find: # LETSENCRYPT_EMAIL= and change it to: LETSENCRYPT_EMAIL=you@youremail.com Save and exit.
This might happen

Your domain DNS has not propagated yet so HTTPS certificate generation fails

Wait up to 24 hours for DNS to propagate, or use your registrar's dashboard to confirm the A record points to your server IP before proceeding.

04
Step 4 of 6

Create the local config directories

1 min

Jitsi stores its runtime configuration in a set of folders. This one command creates all of them at once. Without this step the containers will fail to start.

Terminal · mac
$ mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
What you should see
No output means success. The directories now exist under your home folder.
05
Step 5 of 6

Start Jitsi Meet

5-10 min

This command pulls the Jitsi Docker images from the internet and starts all the services: the web frontend, the signalling server, the video bridge, and the HTTPS certificate manager. The first run takes a few minutes because it downloads several hundred megabytes of images.

Terminal · mac
$ docker compose up -d
What you should see
Docker prints lines like 'Pulling web ... done' for each image, then 'Creating jitsi_web_1 ... done' and similar for each container. Running 'docker compose ps' afterwards should show all containers with status 'Up'.
This might happen

docker compose not found (older Docker installs use 'docker-compose' with a hyphen)

Try: docker-compose up -d — or upgrade Docker to a version that includes the Compose plugin.

06
Step 6 of 6

Open your video conference room

1 min

Once the containers are running and the HTTPS certificate has been issued (usually within 60 seconds of first start), your Jitsi instance is live. Open a browser and visit your domain. Click 'Start a meeting', type any room name, and share the link with anyone you want to invite.

Terminal · mac
$ docker compose logs web | grep -i 'certificate\|ready\|listening'
What you should see
Log lines mentioning the certificate being obtained and the server listening. Then visit https://meet.yourdomain.com in your browser — you should see the Jitsi Meet home screen.
This might happen

Browser shows a certificate error or 'site can't be reached'

Wait 2-3 minutes and refresh. If it persists, check that ports 80 and 443 are open: sudo ufw allow 80 && sudo ufw allow 443 — then run: docker compose restart

// Status

cooked. baked. worked.

A working, HTTPS-secured Jitsi Meet video conferencing server at your own domain. Anyone with the link can join a call — no account required for guests.

// the honest bit

The honest part

This guide uses the Docker quick-start, which is great for personal or small-team use. For production deployments serving many users you will need a server with more RAM and CPU, and you should read the full Jitsi handbook at jitsi.github.io/handbook. Recording (Jibri) requires additional setup and a separate machine. The free meet.jit.si service is easier if you just need occasional calls and do not need your own domain or branding.