This guide explains how to deploy Bedrud to a production server.

Deployment Options

MethodBest For
Package Manager (apt/AUR)Managed install on supported Linux distros
Automated CLIQuick remote setup
Manual InstallFull control over configuration
DockerContainerized environments
Appliance ModeSingle-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-bin

After installation, run the interactive installer to configure TLS, systemd services, and the database:

sudo bedrud install

Automated 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.com

This will:

  1. Build the backend binary locally
  2. Compress and upload it via rsync
  3. Clear conflicting web servers
  4. Configure the firewall
  5. Install and start services on the server

CLI Options

FlagDescription
--ipServer IP address
--userSSH user (default: root)
--auth-keyPath to SSH private key
--domainDomain name for Let’s Encrypt
--acme-emailEmail for Let’s Encrypt
--uninstallRemove Bedrud from server

Manual Installation

1. Build the Binary

make build-dist

This 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.com

See 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 bedrud

A pre-built image is also available:

docker pull ghcr.io/bedrud-ir/bedrud:latest

See 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:

PortProtocolPurpose
3478UDPTURN/UDP + STUN
5349TCPTURN/TLS (or use 443)
7881TCPICE/TCP fallback
50000-60000UDPRTC 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.log

File Locations (Production)

PathContent
/usr/local/bin/bedrudBinary
/etc/bedrud/config.yamlServer configuration
/etc/bedrud/livekit.yamlLiveKit configuration
/var/lib/bedrud/bedrud.dbSQLite database
/var/log/bedrud/bedrud.logApplication logs

CI/CD

Release Pipeline

The release.yml workflow triggers on version tags (v*) and produces:

ArtifactDescription
bedrud_linux_amd64.tar.xz / bedrud_linux_arm64.tar.xzServer binaries (Linux x86_64 / ARM64)
bedrud_amd64.deb / bedrud_arm64.debDebian/Ubuntu packages (server)
Docker image (ghcr.io/bedrud-ir/bedrud)Multi-arch container image pushed to GHCR
bedrud-desktop-linux-x86_64.AppImageDesktop - universal Linux AppImage
bedrud-desktop-linux-x86_64.debDesktop - Debian/Ubuntu package
bedrud-desktop-linux-x86_64.tar.xzDesktop - Linux portable tarball
bedrud-desktop-windows-x86_64-setup.exe / -arm64-setup.exeDesktop - Windows NSIS installer
bedrud-desktop-windows-x86_64.zip / -arm64.zipDesktop - Windows portable
bedrud-desktop-macos-x86_64.tar.gz / -arm64.tar.gzDesktop - 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:

CheckPlatform
go vet + build + testsubuntu-latest (Go 1.24)
Type check + buildubuntu-latest (Bun)
Lint + unit testsubuntu-latest (JDK 17)
Build + testmacos-15 (Xcode)