Jitsi Meet: Self-host free video calling app on your own server

TL;DR for developers: Setting up a preconfigured Jitsi Meet image on a digitalocean VPS in an apex domain.

Requirements before starting this tutorial:

  1. A self owned domain name
  2. A self owned VPS or server access
  3. A self owned basic knowledge of terminal
  4. Open ports in your firewall: TCP 80 (HTTP), 443 (HTTPS) and UDP 10000 (media), plus UDP 3478.

What are we going to do actually?

We are going to install a completely free open source video conferencing software onto your self owned domain name and server.

How can it suit my needs?

  • Anyone can join the meeting without any account
  • No time limit on meeting sessions
  • Full screen sharing available
  • Set passwords to join meeting
  • No limit on number of people

Why should I try?

  • Fastest possible connection for your local users
  • Complete control over your data and database
  • It will only fail when your own server fail
  • You pay for your server. You control your shit.
  • No privacy concerns. No eavesdropping.
  • I’m a Do it yourself. DIY Master

What is Jitsi Meet?

Jitsi Meet is an open-source video conferencing solution you can host yourself. It supports unlimited participants, screen sharing, meeting passwords, and no enforced time limits.

Here are the step-by-step guide to setup a video calling app on your server:

Option 1: Install Jitsi Meet with Docker

Step 1: Install Docker

Ensure Docker Engine and Docker Compose are installed on your server.

Step 2: Download Jitsi Docker setup

Get the latest release of the Jitsi Docker configuration from GitHub. For example:

wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest \
  | grep zip | cut -d\" -f4)
unzip <release>.zip

cd docker-jitsi-meet-*

Step 3: Configure Jitsi

Copy the example environment file and edit it:

cp env.example .env

Open .env in your preferred text editor.

Set PUBLIC_URL to your domain (e.g. https://meet.example.com) and configure other settings as needed.

For example, to enable automatic HTTPS with Let’s Encrypt you can set ENABLE_LETSENCRYPT=1 and provide your email. Then generate strong passwords for the services:

./gen-passwords.sh

This script fills in random secure passwords in your .env. It also backs up your old .env.

Step 4: Run Docker Compose

docker compose up -d

This command launches all Jitsi services (web, Prosody XMPP, Jicofo, JVB, etc.)

Wait a minute for them to start.

Access your server. Open a browser to https://meet.example.com. You should see the Jitsi Meet welcome page where you can create a new meeting

Step (Optional): Add extra features.

  • SIP Gateway (Jigasi): To allow SIP audio calls, run

docker compose -f docker-compose.yml -f jigasi.yml up -d

  • Recording (Jibri): To enable recording/streaming, run

docker compose -f docker-compose.yml -f jibri.yml up -d

  • Etherpad: For collaborative note-taking, include etherpad.yml.

These will deploy the additional containers as documented.

Option 2: Install Jitsi Meet with DigitalOcean

Step 1: Sign up for a DigitalOcean. Set your default project.

  • Create a droplet.
  • Choose an image from Marketplace.
  • Search jitsi server

Step 2: Select image Jitsi Server. Choose a plan suitable to you.

  • Choose a Datacenter region wisely. Select the nearest possible geographical region from your current location.
  • Use SSH authentication recommended. Use strong password if needed.
  • Add multiple droplets to make it more performant.
  • Click the long green button and create droplet. Wait for seconds to boot up.

Step 3: Add a domain from Networking

  • Create A new record.
  • Add your apex domain as HOSTNAME.
  • Select the created droplet in dropdown from WILL DIRECT TO.
  • Create Record. Verify it below in the list among DNS records.

Ensure that your domain is pointed to your droplet's IP address. If you haven't done this yet, update your domain's DNS settings with the IP address of your droplet.

Step 4: Access your VPS via SSH

Once your droplet is created, you need to access it via SSH. Open up your Terminal from your operating system and run the following command:

ssh root@your_droplet_ip_address

Replace your_droplet_ip_address with the actual IP address of your droplet. If you used SSH key authentication during droplet creation, you won't need to enter a password.

Step 5: Running Jitsi Meet Installation Scripts

Inside your droplet, you need to run the Jitsi Meet installation scripts.

Execute the following commands in your terminal:

wget https://github.com/jitsi/docker-jitsi-meet/archive/refs/tags/stable-6173.tar.gz
tar xf stable-6173.tar.gz
cd docker-jitsi-meet-stable-6173
cp env.example .env
nano .env

The nano .env command opens the environment configuration file in the nano text editor. Adjust the configuration options as needed, such as domain names and authentication methods.

Step 6: Running the Docker Compose File

After configuring the environment, run the following commands to start the Jitsi Meet services:

./gen-passwords.sh
docker-compose -f docker-compose.yml -f etherpad.yml up -d

Wait for the services to start. This might take a few minutes.

Step 8: Accessing Jitsi Meet

Once everything is set up, open a web browser and navigate to https://your_domain. You should see the Jitsi Meet interface. Create a new meeting and share the link with others.

Optional: Authentication and Recording

  • By default, anyone who reaches your Jitsi Meet server can create or join conferences.
  • Participants can join by visiting your domain in a browser or the mobile app.

To restrict who can start meetings, enable the secure domain feature (so that only logged-in users can create rooms) as described in the official docs.

Explore the Jitsi Meet documentation for any additional configurations you might need, such as setting up secure domain configuration, enabling authentication, or integrating with external services.

That's it! Your Jitsi Meet instance should now be up and running on your own server

this tutorial is incomplete and fragmented due to lack of motivation. i’ll try asap 🙂