本指南介绍如何在 Linux 服务器上安装 Bedrud 服务器(API、Web UI、WebRTC 媒体服务器)。桌面和移动客户端应用请参阅客户端安装。
前提条件
| 需求 | 详情 |
|---|---|
| 操作系统 | Debian 12+、Ubuntu 22.04+、Arch Linux (rolling)、Fedora 39+ |
| 架构 | amd64 (x86_64) 或 arm64 (aarch64) |
| 权限 | Root 或 sudo |
| 初始化系统 | systemd |
| 硬件 | 最低 1 vCPU、512 MB RAM。10+ 并发房间建议 2 vCPU、2 GB RAM |
| 端口 | 8090(API + Web UI)、7880(LiveKit WebSocket)、50000–60000/udp(WebRTC 媒体) |
| 自动 TLS | 需额外开放 80 和 443。需要域名配置 DNS A record 指向此服务器 |
| 工具 | curl、tar(大多数发行版已预装) |
没有域名? Bedrud 可使用 IP 地址配合 self-signed TLS。浏览器会显示证书警告,但音视频功能正常。内网可信证书请参阅内网 TLS 指南。
1. 一键安装(推荐)
下载并安装 Bedrud CLI 二进制文件到您的 PATH。支持 Linux、macOS 和 Windows。
curl -fsSL https://get.bedrud.org | bash安装后重新加载 shell:
source ~/.bashrc # 或 ~/.zshrcirm https://get.bedrud.org/install.ps1 | iex验证:
bedrud --version自定义安装?使用 --version 0.12.0、--install-dir /opt/bedrud 或 --skip-shell 等参数。完整参考:CLI 安装程序。
2. 包管理器安装
通过发行版的包管理器安装。
curl -fsSL https://bedrud-ir.github.io/bedrud/bedrud.gpg.key \
| sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/bedrud.gpg
echo "deb https://bedrud-ir.github.io/bedrud stable main" \
| sudo tee /etc/apt/sources.list.d/bedrud.list
sudo apt update && sudo apt install bedrud然后运行交互式安装程序:
sudo bedrud installyay -S bedrud-bin
sudo bedrud installsudo curl -fsSL https://bedrud-ir.github.io/bedrud/dnf/bedrud.gpg.key \
-o /etc/pki/rpm-gpg/RPM-GPG-KEY-bedrud
sudo curl -fsSL https://bedrud-ir.github.io/bedrud/dnf/bedrud.repo \
-o /etc/yum.repos.d/bedrud.repo
sudo dnf install bedrud
sudo bedrud install桌面客户端安装(Linux、macOS、Windows)请参阅客户端安装。
3. Docker
在容器中运行 Bedrud - 无需 Linux 服务器配置、无需 systemd、无需下载二进制文件。
预构建镜像(最快)
docker pull ghcr.io/bedrud-ir/bedrud:latest
docker run -d --name bedrud \
-p 8090:8090 \
-p 7880:7880 \
-p 50000-60000:50000-60000/udp \
-v bedrud-data:/var/lib/bedrud \
ghcr.io/bedrud-ir/bedrud:latestDocker Compose
services:
bedrud:
image: ghcr.io/bedrud-ir/bedrud:latest
ports:
- "8090:8090"
- "7880:7880"
- "50000-60000:50000-60000/udp"
volumes:
- bedrud-data:/var/lib/bedrud
restart: unless-stopped
volumes:
bedrud-data:端口
| 端口 | 服务 | 协议 |
|---|---|---|
| 8090 | API + Web UI | HTTP |
| 7880 | LiveKit | WebSocket + HTTP |
| 50000–60000 | WebRTC 媒体 | UDP |
配置
传入配置文件或使用环境变量:
docker run -d --name bedrud \
-p 8090:8090 \
-p 7880:7880 \
-e JWT_SECRET=change-this-to-a-random-string \
-e LIVEKIT_API_KEY=prodkey \
-e LIVEKIT_API_SECRET=prodsecret \
-v bedrud-data:/var/lib/bedrud \
ghcr.io/bedrud-ir/bedrud:latest默认的 JWT 和 LiveKit 密钥仅用于快速测试。在将容器暴露到互联网之前请更改它们。
完整的 Docker 文档包括卷、反向代理和 TLS 配置:Docker 指南。
4. 交互式安装
如果服务器上已有 bedrud 二进制文件:
sudo ./bedrud install安装程序会自动检测服务器 IP 并提示以下内容:
| 提示 | 默认值 | 说明 |
|---|---|---|
| IP 地址 | 自动检测(首个非回环 IPv4) | 按 Enter 接受,或输入其他 IP |
| 域名 | 空(仅 IP) | 如果提供域名和邮箱,将启用 Let’s Encrypt TLS |
| 邮箱 | 空 | 用于 Let’s Encrypt 注册(仅在设置了域名时) |
| self-signed TLS | 是 | 未提供域名时显示。默认为 Y |
当 stdin 被管道传输时(非交互模式),所有提示将被跳过 - 使用标志和默认值。
5. 非交互式(基于标志)
通过传入标志跳过所有提示。
Let’s Encrypt(需要域名)
前提: 域名的 DNS A record 已指向此服务器的 IP。
sudo ./bedrud install --tls --domain meet.example.com --email webmaster@example.comself-signed TLS(基于 IP)
前提: 无额外要求。可立即使用。
sudo ./bedrud install --tls --ip 1.2.3.4纯 HTTP(仅开发/内网)
前提: localhost 或 127.0.0.1。除 localhost 外,浏览器会阻止非 HTTPS 上的摄像头/麦克风。
sudo ./bedrud install --ip 1.2.3.4域名的 self-signed 证书(DNS 配置前测试)
前提: 域名(DNS 无需解析)。
sudo ./bedrud install --tls --domain meet.example.com自定义端口
前提: 端口未被占用。
sudo ./bedrud install --tls --port 8443 --domain meet.example.com外部证书
前提: PEM 格式的 fullchain 和私钥文件。
sudo ./bedrud install --tls --cert /path/to/fullchain.pem --key /path/to/privkey.pem自定义 LiveKit 端口
前提: 防火墙中三个端口均已开放。
sudo ./bedrud install --lk-port 9000 --lk-tcp-port 9001 --lk-udp-port 9002反向代理后部署
前提: 前端有一个终止 TLS 的反向代理(Nginx、Caddy、Traefik、Cloudflare)。
sudo ./bedrud install --behind-proxy --domain meet.example.com在配置中设置 behindProxy: true 并配置可信代理头。
外部 LiveKit 服务器
前提: 已运行独立的 LiveKit 服务器,且可从本机访问。
sudo ./bedrud install --external-livekit https://livekit.example.com跳过嵌入式 LiveKit 安装。API key 和 secret 必须在两边的配置中匹配。
独立 LiveKit 域名
前提: 一个直接解析到此服务器的域名,绕过任何 CDN。
sudo ./bedrud install --livekit-domain lk.example.com --domain meet.example.com适用于主域名在 Cloudflare 后面但 WebRTC 媒体需要直连的场景。
所有标志参考
| 标志 | 默认值 | 说明 |
|---|---|---|
--tls | false | 启用 HTTPS(self-signed 或 Let’s Encrypt) |
--self-signed | false | 生成 self-signed TLS 证书 |
--no-tls | false | 完全禁用 TLS(覆盖 --tls) |
--ip | 自动检测 | 覆盖服务器 IP 地址 |
--domain | "" | 用于 Let’s Encrypt 或 self-signed 证书的域名 |
--email | "" | 用于 Let’s Encrypt 注册的邮箱 |
--port | 443(TLS)/ 8090(HTTP) | 覆盖监听端口 |
--cert | "" | 现有证书文件路径(PEM) |
--key | "" | 现有私钥文件路径(PEM) |
--lk-port | 7880 | LiveKit API 端口 |
--lk-tcp-port | 7881 | LiveKit RTC TCP 端口 |
--lk-udp-port | 7882 | LiveKit RTC UDP 端口 |
--fresh | false | 安装前删除已有安装 |
--behind-proxy | false | 服务器在反向代理 / CDN 后面 |
--external-livekit | "" | 外部 LiveKit 服务器的 URL |
--livekit-domain | "" | LiveKit 专用域名(绕过 CDN) |
6. 全自动部署(Python CLI)
从本地机器构建、上传并配置服务器。
前提: Python 3.12+、uv(Python 包运行器)、目标服务器的 SSH 密钥访问权限、本地安装 Go 1.24+ 和 Bun。
cd tools/cli
uv run python bedrud.py --auto-config \
--ip <your-server-ip> \
--user root \
--auth-key ~/.ssh/id_rsa \
--domain meet.example.com \
--acme-email admin@example.com执行步骤:
- 构建后端二进制文件(
dist/bedrud) - 压缩为
bedrud.tar.xz - 通过 rsync 上传到服务器
- 清理冲突服务(Nginx、Apache、Caddy)
- 配置防火墙(UFW)
- 在服务器上执行内部
install逻辑
| 标志 | 说明 |
|---|---|
--ip | 服务器 IP 地址 |
--user | SSH 用户(默认:root) |
--auth-key | SSH 私钥路径 |
--domain | 用于 Let’s Encrypt 的域名 |
--acme-email | 用于 Let’s Encrypt 的邮箱 |
--uninstall | 从服务器上删除 Bedrud |
安装程序的工作流程
运行 bedrud install 时,会执行以下操作:
| 步骤 | 操作 |
|---|---|
| 1 | 创建目录: /etc/bedrud, /var/lib/bedrud, /var/log/bedrud |
| 2 | 将二进制文件复制到 /usr/local/bin/bedrud |
| 3 | 根据你的设置生成 config.yaml /etc/bedrud/config.yaml |
| 4 | 为媒体服务器生成 livekit.yaml /etc/bedrud/livekit.yaml |
| 5 | 创建两个 systemd 服务: bedrud.service & livekit.service |
| 6 | 启用并启动两个服务 |
| 7 | 初始化 SQLite 数据库和证书缓存 |
服务入口
bedrud --run --config /etc/bedrud/config.yaml # API + Web 服务器
bedrud --livekit --config /etc/bedrud/livekit.yaml # 媒体服务器
安装后
提升用户为管理员
通过 Web 界面注册用户,然后提升为管理员:
sudo ./bedrud user promote --email admin@example.com
验证服务
systemctl status bedrud livekit验证 API
curl -s -o /dev/null -w "%{http_code}" http://localhost:8090预期结果:200
检查防火墙
sudo ufw status确保以下端口已放行:
sudo ufw allow 8090/tcp
sudo ufw allow 7880/tcp
sudo ufw allow 50000:60000/udp查看日志
tail -f /var/log/bedrud/bedrud.log或通过 journalctl:
journalctl -u bedrud -u livekit -f升级
包管理器
# Ubuntu / Debian
sudo apt update && sudo apt upgrade bedrud
# Arch Linux
yay -Syu bedrud-bin
# Fedora / RHEL
sudo dnf upgrade bedrud包升级后服务会自动重启。
二进制下载
下载最新版本并重新运行安装。安装程序可安全地重复运行 - 它会覆盖二进制文件和配置,同时保留数据库:
curl -fsSL -o bedrud.tar.xz https://github.com/bedrud-ir/bedrud/releases/latest/download/bedrud_linux_amd64.tar.xz
tar -xJf bedrud.tar.xz && chmod +x bedrud
sudo ./bedrud install --fresh--fresh 会先删除旧安装。省略此标志可保留现有配置和数据库。
Docker
docker pull ghcr.io/bedrud-ir/bedrud:latest
docker stop bedrud && docker rm bedrud
docker run -d --name bedrud \
-p 8090:8090 \
-p 7880:7880 \
-p 50000-60000:50000-60000/udp \
-v bedrud-data:/var/lib/bedrud \
ghcr.io/bedrud-ir/bedrud:latest使用 Docker Compose:
docker compose pull
docker compose up -d卸载
完全删除 Bedrud:
sudo bedrud uninstall此操作会停止服务、删除 systemd 单元文件、从 /usr/local/bin 中删除二进制文件,并清理 /etc/bedrud、/var/lib/bedrud 和 /var/log/bedrud。
故障排除
| 问题 | 解决方案 |
|---|---|
| 端口 80/443 被占用 | 停止冲突的 Web 服务器:systemctl stop nginx apache2 caddy |
| 服务无法启动 | 查看日志:journalctl -u bedrud -u livekit --no-pager -n 50 |
| TLS 证书问题 | 验证 DNS:dig +short meet.example.com - 必须返回此服务器的 IP |
| LiveKit 端口冲突 | 使用 --lk-port、--lk-tcp-port、--lk-udp-port 标志更改端口 |
| 安装成功但 Web UI 显示 404 | 前端未嵌入。在 bedrud install 之前使用 make build 构建。仅二进制构建会跳过前端 |
| 安装成功但服务崩溃 | 检查静默失败:journalctl -u bedrud --no-pager -n 100。验证 /etc/bedrud/config.yaml 配置 |
| 端口被占用(未知进程) | 查找:ss -tlnp | grep 8090 或 ss -ulnp | grep 7880 |
| 防火墙阻止媒体 | 开放端口:sudo ufw allow 8090/tcp && sudo ufw allow 7880/tcp && sudo ufw allow 50000:60000/udp |
| self-signed certificate 警告 | 属于正常现象。参阅内网 TLS 指南了解私有 CA 配置 |
| 无视频 / WebRTC 失败 | 摄像头访问需要 HTTPS。使用 --tls。确保 UDP 50000–60000 已开放 |
| 反向代理:错误的客户端 IP | 使用 --behind-proxy 标志。会配置可信代理头 |