Files
platform-pipi/packages/voice-production/docs/1Panel-OpenResty部署pipi-assets.md
T
2026-02-09 13:30:43 +08:00

202 lines
7.7 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.
# 使用 1Panel + OpenResty 部署 pipi-assets
将 voice-production 的静态资源(voice、char、后续 image)通过 1Panel 安装的 OpenResty 对外提供,并绑定二级域名。OpenResty 与 Nginx 配置兼容,可直接使用本项目生成的配置。
---
## 一、前置条件
- 服务器已安装 [1Panel](https://1panel.cn/)
- 已通过 1Panel **应用商店** 安装 **OpenResty**
- 项目代码在服务器上(如 `/home/joey/sites/platform-pipi`),或能在本机执行部署脚本并同步到服务器
1Panel 默认安装目录为 `/opt/1panel`,下文中 OpenResty 相关路径均以此为准;若你的 1Panel 安装在其他目录,请替换为实际路径。
---
## 二、1Panel 中 OpenResty 的目录约定
OpenResty 在 1Panel 中以容器方式运行,宿主机与容器路径对应关系如下:
| 用途 | 宿主机路径(示例) | 容器内路径 |
|--------------|--------------------|------------|
| 站点配置片段 | `.../openresty/conf/conf.d/` | `/usr/local/openresty/nginx/conf/conf.d/` |
| 网站根目录 | `.../openresty/www/` | `/www` |
完整宿主机路径(1Panel 默认):
- 配置目录:`/opt/1panel/apps/openresty/openresty/conf/conf.d/`
- 网站目录:`/opt/1panel/apps/openresty/openresty/www/`
我们将把 pipi-assets 放在网站目录下,例如:`www/pipi-assets`,容器内访问为 `/www/pipi-assets`
---
## 三、部署静态资源到 OpenResty 可访问的目录
### 3.1 确定目标目录
在**宿主机**上,使用 1Panel OpenResty 的网站目录下的子目录作为发布目录(请按你的 1Panel 安装路径调整):
```bash
# 1Panel 默认安装目录为 /opt/1panel,若不同请修改
OPENRESTY_WWW="/opt/1panel/apps/openresty/openresty/www"
TARGET="${OPENRESTY_WWW}/pipi-assets"
sudo mkdir -p "$TARGET"
sudo chown -R $USER:$USER "$TARGET"
```
记下 `TARGET` 的取值(下文中称为「pipi-assets 宿主机路径」),后续部署脚本会用到。
### 3.2 方式 A:在服务器上执行部署脚本(推荐)
项目已在服务器上时(如 `/home/joey/sites/platform-pipi`):
```bash
cd /home/joey/sites/platform-pipi/packages/voice-production
pnpm install
# 将 data/ 拷贝到 OpenResty 的 www/pipi-assets
node scripts/deploy-assets.js --target /opt/1panel/apps/openresty/openresty/www/pipi-assets
```
请将 `--target` 改为你在 3.1 中使用的实际路径。
### 3.3 方式 B:本机生成后同步到服务器
在本机执行:
```bash
cd platform-pipi/packages/voice-production
pnpm run deploy-assets:local
rsync -avz --delete ./pipi-assets/ 用户@服务器IP:/opt/1panel/apps/openresty/openresty/www/pipi-assets/
```
若服务器上该目录需要 root,可先同步到用户目录,再 SSH 到服务器用 root 拷贝到上述路径。
---
## 四、添加 OpenResty 站点配置
OpenResty 与 Nginx 配置兼容。有两种方式添加 pipi-assets 的 server 配置。
### 4.1 方式一:在 1Panel 中创建网站(推荐)
1. 登录 1Panel → **网站** → 点击 **创建网站**
2. 选择 **静态网站**(或仅需“运行目录”的站点类型)。
3. 填写:
- **主域名**:你的二级域名(如 `assets.yourdomain.com`)。
- **运行目录**:容器内路径,填 **`/www/pipi-assets`**(对应宿主机 `.../www/pipi-assets`)。
- 若有「网站路径」「根目录」等,同样填 **`/www/pipi-assets`**。
4. 创建完成后,在网站列表中找到该站点,进入 **配置** / **配置文件**,确认 `server` 块中:
- `root``alias` 指向 **`/www/pipi-assets`**
- 若有 `location /`,可保持或按需增加下面「推荐 location」中的缓存与跨域头。
若 1Panel 生成的默认配置已能正确访问 `/www/pipi-assets` 下的文件,可不必改;否则可把下面 4.2 的配置内容合并进去。
### 4.2 方式二:手动添加 conf.d 配置片段
在**宿主机**上创建新的配置文件(路径按 1Panel 实际安装目录调整):
```bash
sudo nano /opt/1panel/apps/openresty/openresty/conf/conf.d/pipi-assets.conf
```
写入以下内容(将 `server_name` 改为你的二级域名):
```nginx
# pipi-assets 静态资源(voice / char / image
server {
listen 80;
server_name assets.yourdomain.com;
root /www/pipi-assets;
autoindex off;
location /voice/ {
alias /www/pipi-assets/voice/;
add_header Cache-Control "public, max-age=86400";
}
location /char/ {
alias /www/pipi-assets/char/;
add_header Cache-Control "public, max-age=3600";
add_header Access-Control-Allow-Origin "*";
}
location /image/ {
alias /www/pipi-assets/image/;
add_header Cache-Control "public, max-age=86400";
}
location /health {
return 200 "ok";
add_header Content-Type text/plain;
}
}
```
注意:这里所有路径均为**容器内路径**(`/www/pipi-assets`),因为 OpenResty 在容器中运行。
---
## 五、重载 OpenResty
- **1Panel 界面**:网站 → OpenResty 工具栏 → 点击 **重载**,使新配置生效且不中断服务。
- **命令行**(若你有权限进入容器或宿主机上能执行 1Panel 管理的 OpenResty):
```bash
# 仅当 1Panel 使用 systemd 管理 OpenResty 时可能可用,否则以 1Panel 重载为准
# openresty -s reload
```
建议以 1Panel 的 **重载** 为准。
---
## 六、DNS 与 HTTPS
1. **DNS**:在域名服务商为二级域名(如 `assets.yourdomain.com`)添加 **A 记录**,指向当前服务器公网 IP。
2. **HTTPS**
- 1Panel 网站列表中,进入该站点 → **SSL** / **证书**,选择 1Panel 提供的 **Let's Encrypt** 或上传自有证书。
- 开启 HTTPS 后,OpenResty 会监听 443 并指向同一 `root`/www/pipi-assets),无需改文档中的路径。
---
## 七、使用本项目生成的 Nginx 配置(可选)
本项目 `deploy-assets.js` 生成的配置默认是给「系统 Nginx」用的,`root` 为宿主机路径。给 OpenResty 用时需把 `root` 改为容器内路径:
- 生成配置时目标仍用宿主机路径(仅用于拷贝 data):
```bash
node scripts/deploy-assets.js --target /opt/1panel/apps/openresty/openresty/www/pipi-assets
```
- 打开生成的 `scripts/nginx-pipi-assets.conf`,将其中**所有** `root` / `alias` 的路径从「宿主机路径」改为 **`/www/pipi-assets`**(或 `/www/pipi-assets/voice/` 等),再复制到 `conf.d/pipi-assets.conf` 使用。
---
## 八、验证
- 健康检查:`http://你的二级域名/health` 或 `https://...` → 应返回 `ok`。
- 角色 JSON`http://你的二级域名/char/char_introduce.json` → 应返回 JSON。
- 语音:`http://你的二级域名/voice/xxx.mp3` → 可播放或下载。
---
## 九、后续更新资源
- **方式 A**:在服务器项目目录执行
`node scripts/deploy-assets.js --target /opt/1panel/apps/openresty/openresty/www/pipi-assets`
覆盖更新 `pipi-assets` 目录内容。
- **方式 B**:本机执行 `pnpm run deploy-assets:local` 后,用 rsync 同步到服务器上述 `pipi-assets` 路径。
更新后无需重启 OpenResty,直接刷新页面即可。
---
## 十、路径与注意事项小结
| 项目 | 说明 |
|----------------|------|
| 1Panel 安装目录 | 常见为 `/opt/1panel`,以实际为准。 |
| 宿主机 pipi-assets | `.../openresty/openresty/www/pipi-assets`,部署脚本和 rsync 写这里。 |
| 容器内 root | 配置里统一用 **`/www/pipi-assets`**。 |
| 重载 | 在 1Panel 网站页对 OpenResty 使用 **重载**,不要直接改容器内文件。 |
若你使用非默认 1Panel 安装路径,将文中 `/opt/1panel` 全部替换为你的安装目录即可。