225 lines
4.8 KiB
Markdown
225 lines
4.8 KiB
Markdown
# VoceChat 部署指南
|
||
|
||
## 概述
|
||
|
||
VoceChat 是轻量级的私有聊天服务器,支持文字聊天、语音/视频通话、文件传输等功能。
|
||
|
||
本文档将 VoceChat 部署在 NAS 上,LiveKit 部署在 VPS 上,通过公网 WSS 连接。
|
||
|
||
## 架构
|
||
|
||
```
|
||
浏览器 ←→ VoceChat (NAS:3009) -- 聊天、管理、生成 LiveKit token
|
||
浏览器 ←→ LiveKit (VPS) -- 语音、视频、屏幕共享
|
||
```
|
||
|
||
## 前置条件
|
||
|
||
- NAS 或 Linux 服务器
|
||
- Docker + Docker Compose
|
||
- Rust 工具链(编译服务端,可选)
|
||
|
||
## 快速部署
|
||
|
||
### 1. 准备目录
|
||
|
||
```bash
|
||
mkdir -p /vol1/docker/coldbreeze/server-rust/deploy
|
||
cd /vol1/docker/coldbreeze/server-rust
|
||
```
|
||
|
||
### 2. 编译服务端(可选,如有预编译二进制可跳过)
|
||
|
||
```bash
|
||
# 需要安装 Rust
|
||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||
source ~/.cargo/env
|
||
|
||
# 编译
|
||
cargo build --release
|
||
cp target/release/vocechat-server .
|
||
```
|
||
|
||
### 3. 创建 `deploy/docker-compose.yaml`
|
||
|
||
```yaml
|
||
services:
|
||
vocechat-server:
|
||
build:
|
||
context: ..
|
||
dockerfile: deploy/Dockerfile
|
||
container_name: coldbreeze-server
|
||
restart: unless-stopped
|
||
volumes:
|
||
- vocechat_data:/home/vocechat-server/data
|
||
- /vol1/docker/coldbreeze/web-client:/home/vocechat-server/data/wwwroot:ro
|
||
ports:
|
||
- "3009:3000" # Web 客户端 + API
|
||
|
||
volumes:
|
||
vocechat_data:
|
||
```
|
||
|
||
### 4. 创建 `deploy/Dockerfile`
|
||
|
||
```dockerfile
|
||
# Stage 1: Build
|
||
FROM rust:1.82-bookworm AS builder
|
||
WORKDIR /src
|
||
COPY Cargo.toml Cargo.lock ./
|
||
COPY src ./src
|
||
COPY crates ./crates
|
||
COPY migrations ./migrations
|
||
COPY cert ./cert
|
||
RUN cargo build --release && strip target/release/vocechat-server
|
||
|
||
# Stage 2: Runtime
|
||
FROM debian:bookworm-slim
|
||
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/*
|
||
COPY --from=builder /src/target/release/vocechat-server /home/vocechat-server/vocechat-server
|
||
COPY config /home/vocechat-server/config
|
||
EXPOSE 3000
|
||
WORKDIR /home/vocechat-server
|
||
CMD ["./vocechat-server"]
|
||
```
|
||
|
||
### 5. 准备 Web 客户端
|
||
|
||
```bash
|
||
# 从本地构建目录上传
|
||
scp -r build/ user@nas:/vol1/docker/coldbreeze/web-client/
|
||
```
|
||
|
||
### 6. 启动服务
|
||
|
||
```bash
|
||
cd deploy
|
||
docker compose up -d
|
||
```
|
||
|
||
### 7. 初始化
|
||
|
||
浏览器访问 `http://<NAS_IP>:3009`,完成管理员注册。
|
||
|
||
## LiveKit 配置
|
||
|
||
在 VoceChat 管理后台 → 设置 → video(LiveKit):
|
||
|
||
| 字段 | 值 |
|
||
|------|-----|
|
||
| Enable | ✅ |
|
||
| LiveKit URL | `wss://livekit.binbim.top` |
|
||
| API Key | 与 VPS LiveKit 一致 |
|
||
| API Secret | 与 VPS LiveKit 一致 |
|
||
|
||
## HTTPS 访问
|
||
|
||
如果需要通过 HTTPS 访问(如从公网),可以使用 Caddy 做反向代理:
|
||
|
||
### 1. 更新 `deploy/docker-compose.yaml`
|
||
|
||
```yaml
|
||
services:
|
||
vocechat-server:
|
||
build:
|
||
context: ..
|
||
dockerfile: deploy/Dockerfile
|
||
container_name: coldbreeze-server
|
||
restart: unless-stopped
|
||
volumes:
|
||
- vocechat_data:/home/vocechat-server/data
|
||
- /vol1/docker/coldbreeze/web-client:/home/vocechat-server/data/wwwroot:ro
|
||
expose:
|
||
- "3000"
|
||
|
||
caddy:
|
||
image: caddy:2-alpine
|
||
container_name: coldbreeze-caddy
|
||
restart: unless-stopped
|
||
volumes:
|
||
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
||
- /vol1/docker/coldbreeze/certs:/certs:ro
|
||
- caddy_data:/data
|
||
ports:
|
||
- "4443:4443"
|
||
depends_on:
|
||
- vocechat-server
|
||
|
||
volumes:
|
||
vocechat_data:
|
||
caddy_data:
|
||
```
|
||
|
||
### 2. 创建 `deploy/Caddyfile`
|
||
|
||
```
|
||
{
|
||
auto_https off
|
||
}
|
||
|
||
:4443 {
|
||
tls /certs/vocechat/cert.pem /certs/vocechat/key.pem
|
||
reverse_proxy vocechat-server:3000
|
||
}
|
||
```
|
||
|
||
### 3. 启动
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
## 端口说明
|
||
|
||
| 端口 | 协议 | 用途 |
|
||
|------|------|------|
|
||
| 3009 | TCP | HTTP 访问(内网) |
|
||
| 4443 | TCP/UDP | HTTPS 访问(公网) |
|
||
|
||
## LiveKit API Key/Secret
|
||
|
||
VoceChat 和 LiveKit 使用相同的 API Key/Secret 进行 JWT 签名验证。
|
||
|
||
在 VoceChat 管理后台配置的值必须与 VPS 上 `livekit.yaml` 中的 `keys` 完全一致。
|
||
|
||
生成方法:
|
||
|
||
```bash
|
||
docker run --rm livekit/livekit-server generate-keys
|
||
```
|
||
|
||
## 数据持久化
|
||
|
||
VoceChat 数据存储在 Docker volume `vocechat_data` 中,包含:
|
||
|
||
- SQLite 数据库
|
||
- 用户头像
|
||
- 上传的文件
|
||
- 消息数据库
|
||
|
||
备份方法:
|
||
|
||
```bash
|
||
docker run --rm -v deploy_vocechat_data:/data -v /backup:/backup alpine tar czf /backup/vocechat-backup.tar.gz -C /data .
|
||
```
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
# 查看日志
|
||
docker compose logs -f vocechat-server
|
||
|
||
# 重启
|
||
docker compose restart vocechat-server
|
||
|
||
# 更新 Web 客户端后重启
|
||
docker compose restart vocechat-server
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
- Web 客户端需要单独构建(pnpm 构建)
|
||
- 建议在本机临时目录构建 Web 客户端,避免网络盘问题
|
||
- 构建时需要设置 `REACT_APP_RELEASE=true` 以启用 HTTPS 兼容模式
|
||
- LiveKit API Key/Secret 必须与 VPS LiveKit 一致
|