Jitsi Meet – own video conference server with Docker

Version: 25.09.16

Video conferences are part of everyday life—whether working from home, in online courses, or chatting privately. With Jitsi Meet, you can run a completely self-hosted video conferencing platform—independent of external services and with full control over data and features. 🛡️

A self-hosted Jitsi server is suitable for, e.g.:

📚 Training and online courses

👥 Team meetings in a company

🔒 Secure, private conversations without third-party providers

To get started successfully, you should bring a few basics and prerequisites:

🐧 Linux basics (server administration, SSH, installing packages)

🐳 Experience working with Docker and Docker Compose (already installed)

🌐 Basic knowledge of networks and domains (DNS, ports, SSL certificates)

⚠️ !! your own TURN / Coturn server so you can accept connections from outside! Basic prerequisite—see point 1 !! 🔥🔥

In this tutorial, I’ll show you step by step how to set up your own Jitsi Meet server—from the prerequisites all the way to a working video conferencing platform.

For this, we’ll draw on several elements taken from the official Jitsi Meet configuration page:

https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker

1. Turn / Coturn Server

🔥 Jitsi Meet requires a working TURN / Coturn server so that external connections via WebRTC can be accepted. ‼️ Port forwarding for Coturn (UDP port 3478, 40000–41000 and TCP 3478, and additionally 5349 for TLS) must be enabled in the firewall / VPS.

Coturn is installed on the Linux server as follows:

Afterwards, activate the corresponding service:

Then run: nano /etc/turnserver.conf

Assign permissions for the database (userdb):

After that, start the service:

Now we still need to create the users in Coturn—especially one user that Jitsi Meet will later use in the .env config file.

With this, you can display the Coturn users stored in the database:

Such messages in the terminal can be ignored (everything is running smoothly):

You can test your own TURN server with the following command:

If something like this is displayed, everything worked correctly:

Done! Don’t forget to open the corresponding ports mentioned above in the UFW firewall or VPS firewall!

2. Installation of Jitsi Meet:

To do this, log in to your server (Linux Ubuntu / VPS), create a new folder called “jitsi” in your project directory, and then navigate into it.

Inside the jitsi folder, run the following command:

Then, in that folder, we use ls to check the name of the file we downloaded and run the following command:

3. Configuration:

After that:

With the cp env command to .env, we copy the sample configuration file from Jitsi Meet into our own .env file, where we will later add our configuration.

Now we still need to generate strong passwords for the .env file, which will then be entered directly there. Simply run the following command inside the “jitsi” folder:

Now we create the remaining configuration files:

After all config files have been created, we start the Docker project briefly and then shut it down again:

Now let’s take a closer look at the .env configuration file and add the corresponding entries:

The following content (adjusted to your setup!) should be in the .env file to make everything work:

We now need to assign the corresponding users, since we configured Jitsi Meet so that not just anyone who knows the URL can start a video conference.

The Docker project is started with:

Now we switch into the “prosody” Jitsi container.

After that, we can create users (conference hosts) with the following command:

Note: Conference hosts can later be, for example, company accounts that can be issued for a fee.

To delete a user again, use the following command:

And to display all users:

We then exit the “prosody” container with:

4. Port forwarding and NPM:

‼️ Jitsi Meet urgently requires UDP port 10000 to be opened! ‼️ (also allow it in the firewall)

Before moving on to NPM, you must first create a corresponding subdomain for your video conferencing server with your provider (DNS record pointing to the server’s IP address):

meeting.yourdomain.com

In NPM (Nginx Proxy Manager), create a new domain (Proxy Host), for example: meeting.yourdomain.com

Intern, we point this to HTTP port 8000, and NPM takes care of the SSL certificate and external encryption. With a click on “Save”, everything is stored, and the configuration of our own Jitsi Meet server for external access is complete.

5. Optional: your own “Branding”

Now we want to apply custom branding, so that on the start page of our meeting.yourdomain.com URL it no longer says “Jitsi Meet” but, for example, “IT-Service-Commander”:

For this, the relevant language file needs to be patched. You can do this inside the Docker Compose container:

Install the Nano editor, since the container does not have it by default:

Edit the file:

Search for the following section and modify it:

Save the file and restart the container:

If you want to make the change permanent, you need to proceed as follows (better approach):

In the “jitsi” folder (Docker project folder), create the following file:

The following content:

On the host, create the directory structure:

Extract the language file from the container:

And then edit the file on the host (as mentioned above, change the passage with Jitsi Meet accordingly):

Finally, restart everything once more:

Done — the Jitsi Meet branding should now be replaced with your own custom branding.

6. Completion

✅ We’re done and have set up the following:

🔗 Coturn / TURN server to ensure accessibility (not just internal but also external connections)

🖥️ Jitsi Meet server

🌐 TCP and UDP ports opened in the firewall

🏷️ Access via a subdomain for our Jitsi Meet server

🔒 SSL certificates assigned in NPM Manager

🎨 Optional: custom branding applied

✨ Finished – a fully operational Jitsi Meet server!


bc1q8dxp9mlt3mkvaklu2vn8j6jteqyv53kschc90vLightning: itsc@strike.mehttps://paypal.me/TomC777