Loading...

๐Ÿš€ Setting Up Jitsi Meet on Ubuntu: Avoid My Mistakes & Save Hours!

4 min read

๐Ÿ› ๏ธ Step 1: Add the Official Jitsi Repository & GPG Key

Before anything else, run this to get the required tools and add Jitsi's key:

~  sudo apt update && sudo apt install -y gnupg2 curl apt-transport-https

~  curl https://download.jitsi.org/jitsi-key.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/jitsi-keyring.gpg

~  echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | \
sudo tee /etc/apt/sources.list.d/jitsi-stable.list

~  sudo apt update

โœ… This prepares your system to fetch Jitsi Meet from its official source.
 


๐Ÿ“ฆ Step 2: Install Jitsi Meet

Now, install Jitsi Meet:

~  sudo apt install jitsi-meet

Here’s where I messed up (and you shouldn’t):

๐Ÿ”ด I hadn’t set up a domain before running this command. So when the installer asked for my domain name, I panicked and aborted the process mid-way.

This resulted in a half-baked installation, where most critical files were missing — causing a chain of issues later. I tried cleaning everything up and starting fresh, but in the process, I accidentally wiped my entire Nginx config and broke the server. ๐Ÿ˜“

So here’s the golden rule:
     ๐Ÿ“ Make sure you have your domain/subdomain ready before installing Jitsi Meet

 

โš ๏ธ Important Dialog Boxes to Handle Carefully

During installation, you’ll face two important prompts:

1๏ธโƒฃ Configuration File Prompt

You’ll see something like:

    “Keep the local version currently installed?”

๐Ÿ‘‰ Choose: Keep the local version currently installed
(Use arrow keys and press Enter)

This is essential to preserve default configs Jitsi needs to run properly.

 

2๏ธโƒฃ Domain/Hostname Input

This prompt asks:

     “Enter the domain name for your Jitsi Meet instance”

โœ… If you already have a domain/subdomain, try to enter it here if you can.
โš ๏ธ If not, just press OK — we can change or configure it later.

Now, why am I saying "try to enter it if you can"?

Because after aborting once, when I re-ran the installer later, this domain prompt never showed up again — and I couldn't find a clean way to bring it back. So if it works for you the first time, great. If not, don’t worry — domain configs can be edited manually later.

 

โœ… What Happens If It Installs Correctly?

Once everything is configured properly and domain is set, you’ll be able to access Jitsi on (After getting SSL for your domains):

(We will also learn ahead about how to get SSL for domains.)

But if you see blank pages or errors, chances are something broke during install. That’s why following each step precisely is so important.

 

๐Ÿ› Real Error I Faced — And What It Means

๐Ÿ› Error 1:

While installing, I encountered this error:

What is this about?

This error is related to UEFI boot configurations, specifically for Secure Boot setups.

But here's the twist — my system was running in legacy BIOS mode, not UEFI. So it couldn’t find the EFI directory, and the install script failed.

โŒ Will this affect Jitsi?

Not at all.
This error affects only your boot process, not web services.

Jitsi Meet runs on top of Nginx, Prosody, Jicofo, etc. As long as your system is up and running, this bootloader-related error has no impact on your Jitsi server.

 

๐Ÿ› Error 2:

๐Ÿ” Reinstalling Jitsi Meet: Lessons from My Second Attempt

After the first crash, I decided to start from scratch — I wiped everything clean and went for a full reinstallation.

But this time, I encountered new questions and warnings that you might see too. So here’s what to expect — and what to answer when the terminal asks you things like:

๐Ÿงจ “File exists. Overwrite?” Prompt

While adding the Jitsi GPG key again:

I saw this:

๐Ÿ‘‰ What to do?
Since I was reinstalling and needed a fresh start, I safely typed y and hit Enter.

โœ… It only overwrites the Jitsi keyring file — nothing dangerous.

 

๐Ÿงพ “Do You Want to Continue?” Prompt While Installing Jitsi

When you run:

You’ll likely see something like:

๐ŸŸข Go ahead and type Y — this is standard. It’s only installing necessary Jitsi components like:

  • jitsi-meet

  • jitsi-videobridge2

  • jitsi-meet-web

  • and others

These packages don’t interfere with anything outside of Jitsi.

 

Note 1:
๐Ÿ” How to Check (and Change) the Jitsi Hostname

Sometimes you may want to verify what domain or subdomain Jitsi is configured for. Use this:

~  sudo grep -Ri 'VirtualHost' /etc/prosody/conf.avail/

You’ll see something like:

๐Ÿ”„ Replace localhost with your actual domain!

I changed mine to:

โœ… After making changes, restart all related services to apply updates:

~  sudo systemctl restart prosody
~  sudo systemctl restart jicofo
~  sudo systemctl restart jitsi-videobridge2
~  sudo systemctl restart nginx

 

Note 2 With ๐Ÿ› Error 3:
Why Restart Nginx If You Didn't Create It?

Good question!

Even if you never manually touched Nginx, Jitsi automatically configures Nginx during installation to serve its frontend.

โŒ But in my case, because I aborted midway, the Nginx config never got created — and I ended up with a:

Let’s fix that manually...

๐Ÿงฑ Recreate Nginx Config (If Missing)
Step 1: Check if the config exists

~  ls -l /etc/nginx/sites-available/

Look for something like:

Then check if it’s enabled:

~  ls -l /etc/nginx/sites-enabled/

Step 2: If not, create it manually:
~  sudo nano /etc/nginx/sites-available/jitsi.biz499.com

Paste this minimal config:

server {
server_name jitsi.biz499.com www.jitsi.biz499.com;
 
root /usr/share/jitsi-meet;
index index.html;
 
location / {
   try_files $uri $uri/ =404;
  }
}

Then:
~  sudo ln -s /etc/nginx/sites-available/jitsi.biz499.com /etc/nginx/sites-enabled/
~  sudo systemctl restart nginx


 
 

๐Ÿ› Error 4:
๐Ÿ’ฅ Fixing the “500 Internal Server Error”

At one point, my browser showed a 500 error. This usually means a broken Nginx config or file permission issue.

My earlier Nginx config had this mistake:

๐Ÿ‘Ž This was unnecessary and broke the rewrite logic.

โœ… Fixed version:

server {
server_name jitsi.biz499.com www.jitsi.biz499.com;
 
root /usr/share/jitsi-meet;
index index.html;
 
location / {
   try_files $uri $uri/ =404;
  }
}


Problem solved. โœ…
 
 

๐Ÿ› Error 5:
๐Ÿ–ฅ๏ธ Fixing the Blank Black Screen on Browser

If your site loads to a black blank screen:

It means:

UI files loaded โœ…

Backend services are NOT working โŒ

Step 1: Check Browser Console (F12 → Console Tab)

Look for:

  • WebSocket connection failed

  • CONFERENCE FAILED

  • BOSH connection failed

  • Failed to load resource

 
Step 2: Check Jitsi Services:

~  sudo systemctl status prosody
~  sudo systemctl status jicofo
~  sudo systemctl status jitsi-videobridge2

If any are inactive, restart them:

~  sudo systemctl restart prosody
~  sudo systemctl restart jicofo
~  sudo systemctl restart jitsi-videobridge2

Step 3: Check Nginx Logs
~  sudo tail -n 50 /var/log/nginx/error.log


This helps identify broken links or script loading issues.
 
๐Ÿงพ Bonus: My Config File Was Missing

After all troubleshooting, I realized the config file itself was missing:

~  /etc/jitsi/meet/jitsi.biz499.com-config.js 


๐Ÿ› ๏ธ I recreated it manually using a standard template, and that finally got things working.
 

Paste the following configuration:

var config = {
   hosts: {
      domain: 'jitsi.biz499.com',
      muc: 'conference.jitsi.biz499.com', // must match muc_mapper_domain_base
 },
  serviceUrl: 'wss://jitsi.biz499.com/xmpp-websocket',
  clientNode: 'http://jitsi.org/jitsimeet',
 
  p2p: {
      enabled: true,
      preferH264: true,
      stunServers: [
         { urls: 'stun:stun.l.google.com:19302' }
    ]
    },
 
   useStunTurn: true,
    enableWelcomePage: true,
    defaultLanguage: 'en',
 
   resolution: 720,
     constraints: {
        video: {
           height: {
                 ideal: 720,
                 max: 720,
                 min: 240
           }
       }
  },
       // disableSimulcast: true,
};
 
 
 ๐Ÿ’พ Save and exit (Ctrl+O, Enter, then Ctrl+X)

๐Ÿ”„ Restart All Services
~  sudo systemctl restart nginx prosody jicofo jitsi-videobridge2

 

 

๐Ÿ› Error 6:
๐Ÿงฑ Step-by-Step Debug for the Black Screen

Still getting a blank screen? That means your frontend loaded but it’s unable to communicate with backend services. Let’s debug this step-by-step:

โœ… Check and Fix Prosody Config

Check if this file exists:

~  sudo nano /etc/prosody/conf.avail/jitsi.biz499.com.cfg.lua
 
 
You should see something like:
 

๐Ÿ“ Create Prosody Config Manually (If Missing)
~  sudo nano /etc/prosody/conf.avail/jitsi.biz499.com.cfg.lua

Before creating this file, get SSL for your domain as in this file it will ask for SSL Key and certificate.
Set Up SSL for Your Domain

Since I hadn’t done SSL before, I ran:

~  sudo certbot --nginx -d jitsi.biz499.com www.jitsi.biz499.com

๐Ÿ“Œ This will:

  • Generate a free SSL certificate (Let’s Encrypt)

  • Automatically update your Nginx config

  • Reload Nginx with HTTPS support

โœ… After success, it shows:

Now paste the following in Prosody Config (sudo nano /etc/prosody/conf.avail/jitsi.biz499.com.cfg.lua):

VirtualHost "jitsi.biz499.com"
    authentication = "anonymous"
    ssl = {
        key = "/etc/prosody/certs/jitsi.biz499.com.key";
        certificate = "/etc/prosody/certs/jitsi.biz499.com.crt";
    }
    modules_enabled = {
        "bosh";
        "pubsub";
        "ping";
        "speakerstats";
        "turncredentials";
        "conference_duration";
    }


Component "conference.jitsi.biz499.com" "muc"
    storage = "memory"
    muc_room_cache_size = 1000


Component "internal.auth.jitsi.biz499.com" "muc"
    storage = "memory"
    muc_room_cache_size = 1000
    muc_component_config = {
        muc_room_locking = false;
        muc_room_default_public_jids = true;
    }


VirtualHost "guest.jitsi.biz499.com"
    authentication = "anonymous"
    c2s_require_encryption = false

โš ๏ธ Ensure the SSL certificate/key paths are correct — you can verify with:

~  ls /etc/prosody/certs/


๐Ÿ”— Then enable the config:

~  sudo ln -s /etc/prosody/conf.avail/jitsi.biz499.com.cfg.lua /etc/prosody/conf.d/

๐Ÿ” Restart Everything Again
~  sudo systemctl restart prosody
~  sudo systemctl restart jicofo
~  sudo systemctl restart jitsi-videobridge2
~  sudo systemctl restart nginx

Note 3:

๐Ÿ“ Where Is index.html Coming From in the NGINX?

You might wonder: “I didn’t place any index.html — where did it come from?”

โžก๏ธ The answer: It’s automatically placed by Jitsi Meet during installation inside:


You can check with:
~  ls -l /usr/share/jitsi-meet/

 

โœ… The Final Result

After doing all this, your Jitsi instance should now load properly at your domain. Mine is:

๐Ÿ’ฌ If you still see a blank screen, just wait a little. Sometimes services take a while to start syncing — especially right after full configuration. It may take a few minutes or even an hour or two in rare cases.

๐Ÿ“Œ That wraps up all the real errors I faced — and the manual steps I took to solve them.

Tags: