This guide explains how to deploy Bedrud to a production server.
Deployment Options
| Method | Best For |
|---|---|
| Package Manager (apt/AUR) | Managed install on supported Linux distros |
| Automated CLI | Quick remote setup |
| Manual Install | Full control over configuration |
| Docker | Containerized environments |
| Appliance Mode | Single-binary all-in-one setup |
Package Manager
Install Bedrud on Debian/Ubuntu or Arch Linux using the native package manager. This is the recommended method for persistent server deployments where you want automatic updates via apt upgrade or the AUR.
See the Package Installation guide for full instructions, including adding the apt GPG key and repository.
# Ubuntu / Debian
sudo apt install bedrud
# Arch Linux (AUR)
yay -S bedrud-binAfter installation, run the interactive installer to configure TLS, systemd services, and the database:
sudo bedrud installAutomated CLI Deployment
The fastest way to deploy. Run from your local machine:
Prerequisites: Python 3.10+, uv, and SSH access to the target server.
cd tools/cli
uv run python bedrud.py --auto-config \
--ip <server-ip> \
--user root \
--auth-key ~/.ssh/id_rsa \
--domain meet.example.com \
--acme-email admin@example.comThis will:
- Build the backend binary locally
- Compress and upload it via rsync
- Clear conflicting web servers
- Configure the firewall
- Install and start services on the server
CLI Options
| Flag | Description |
|---|---|
--ip | Server IP address |
--user | SSH user (default: root) |
--auth-key | Path to SSH private key |
--domain | Domain name for Let’s Encrypt |
--acme-email | Email for Let’s Encrypt |
--uninstall | Remove Bedrud from server |
Manual Installation
1. Build the Binary
make build-distThis produces dist/bedrud_linux_amd64.tar.xz.
2. Upload to Server
scp dist/bedrud_linux_amd64.tar.xz root@server:/tmp/
ssh root@server "cd /tmp && tar xf bedrud_linux_amd64.tar.xz"3. Install
ssh root@server
sudo /tmp/bedrud install --tls --domain meet.example.com --email admin@example.comSee the Installation Guide for all installation scenarios.
4. Create Admin User
Promote User to Admin
Register via the web UI at your server URL, then promote the user to admin:
sudo ./bedrud user promote --email admin@example.com
Docker Deployment
Build and run with Docker:
docker build -t bedrud .
docker run -d --name bedrud -p 8090:8090 -p 7880:7880 -v bedrud-data:/var/lib/bedrud bedrudA pre-built image is also available:
docker pull ghcr.io/bedrud-ir/bedrud:latestSee the Docker Guide for full details including volumes, configuration, and Docker Compose.
Production Architecture
flowchart TB
NET[Internet] --> TRAEFIK["Traefik (443)<br/>TLS termination, reverse proxy"]
TRAEFIK --> BEDRUD["Bedrud (8090)<br/>API + Web UI"]
TRAEFIK --> LIVEKIT["LiveKit (7880)<br/>WebRTC media"]
BEDRUD --> DB["SQLite<br/>(or PostgreSQL)"]For WebRTC connectivity, also open these ports on the firewall:
| Port | Protocol | Purpose |
|---|---|---|
| 3478 | UDP | TURN/UDP + STUN |
| 5349 | TCP | TURN/TLS (or use 443) |
| 7881 | TCP | ICE/TCP fallback |
| 50000-60000 | UDP | RTC media streams |
See WebRTC Connectivity for the full connectivity stack.
Systemd Services
The installer creates two systemd services:
| Service | Command | Purpose |
|---|---|---|
bedrud.service |
bedrud --run --config /etc/bedrud/config.yaml
| API + web |
livekit.service |
bedrud --livekit --config /etc/bedrud/livekit.yaml
| Media server |
Managing Services
# Check status
systemctl status bedrud livekit
# Restart
systemctl restart bedrud
# View logs
journalctl -u bedrud -f
tail -f /var/log/bedrud/bedrud.logFile Locations (Production)
| Path | Content |
|---|---|
/usr/local/bin/bedrud | Binary |
/etc/bedrud/config.yaml | Server configuration |
/etc/bedrud/livekit.yaml | LiveKit configuration |
/var/lib/bedrud/bedrud.db | SQLite database |
/var/log/bedrud/bedrud.log | Application logs |
CI/CD
Release Pipeline
The release.yml workflow triggers on version tags (v*) and produces:
| Artifact | Description |
|---|---|
bedrud_linux_amd64.tar.xz / bedrud_linux_arm64.tar.xz | Server binaries (Linux x86_64 / ARM64) |
bedrud_amd64.deb / bedrud_arm64.deb | Debian/Ubuntu packages (server) |
Docker image (ghcr.io/bedrud-ir/bedrud) | Multi-arch container image pushed to GHCR |
bedrud-desktop-linux-x86_64.AppImage | Desktop - universal Linux AppImage |
bedrud-desktop-linux-x86_64.deb | Desktop - Debian/Ubuntu package |
bedrud-desktop-linux-x86_64.tar.xz | Desktop - Linux portable tarball |
bedrud-desktop-windows-x86_64-setup.exe / -arm64-setup.exe | Desktop - Windows NSIS installer |
bedrud-desktop-windows-x86_64.zip / -arm64.zip | Desktop - Windows portable |
bedrud-desktop-macos-x86_64.tar.gz / -arm64.tar.gz | Desktop - macOS portable (unsigned) |
| Android APK (debug + release, per-arch) | Android client builds |
| iOS IPA (optional, requires signing) | iOS client archive |
All artifacts are attached to the GitHub release.
Nightly Builds
The dev-nightly.yml workflow produces development builds on a schedule.
CI Checks
Every push to main and every pull request runs:
| Check | Platform |
|---|---|
go vet + build + tests | ubuntu-latest (Go 1.24) |
| Type check + build | ubuntu-latest (Bun) |
| Lint + unit tests | ubuntu-latest (JDK 17) |
| Build + test | macos-15 (Xcode) |