Files

225 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 管理后台 → 设置 → videoLiveKit):
| 字段 | 值 |
|------|-----|
| 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 一致