部署
Docker(信令服务器推荐方式)
printf 'LRD_BOOTSTRAP_TOKEN=%s\n' "$(openssl rand -hex 32)" > .env
docker compose up -d访问 http://localhost:8081,填写 .env 中的令牌并设置管理员账户。初始化后仍需保留 .env,Compose 每次启动都会校验该必填变量。如需自定义镜像,使用 ./build_docker.sh。
需要持久化的状态
服务端写入的是 config.toml 参考中说明的平台标准路径,而不是运行 目录。容器内以 root 运行,因而落在 Linux 系统级路径上,所以 Compose 文件把三个必须比容器 活得更久的目录做了 bind mount:
| 宿主机路径 | 容器内路径 | 内容 |
|---|---|---|
./conf | /etc/lcxl-remote-desk | config.toml |
./data | /var/lib/lcxl-remote-desk | 信令与执行台账数据库、远程访问状态 |
./logs | /var/log/lcxl-remote-desk | 滚动日志 |
丢失 ./data 会一并丢掉信令侧状态、访问码、AI 服务商配置与审计记录,请与 ./conf 一起备份。
TURN 中继端口
中继端口范围([turn] 的 relay_min_port / relay_max_port,默认 50000-50050)默认 不映射。若要由这台服务器承担中继,请在 docker-compose.yml 中取消该端口范围的注释、在安全组 放行,并把 [[turn.interfaces]] 的 external 设为本机公网地址——见下方网络与 NAT 穿透。
从源码构建生产版本
# 后端
cargo build --release
# 前端
cd vite-project
npm run build系统依赖
Linux
sudo apt install -y build-essential pkg-config libssl-dev libasound2-dev \
libpipewire-0.3-dev libx11-dev libxcb1-dev libxcb-randr0-dev libxext-dev \
clang libclang-dev cmake libvpx-devmacOS
通过 Homebrew 安装(x264 与 libvpx 经 pkg-config 解析;cmake 用于从源码构建内置 Opus):
brew install pkgconf libvpx x264 cmake在 Apple Silicon 上,确保 pkg-config 能找到 Homebrew 的 .pc 文件:
export PKG_CONFIG_PATH="/opt/homebrew/lib/pkgconfig:$PKG_CONFIG_PATH"如需无人值守访问,请在 Web 控制台打开系统设置 → macOS 状态 → 自动登录。 卡片会显示 FileVault、已配置的自动登录用户与当前用户,并提供可复制的启用/禁用命令。 启用命令使用 sysadminctl ... -password -:请在终端中执行,由 macOS 交互式请求密码; 网页绝不读取或处理密码。FileVault 与自动登录互斥,因此 FileVault 开启时页面会禁用 启用操作。
Windows
无需额外依赖;一切由 Cargo 自动管理。(AV1 编码可选地需要 nasm——见快速开始。)
网络与 NAT 穿透
server 内置信令、STUN 与 TURN。跨 NAT 连接时:
- 连接优先直连 WebRTC P2P,仅当穿透失败时才回退到 TURN 中继。
- 对外访问时,确保信令端点可达,且配置的中继端口范围已开放/映射。
- TURN realm、凭据、接口与中继端口范围在
[turn]下配置——见 config.toml 参考。
扩展进程布局
对于多会话主机或采集安全界面,运行 service-daemon 模式,或用 --startup-mode signaling 把信令服务单独拆出。
公网部署加固
把 server 暴露到公网时(通常置于终结 TLS 的反向代理之后),注意:
LRD_COOKIE_SECURE——控制会话 Cookie 的Secure属性。默认false,以便本地 / 局域网 HTTP 访问保留会话。HTTPS 部署应设LRD_COOKIE_SECURE=true,使 Cookie 仅经 HTTPS 发送。LRD_BOOTSTRAP_TOKEN——在 Compose 示例以外是可选项;配置后,初始化向导及初始化前的连接探测都必须携带该值。变量存在但为空会导致启动失败。请使用至少 32 个随机字节,不要放入 URL 或日志。Compose 示例通过${...:?}强制要求它。LRD_TRUSTED_PROXIES——逗号分隔的代理 IP/CIDR。默认信任回环地址(127.0.0.0/8、::1),其他代理或容器网段必须显式配置。只有可信 peer 才能提供X-Forwarded-For。除非服务器只能经会覆盖 XFF 的代理访问,否则不要使用*。LRD_AUTH_IPV6_PREFIX_LEN——IPv6 限流前缀,默认64,合法范围1..=128;IPv4 固定为/32。LRD_AUTH_RATE_LIMIT_MAX_BUCKETS——登录和 redeem 的有界容量档位,默认65536,普通部署无需调整。LRD_PROVIDER_SSRF_MODE——防护中心大脑代用户拨号其配置的模型供应商base_url时的 SSRF(指向内网服务或云元数据端点)。只管私网可达性(与下方 TLS 开关正交);云元数据段在任何模式下都被拦截。取值:relaxed(默认)——允许私网 / 回环目标(本地模型网关,如http://localhost:11434)。strict——拒绝私网 / 回环 / CGNAT / ULA 目标;连接期再校验解析到的 IP(防 DNS 重绑定)。当不可信用户可配置供应商时使用。
LRD_ENFORCE_PUBLIC_TLS——是否允许以明文(http)拨号公网目标。默认true(仅显式设为false/0/no/off才关闭)。开启时,对公网地址的明文拨号会在连接前被拒(api_key 绝不明文外泄);私网 / 回环 / 局域网目标始终豁免,云元数据段无论如何始终拦截。与 SSRF 模式正交:要放行公网明文供应商,关闭本开关即可,无需切到relaxed(那会额外放开私网目标)。- 没有运行时 API 文档端点:server 不提供 Swagger UI / ReDoc / RapiDoc / Scalar,也不提供
/openapi.json,公网上因此没有这一类可被探测的面。需要规范时用离线dump-openapi生成(见 REST API 参考)。 - 把 server 置于反向代理之后,由其终结 TLS、透传
Host,并为信令转发 WebSocketUpgrade头。 - 同机原生反向代理通常从 loopback 连接,可直接使用默认信任;代理容器通常从 bridge/container 地址连接,必须显式加入其实际 peer CIDR。若 Docker 或四层代理已经丢失真实源地址且不提供 XFF,应用无法恢复,所有客户端只能共享一个限流 bucket。
- server 当前没有 CORS 中间件,浏览器无法通过跨源预检向 loopback peer 发送自定义 XFF。未来增加 CORS、Private Network Access 放行或 XFF 请求头放行时,必须重新评审默认 loopback 信任边界。