Files
zMainPage/docs/deployment.md
zikai 66f93c67f5 feat: 新增整体部署脚本与部署指南(组件独立/整体/持久化三模式)
- deploy.sh:整体部署,构建 zMainPage + rsync 到 /var/www/html + 配置
  Apache 反代(/api /pdf /pdf-admin /static 等到 zTools2)+ 重启后端
- docs/deployment.md:三种部署模式文档(组件独立开发 / 整体生产 / systemd 持久化)
- README:补部署指南链接
2026-07-27 13:52:40 +08:00

149 lines
4.9 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.

# 部署指南
zPDF_package 功能涉及三个项目协同:**zMainPage**父站Vue3 静态站)、**zTools2**(后端 API + PDF 页面)、**zPDF_package**PDF 转换前端源码zMainPage 子模块)。提供三种部署模式,按需选用。
## 拓扑
```
浏览器 -> Apache(:80)
├── 静态文件 /var/www/html zMainPage 构建产物:主页 + 页签)
└── 反代 -> zTools2(127.0.0.1:6867)
├── /api/pdf/* PDF 转换 APIcookie 用户)
├── /pdf PDF 转换页面iframe 嵌入源)
├── /pdf-admin PDF 管理页Basic Auth
├── /static/pdf* 前端静态资源
└── MySQL(3306) + uploads/
```
PDF 页签 = zMainPage 用 iframe 嵌入 zTools2 的 `/pdf` 页面同源cookie 第一方生效)。
---
## 模式一:组件独立部署(开发/调试)
各组件独立运行,互不依赖部署,适合开发调试。
### 1. zTools2 后端独立运行
```bash
cd zTools2
./setup.sh # 首次venv + 依赖 + 建库 + SFTP 密钥
./start.sh # 启动 HTTP(127.0.0.1:6867) + SFTP(2022)
# 或python -m uvicorn app.main:app --host 127.0.0.1 --port 6867
```
访问http://127.0.0.1:6867/pdfPDF 页面、http://127.0.0.1:6867/docsAPI 文档)。
### 2. zPDF_package 前端独立运行
```bash
cd zPDF_package
npm install
npm run dev # http://localhost:5175
```
`vite.config.js` 已配代理:`/api/pdf/*``/api/admin/pdf/*` 转发到 `127.0.0.1:6867`(需 zTools2 在跑)。
### 3. zMainPage 独立运行
```bash
cd zMainPage
git submodule update --init --recursive # 含 timeTableFix / z449 / zPDF_package
npm install
(cd third_party/timeTableFix && npm install)
(cd third_party/z449 && npm install)
npm run dev # http://localhost:5173
```
> 独立模式下 PDF 页签的 iframe 指向 `https://f.zikai.wang/pdf`(线上),如需指向本地 zTools2改 `src/config/app.config.js` 的 `pdf.baseUrl` 为 `http://127.0.0.1:6867` 后重新 `npm run dev`。
---
## 模式二:整体部署(生产,一次性)
一条命令构建并部署全部组件到生产。**前提**zMainPage 与 zTools2 在同一主机的同级目录。
```bash
cd zMainPage
./deploy.sh # 构建 + 部署 + 配置 Apache 反代 + 重启 zTools2
./deploy.sh --no-restart # 仅更新文件,不重启 zTools2如 zTools2 由 systemd 管理)
```
`deploy.sh` 做的事:
1. 构建 zMainPage含子模块rsync 到 `/var/www/html`
2. 写入 `.htaccess`SPA history 回退)
3. 配置 Apache vhost`/etc/apache2/sites-available/zmainpage.conf`)反代 `/api` `/pdf` `/pdf-admin` `/static` 等到 `127.0.0.1:6867`
4. 重启 zTools2除非 `--no-restart`
部署后访问 http://localhost/ 即主页PDF 页签 iframe 同源加载 `/pdf`
> 已有 HTTPS vhost 时:`deploy.sh` 不会覆盖(仅首次写入)。手动在现有 vhost 加 `ProxyPass /pdf http://127.0.0.1:6867/pdf` 等规则即可。
---
## 模式三持久化部署systemd开机自启 + 崩溃重启)
zTools2 后端需长期运行PDF 转换是异步后台任务)。用 systemd 管理实现开机自启与崩溃自动重启。
### 安装 systemd 服务
```bash
cd zTools2
./deploy/install-systemd.sh
```
脚本自动:
- 用实际路径填充 `deploy/ztools2.service` 模板(自动检测 `.venv/bin/uvicorn` 或系统 `uvicorn`
- 写入 `/etc/systemd/system/ztools2.service`
- `systemctl enable --now ztools2`(开机自启 + 立即启动)
### 运维命令
```bash
systemctl status ztools2 # 状态
systemctl restart ztools2 # 重启(更新代码后)
systemctl stop ztools2 # 停止
journalctl -u ztools2 -f # 实时日志
```
### 卸载
```bash
sudo systemctl disable --now ztools2
sudo rm /etc/systemd/system/ztools2.service
sudo systemctl daemon-reload
```
### 与整体部署配合
生产推荐:**systemd 管理 zTools2 + deploy.sh 部署前端**。
```bash
# 首次
cd zTools2 && ./setup.sh && ./deploy/install-systemd.sh # 后端持久化
cd ../zMainPage && ./deploy.sh --no-restart # 前端部署不重启后端systemd 管)
# 后续更新前端
cd zMainPage && ./deploy.sh --no-restart
# 后续更新后端代码
cd zTools2 && sudo systemctl restart ztools2
```
---
## 环境要求
| 项 | 要求 |
|----|------|
| OS | Ubuntu 22.04+systemd + apache2 |
| Python | ≥ 3.10(本仓开发用 3.14,需 SQLAlchemy ≥ 2.0.37 |
| Node.js | ≥ 18 |
| MySQL | 8.x |
| Apache | 2.4(启用 proxy / proxy_http / rewrite / headers |
| weasyprint 系统库 | libpango-1.0-0 / libpangoft2-1.0-0 / libcairo2 / libgdk-pixbuf-2.0-0 |
## 防火墙
- 80HTTP/ 443HTTPS对外
- 6867仅 loopback经 Apache 反代,不对外)
- 2022SFTP按需对外