Jitsi Meet on Rocky Linux 9

(Self-Hosted Video Conferencing + Nginx + SSL)

Jitsi Meet is a powerful, open-source video conferencing platform that allows secure audio and video meetings directly in the browser, without requiring user accounts, plugins, or proprietary software. It supports HD video, screen sharing, chat, meeting moderation, recording/streaming, and optional end-to-end encryption (E2EE), making it a strong alternative to Zoom, Google Meet, or Microsoft Teams.

Unlike cloud-only conferencing solutions, Jitsi Meet can be fully self-hosted, giving you complete control over meeting data, media traffic, and access rules. This makes it especially suitable for organizations that value privacy, compliance, and infrastructure ownership.

Running Jitsi Meet on Rocky Linux 9, a RHEL-compatible, enterprise-grade Linux distribution, provides long-term stability, predictable updates, and strong security defaults. When combined with Nginx and HTTPS (SSL), Rocky Linux 9 offers a production-grade foundation for secure, scalable, self-hosted video conferencing.


Architecture Overview

LayerComponentRole
OSRocky Linux 9Enterprise-grade, RHEL-compatible Linux base
Web ServerNginxHTTPS termination and web access
Web AppJitsi MeetBrowser-based meeting interface
Media ServerJitsi VideobridgeHandles audio/video streams
SignalingProsody + JicofoAuthentication, signaling, room control
TransportUDP / TCPReal-time media transport (WebRTC)
TLSLet’s Encrypt / PKIEncrypted connections

Jitsi’s modular architecture allows it to scale from small private meetings to large multi-participant conferences.


Why Use Jitsi Meet?

  • Open-source & self-hosted — no vendor lock-in
  • No user accounts required — join meetings via simple links
  • High-quality audio & video — WebRTC-based
  • Screen sharing & chat — built-in collaboration tools
  • Meeting moderation — lobby, passwords, participant controls
  • End-to-end encryption (E2EE) — optional enhanced privacy
  • Browser-based — works on all modern browsers
  • Scalable architecture — suitable for teams and organizations

Jitsi Meet is ideal for users who want private, secure video conferencing without SaaS dependencies.


Jitsi Meet vs Other Video Conferencing Platforms

Feature / CapabilityJitsi MeetZoomGoogle MeetMicrosoft Teams
HostingSelf-hostedCloud onlyCloud onlyCloud only
Open-source✅ Yes❌ No❌ No❌ No
Data ownershipFull controlVendor-controlledVendor-controlledVendor-controlled
Accounts required❌ No✅ Yes✅ Yes✅ Yes
E2EE✅ YesPartialPartialPartial
CostFree (self-hosted)Free / PaidFreePaid

Jitsi stands out for privacy, flexibility, and full infrastructure control.


Security & Best Practices on Rocky Linux 9

  • Serve Jitsi only over HTTPS.
  • Use Let’s Encrypt SSL certificates with automatic renewal.
  • Open required ports:
    • 443/TCP — HTTPS
    • 10000/UDP — media traffic
    • Optional fallbacks: 4443/TCP, 5349/TCP
  • Configure firewalld to restrict unused ports.
  • Enable room moderation (passwords, lobby).
  • Keep Rocky Linux and Jitsi packages updated regularly.
  • Monitor CPU, RAM, disk, and network bandwidth usage.
  • Use a dedicated domain or subdomain (e.g. meet.example.com).
  • Tune Nginx and Videobridge settings for performance.
  • For large deployments, consider multiple Jitsi Videobridge nodes.

Typical Use Cases

  • Team meetings and daily stand-ups
  • Private business calls
  • Remote education and training
  • Internal company conferencing
  • Privacy-focused organizations
  • Self-hosted alternatives to Zoom or Google Meet
  • Government, NGO, or compliance-sensitive environments

Deploying Jitsi Meet on Rocky Linux 9 gives you a secure, scalable, and fully self-hosted video conferencing solution — combining modern WebRTC technology with full data ownership, strong encryption, and enterprise-grade Linux stability.


Step 1: Create a Server Instance on Shape.Host

Before installing Jitsi, you need a VPS with a public IP address.

Log in to https://shape.host

Click Create → Instance

Shape.host Resources dashboard with Create > Instance highlighted.

Choose a data center close to your users

Shape.host instance form with the data center location selector highlighted.

Select a plan with at least:

2 CPU cores (4 recommended)

4 GB RAM

40 GB SSD storage

Choose Rocky Linux 9 (64-bit)

Shape.host instance form with the operating system image selector highlighted.

Create the instance and wait for provisioning

Shape.host instance form with the Create Instance button highlighted.

Copy the public IP address

Shape.host Resources dashboard with the server IP address highlighted.

Step 2: Connect to the Server

Linux / macOS

ssh root@YOUR_SERVER_IP

Windows (PowerShell / Windows Terminal)

ssh root@YOUR_SERVER_IP

Windows (PuTTY)

  • Host Name: YOUR_SERVER_IP
  • Port: 22
  • Connection type: SSH
  • Username: root

Step 3: Update the System

dnf update
  • Updates all installed packages
  • Applies security patches
  • Ensures compatibility with Docker and firewall components
Terminal showing DNF/YUM package management commands and output.

Step 4: Set Hostname (Required by Jitsi)

Jitsi requires a valid fully qualified domain name (FQDN).

hostnamectl set-hostname rockylinux-tutorials.shape.host

Edit the hosts file:

nano /etc/hosts

Add or update:

127.0.0.1       localhost
YOUR_PUBLIC_IP  meet.example.com
Terminal showing the GNU nano editor and configuration text.

Verify hostname:

hostname
Terminal showing hostname configuration or system identification details.

Update again and reboot:

dnf update
reboot

Reconnect via SSH after reboot.


Step 5: Disable SELinux (Required for Docker-Jitsi)

Docker-Jitsi-Meet does not function correctly with SELinux enforcing.

Edit SELinux configuration:

nano /etc/selinux/config

Set:

SELINUX=disabled
Terminal showing the GNU nano editor and configuration text.

Disable SELinux immediately:

setenforce 0

Reboot to apply permanently:

reboot

Verify SELinux status:

getenforce

Expected output:

Disabled
Terminal displaying the SELinux enforcement status.

Step 6: Clean Repositories and Prepare System

Remove any leftover Jitsi repository:

rm -f /etc/yum.repos.d/jitsi.repo

Clean and rebuild cache:

dnf clean all
dnf makecache
dnf repolist
Terminal showing rm commands or output during Clean Repositories and Prepare System.
Terminal listing enabled Rocky Linux package repositories.

Install repository management tools:

dnf install dnf-utils
Terminal showing DNF/YUM package management commands and output.

Step 7: Install Docker and Docker Compose

Add Docker repository:

dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Install Docker components:

dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Terminal showing DNF/YUM package management commands and output.

Enable and start Docker:

systemctl enable docker --now

Verify Docker status:

systemctl status docker
Terminal showing the interactive process monitor.

Step 8: Configure Firewall (Firewalld)

Enable firewalld:

systemctl unmask firewalld
systemctl enable firewalld --now
Terminal showing systemd service management commands or output.

Open required Jitsi ports:

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=10000/udp

Apply rules:

firewall-cmd --reload
Terminal showing firewall configuration commands and rules.

Verify:

firewall-cmd --list-ports
Terminal showing firewall configuration commands and rules.

Step 9: Download Docker-Jitsi-Meet

Create working directory:

mkdir -p /opt/jitsi
cd /opt/jitsi

Download project:

curl -LO https://github.com/jitsi/docker-jitsi-meet/archive/refs/heads/master.tar.gz

Extract and clean:

tar xzf master.tar.gz
mv docker-jitsi-meet-master/* .
rm -rf docker-jitsi-meet-master master.tar.gz
Terminal showing file and directory setup commands.

Step 10: Configure Jitsi Environment

Copy example environment file:

cp env.example .env

Generate strong internal passwords:

./gen-passwords.sh

Edit configuration:

nano .env

Set the following values:

# Public URL
PUBLIC_URL=https://meet.example.com

# Force correct ports
HTTP_PORT=80
HTTPS_PORT=443

# Timezone
TZ=Europe/Bucharest

# Enable Let's Encrypt
ENABLE_LETSENCRYPT=1
LETSENCRYPT_DOMAIN=meet.example.com
LETSENCRYPT_EMAIL=admin@example.com

What this configuration does

  • Enables automatic Let’s Encrypt SSL
  • Defines your public Jitsi domain
  • Forces correct HTTP/HTTPS ports
  • Sets system timezone for logs and containers
Docker Jitsi configuration excerpt with web port and public URL settings.
Configuration enabling Let’s Encrypt certificates and setting the certificate domain and contact email.

Step 11: Start Jitsi Meet

docker compose up -d

This command:

  • Pulls all required Jitsi containers
  • Automatically requests SSL certificates
  • Starts Prosody, Jicofo, Videobridge, Web, and Let’s Encrypt services
Terminal showing container image download progress.

View logs (optional):

docker compose logs -f

Verify running containers:

docker ps
Terminal showing the Docker container listing.

Step 12: Access Jitsi Meet

Open your browser:

https://meet.example.com

Your Jitsi Meet instance is now:

  • Fully self-hosted
  • Running on Rocky Linux 9
  • Secured with Let’s Encrypt SSL
  • Ready for production video conferencing
Jitsi Meet welcome page with a meeting-name field and Start meeting button.

You installed Jitsi Meet on Rocky Linux 9 using Docker-Jitsi-Meet, configured hostname, SELinux, firewall rules, and enabled automatic HTTPS with Let’s Encrypt. This Docker-based setup is stable, scalable, and easy to maintain, making it ideal for production use.

For reliable performance, full root access, and scalable infrastructure, Shape.Host Cloud VPS is an excellent choice for hosting real-time communication platforms like Jitsi Meet.