The Debian packages are the original way to install Jitsi Meet. The installer asks a few questions and wires everything together on the host: Nginx, Prosody, Jicofo, the videobridge and a TURN server.
If you want easier upgrades and isolation, use the Docker guide instead. Both end with the same Jitsi Meet.
This is a fresh-install recipe, not an in-place OS upgrade. The package sequence was reviewed against the current official quickstart on 30 October 2026. Lua-specific guidance also refers to the earlier, dated Ubuntu container investigation linked below; no fresh Ubuntu installation or real call was run for this revision. Read the component walkthrough if the service names are unfamiliar. [S1][S2]
Before you start
- Ubuntu 26.04 or 24.04 LTS. Check the actual CPU, RAM and network needs in server requirements; an installation recipe is not a participant-capacity guarantee. The current quickstart supports Ubuntu 24.04 or newer. [S1]
- A domain like
meet.example.comwith anArecord pointing at the server’s public IP. - A user with sudo.
1. Set the hostname
Why: keep the intended server identity consistent with the domain you will configure. Check: public DNS must point to the correct server or NAT entry point; a local hosts-file entry alone does not change public DNS. [S1]
sudo hostnamectl set-hostname meet.example.comAdd the public name to /etc/hosts so the server resolves itself:
127.0.0.1 localhost
203.0.113.10 meet.example.com2. Install prerequisites
Why: the later steps need repository-signing, download, web-server and repository-management tools. Check: resolve errors in package updates before adding more components. [S1]
sudo apt update
sudo apt install -y gnupg2 curl apt-transport-https nginx-full software-properties-common
sudo add-apt-repository universe3. Add the Prosody repository
Why: install a compatible Prosody from the intended package source. Check: the next apt update must load it successfully; a downloaded key alone does not establish that the repository is configured correctly. [S1]
sudo curl -sL https://prosody.im/files/prosody-debian-packages.key \
-o /usr/share/keyrings/prosody-debian-packages.key
echo "deb [signed-by=/usr/share/keyrings/prosody-debian-packages.key] http://packages.prosody.im/debian $(lsb_release -sc) main" \
| sudo tee /etc/apt/sources.list.d/prosody-debian-packages.list4. Set the Lua version for Prosody
Why: installing a Lua package and selecting the interpreter used by Prosody are different actions. Check: compare the actual interpreter, installed Prosody/Jitsi versions and loaded modules. If an existing installation already works, investigate before switching its runtime. [S2]
In the dated Ubuntu 26.04/Jitsi 11248 investigation, leaving the interpreter unselected allowed a Lua 5.1 dependency path that Prosody 13 could not run, and package configuration failed. Verify the interpreter actually used by your installed Prosody rather than infer it from the presence of a Lua package. [S2]
On Ubuntu 26.04, use Lua 5.4 and pin it:
sudo apt install -y lua5.4
sudo update-alternatives --set lua-interpreter /usr/bin/lua5.4For the Ubuntu 24.04/Jitsi 11248 combination investigated there, the working recipe used Lua 5.2:
sudo apt install -y lua5.2The earlier Jitsi 11248 investigation encountered module 'inspect' not found with JWT modules and Lua 5.4 on Ubuntu 24.04; its working comparison used Lua 5.2. PR #17928 merged a correction on 5 October. A merged PR alone does not establish what your installed packages contain, so recheck that version boundary before changing this recipe’s Lua choice. For the different Ubuntu 26.04 module/interpreter path and the dated test evidence, follow Prosody after upgrading to Ubuntu 26.04. [S2]
5. Add the Jitsi repository
Why: this selects the Jitsi package source. Check: apt update should complete without signature or repository errors. Preserve the distinction between a configured source and an installed/running service. [S1]
curl -sL https://download.jitsi.org/jitsi-key.gpg.key \
| sudo sh -c 'gpg --dearmor > /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 update6. Open the firewall
Why: browser access, media and configured TURN fallback use different paths. Check: apply the requirements to both host and upstream/cloud controls. For remote administration, preserve access on your actual SSH port before enabling a firewall; 22/tcp below is the standard-port example, not a statement about your server. [S1]
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw enable3478/udp and 5349/tcp are for the bundled TURN server, which helps users behind strict corporate firewalls. Open the same ports in your cloud provider’s firewall.
7. Install Jitsi Meet
Why: the package installer configures the related services. Check: resolve a failed package configuration before testing the meeting page. The official quickstart also specifies OpenJDK 17; verify the Java/runtime packages on your chosen installation. [S1]
sudo apt install -y jitsi-meetThe installer asks for:
- The hostname: enter
meet.example.com. - The SSL certificate: choose Let’s Encrypt, and give an email address for expiry notices.
8. Test
Open your intended trusted HTTPS address and test one authorized room with three consenting participants, including the networks your users need. Confirm arrival and audio/video reception in both directions. When P2P is enabled and succeeds, a two-person call can avoid the bridge media path, so it is not sufficient evidence of a working bridge. [S3]
| What passes | What still needs checking |
|---|---|
| Package installation completes | Services, trusted HTTPS and the actual meeting. |
| The website opens | Joining, admission and remote media. |
| Two people can talk | Bridge behavior with a third participant and other networks. |
| Three-person functional test works | Capacity, recording, phone access and all other required workflows. |
If the page works but the third participant triggers media failure, use bridge diagnostics. If the certificate is untrusted, follow the TLS owner before claiming a successful install.
Where things live
| Component | Config |
|---|---|
| Web app | /etc/jitsi/meet/meet.example.com-config.js |
| Nginx site | /etc/nginx/sites-available/meet.example.com.conf |
| Prosody | /etc/prosody/conf.avail/meet.example.com.cfg.lua |
| Jicofo | /etc/jitsi/jicofo/jicofo.conf |
| Videobridge | /etc/jitsi/videobridge/jvb.conf |
Logs are in /var/log/jitsi/ and through journalctl -u jicofo -u jitsi-videobridge2 -u prosody.
Next steps
- Require a login to create rooms. On the package install, set the Prosody virtual host to
authentication = "internal_hashed"and add a guest virtual host. - Add JWT authentication for app integrations.
- Keep it patched with
sudo apt update && sudo apt upgrade, and test after each Jitsi upgrade.
Sources and verification limits
- [S1] Official Debian/Ubuntu quickstart, checked 30 October 2026; reviewed source. Ubuntu’s repository-management manpage identifies
software-properties-common; confirm packages for your OS. This page does not claim fresh installation testing. - [S2] The dated Ubuntu/Prosody investigation retains its original 6 October test scope and primary sources; PR 17928 is merged, not proof of the code installed on your machine.
- [S3] Pinned Meet 11248 P2P configuration: two-person mode is conditional.
Recheck repository, OS, Java/Lua and package-version requirements before a later deployment. No OS upgrade, firewall, package, certificate or live-meeting change was performed in this revision.