Files
platform-pipi/packages/voice-production/docs/Ubuntu服务器部署.md
T
2026-02-09 13:30:43 +08:00

191 lines
5.6 KiB
Markdown
Raw 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.
# voice-production 部署到 Ubuntu 云服务器
`voice-production` 的静态资源(voice、char、后续图片)部署到 Ubuntu,用 Nginx 提供访问并绑定二级域名。
---
## 一、服务器准备
### 1. 安装 Nginx
```bash
sudo apt update
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
```
### 2. 安装 Node.js 与 pnpm(用于在服务器上执行部署脚本)
若你打算在服务器上跑 `deploy-assets` 和后续的生成脚本,需要 Node
```bash
# Node 20 LTS(推荐)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# pnpm
sudo npm install -g pnpm
```
若你只打算从本机把已生成好的 `pipi-assets` 同步到服务器,可跳过 pnpm,但至少保留 Node 以便将来在服务器上跑脚本。
### 3. 创建资源目录(若用脚本部署会自动创建,也可先建)
```bash
sudo mkdir -p /var/www/pipi-assets
sudo chown $USER:$USER /var/www/pipi-assets
```
---
## 二、部署方式(二选一)
### 方式 A:在服务器上拉代码并执行部署脚本(推荐)
适合:代码已在 Git 仓库,服务器能访问仓库。
**1. 在服务器上克隆/拉取项目**
```bash
# 进入你放项目的目录,例如
cd /var/www
sudo git clone <你的仓库地址> pipi-learn
cd pipi-learn/platform-pipi/packages/voice-production
# 若已存在目录则只拉取
# git pull
```
**2. 安装依赖并执行部署**
```bash
pnpm install
pnpm run deploy-assets:server
```
会把 `data/` 下内容拷贝到 `/var/www/pipi-assets/`,并在当前目录生成 `scripts/nginx-pipi-assets.conf`
**3. 把 Nginx 配置放到系统目录并启用**
```bash
# 若需改二级域名,先编辑 scripts/nginx-pipi-assets.conf 里的 server_name
sudo cp scripts/nginx-pipi-assets.conf /etc/nginx/sites-available/pipi-assets
sudo ln -sf /etc/nginx/sites-available/pipi-assets /etc/nginx/sites-enabled
sudo nginx -t && sudo systemctl reload nginx
```
**4. 配置 DNS**
在域名服务商处为二级域名(如 `assets.yourdomain.com`)添加 **A 记录**,指向该云服务器的公网 IP。
**5.(可选)HTTPS**
```bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d assets.yourdomain.com
```
按提示选择即可,证书会自动写入 Nginx 配置。
---
### 方式 B:本机生成后同步到服务器
适合:在本地生成 voice/char,只把静态文件上传到服务器。
**1. 本机生成并拷贝到“服务器目标结构”**
在 Mac 上:
```bash
cd platform-pipi/packages/voice-production
pnpm run deploy-assets:local # 生成 pipi-assets/
```
**2. 把 pipi-assets 同步到服务器**
```bash
rsync -avz --delete ./pipi-assets/ 用户名@服务器IP:/var/www/pipi-assets/
```
若服务器上 `/var/www/pipi-assets` 需要 sudo,可先同步到用户目录再在服务器上移动:
```bash
rsync -avz --delete ./pipi-assets/ 用户名@服务器IP:~/pipi-assets/
# 登录服务器后
ssh 用户名@服务器IP
sudo rm -rf /var/www/pipi-assets/* && sudo cp -r ~/pipi-assets/* /var/www/pipi-assets/
```
**3. 在服务器上准备 Nginx 配置**
- 要么在服务器上拉取一遍 voice-production 代码,执行一次 `pnpm run deploy-assets:server`,只为了生成 `scripts/nginx-pipi-assets.conf`,再按方式 A 第 3 步拷贝并启用;
- 要么在本机生成配置后上传。本机执行:
```bash
node scripts/deploy-assets.js --target /var/www/pipi-assets --nginx ./scripts/nginx-pipi-assets.conf
```
把生成的 `scripts/nginx-pipi-assets.conf` 用 scp 传到服务器,再在服务器上:
```bash
sudo cp nginx-pipi-assets.conf /etc/nginx/sites-available/pipi-assets
sudo ln -sf /etc/nginx/sites-available/pipi-assets /etc/nginx/sites-enabled
```
**4. 修改配置里的 server_name(若尚未改)**
```bash
sudo nano /etc/nginx/sites-available/pipi-assets
# 将 server_name assets.yourdomain.com; 改为你的二级域名
```
**5. 测试并重载 Nginx**
```bash
sudo nginx -t && sudo systemctl reload nginx
```
DNS 与 HTTPS 步骤同方式 A 的 4、5。
---
## 三、修改二级域名
生成的 `nginx-pipi-assets.conf` 里默认是 `server_name assets.yourdomain.com;`
- **方式 A**:在服务器上编辑 `scripts/nginx-pipi-assets.conf` 再拷贝到 `/etc/nginx/sites-available/`,或直接编辑 `/etc/nginx/sites-available/pipi-assets`
- **方式 B**:本机生成配置后编辑再上传,或在服务器上编辑 `/etc/nginx/sites-available/pipi-assets`
改完后执行:
```bash
sudo nginx -t && sudo systemctl reload nginx
```
---
## 四、后续更新资源
- **方式 A**:在服务器上进入 `voice-production` 目录,执行 `git pull`,再执行 `pnpm run deploy-assets:server`;若在服务器上跑生成脚本,先 `pnpm run generate-voice` 等再执行 `deploy-assets:server`
- **方式 B**:本机重新生成/拷贝后,再执行一次 `rsync` 同步到服务器。
---
## 五、常用命令速查
| 说明 | 命令 |
| --------------- | ---------------------------------------- |
| 测试 Nginx 配置 | `sudo nginx -t` |
| 重载 Nginx | `sudo systemctl reload nginx` |
| 查看 Nginx 状态 | `sudo systemctl status nginx` |
| 查看站点日志 | `sudo tail -f /var/log/nginx/access.log` |
---
## 六、验证
- 健康检查:`https://你的二级域名/health` 应返回 `ok`
- 角色 JSON`https://你的二级域名/char/char_introduce.json` 应返回 JSON。
- 语音:`https://你的二级域名/voice/xxx.mp3` 应能播放或下载。