Setting Up Jitsi So I Can Stop Worrying About Zoom

Setting Up Jitsi So I Can Stop Worrying About Zoom

Tutorials docker jitsi privacy self-hosting video-chat

Quick housekeeping before I get into it: this is going to be a setup-your-own-thing post, not a hot take on the Zoom mess, because I guarantee you every tech blog on earth is doing that post this week. Zoom's user count went from something like 10 million daily meeting participants in December to over 200 million by the end of March, and along with that came zoombombing, the "attention tracking" feature (which they yanked), and that Citizen Lab report about some calls getting routed through servers in China. Eric Yuan put out a blog post on April 1st admitting they'd gotten ahead of their own security work and freezing new features for 90 days to fix it. Fine. Good, even. But I didn't want to wait around, so I spent Tuesday night setting up Jitsi Meet on a cheap droplet instead, and I figured I'd write down what I did while it's still fresh.

If you haven't used Jitsi before: it's open source, it's WebRTC based, and nobody has to make an account to join a call. You send someone a link, they click it, they're in. There's a free hosted version at meet.jit.si you can use right now with zero setup, and for most people that's honestly enough. But I wanted something I controlled, mostly because my in-laws are doing a weekly video call now that none of us can see each other in person, and I didn't love the idea of that running through somebody else's free tier indefinitely.

The actual setup

I spun up a $10/month DigitalOcean droplet (2GB RAM, the 1GB one struggled when I tested it with more than three participants) running Ubuntu 18.04, pointed a subdomain at it, and used the official docker-compose setup from the jitsi/docker-jitsi-meet repo. It's not complicated:

git clone https://github.com/jitsi/docker-jitsi-meet
cd docker-jitsi-meet
cp env.example .env

Then you edit the .env file, set your public IP and domain, and run docker-compose up -d. That's basically it for a working instance. You'll want ports 443, 4443/tcp, and 10000/udp open, and if you're behind a router with NAT you need to set DOCKER_HOST_ADDRESS correctly or the video streams just silently fail to connect, which is exactly what happened to me the first time and cost me about forty minutes of staring at a blank black tile wondering why audio worked but nobody's camera did.

A few things I'd tell past-me before starting:

  • Get a real TLS cert (Let's Encrypt, there's a script for it in the repo) before you invite anyone else. Browsers throw ugly warnings on self-signed certs and your mother-in-law will not click through them, she'll just assume it's broken and text you.
  • Recording and dial-in aren't on by default and involve setting up Jibri, which is its own separate headache with its own container and its own Chrome instance running headless inside it. I skipped this. I don't need recordings of my family arguing about who forgot to unmute.
  • The mobile apps (there's an iOS and Android Jitsi Meet app) can point at a custom server instead of meet.jit.si, buried a couple menus deep in settings. Worth doing if you want this to actually replace Zoom for people who aren't sitting at a laptop.

One random aside: Jitsi's had a weirder corporate history than you'd guess for something this scrappy-looking. It started as a French research project back in the early 2000s, Atlassian bought it in 2015 and folded it into Hipchat, and then 8x8 (yes, the VOIP phone company your dentist's office probably uses) picked it up in 2018 when Atlassian killed Hipchat off. None of that shows up anywhere in the product, which I kind of respect.

Is this better than Zoom? For a family call or a small standup, sure, and you get to stop thinking about it once it's running. It is absolutely not a drop-in replacement if you need breakout rooms, or you're running a call with sixty people, or you need it to just work on the first try for someone who barely knows how to open a browser tab. Zoom got popular because it's stupidly easy, and easy is worth a lot right now when everyone's patience is already shot from being stuck inside. I'm keeping both running for a while and seeing which one I actually reach for in three weeks, which feels like the more honest way to answer that question than picking a side today.