zikai 7c193ca46e 前端整理: 合并文件管理页 + 新增导航页
1. 合并 files-page 与 pdf-admin 为统一文件管理页 /api/files-page:
   - 新增 GET /api/admin/files/with-pdf 接口,以 uploaded_files 为基础,
     用 pdf_jobs.source_file_id / output_file_id 内存匹配,为关联文件标注
     转换状态、用户软删标记与角色(源epub/产物PDF)
   - PdfJobOut 补 source_file_id / output_file_id 字段
   - file_browser 新增 PDF 任务列(状态徽标/软删标记/硬删任务按钮)
   - 删除 /api/pdf-admin 路由及 static/pdf_admin.* 三个文件

2. 新增导航页 /api/index,卡片式收集所有页面入口;
   各子页(upload/whiteboard/system_status/files-page)脚注加返回导航链接

3. 更新 docs/routes.md、docs/configuration.md 同步说明

测试: pytest tests/test_pdf_service.py 7 passed; 手动校验各页面路由与合并接口响应
2026-07-28 14:04:12 +08:00
2026-06-23 16:17:31 +00:00
2026-06-23 16:17:31 +00:00

zTools2 - 个人 Web 服务后端

基于 FastAPI 的个人 Web 服务后端,提供文件上传/浏览/下载、共享记事本实时协作、主机监控、SFTP 暂存、反向隧道、PDF 转换。采用 Spring 风格分层架构controller -> service -> dao -> ORM model -> MySQL自带 API 文档。

所有入口统一挂在 /api/ 前缀下,前端用同源相对路径调用,无需区分 dev/prod。前端子项目timeTableFixzPDF_packagezWhiteBoard)经 zMainPage 构建期组件 import 集成,生产由 apache2 静态托管 + /api 反代到本服务。

项目结构

zTools2/
├── app/
│   ├── main.py              # FastAPI 应用工厂、路由注册、生命周期reaper
│   ├── config.py            # 从 config.yaml 加载的类型化 Settingspydantic-settings
│   ├── database.py          # SQLAlchemy 引擎/Session/Base/get_db 依赖 + schema 校验
│   ├── security.py          # Basic Authrequire_docs_auth常量时间比较
│   ├── controllers/         # 路由层file/system/chunk/tunnel/whiteboard/pdf/admin
│   ├── services/            # 业务层Upload/ChunkUpload/System/Whiteboard/Tunnel/Pdf/sftp
│   ├── dao/                 # 数据访问层:唯一发 SQL 的层SQLAlchemy ORM 参数化)
│   ├── models/              # ORM 实体UploadedFile/UploadSession/Whiteboard/TunnelSession/PdfJob
│   ├── schemas/             # pydantic 请求/响应 DTO
│   ├── views/               # 服务端渲染 HTML系统状态页、上传页
│   ├── static/              # 前端静态资源
│   └── scripts/init_db.py   # 数据库初始化(建库建账、随机密码写回 config.yaml
├── sql/schema.sql           # 建表 DDL参考实际由 ORM 自动建表)
├── config.example.yaml      # 配置模板(含注释)
├── config.yaml              # 实际配置git-ignored含密码
├── requirements.txt
├── setup.sh                 # 一次性初始化venv + 依赖 + 建库 + SFTP 密钥
├── start.sh / stop.sh       # 启停 HTTP127.0.0.1:6867+ SFTP2022
└── deploy/                  # systemd 持久化部署

请求流程controller -> service -> dao -> ORM model -> MySQL。DB Session 由 get_db 依赖注入。

外部依赖

说明
Python ≥ 3.11(用 .venv
MySQL 8.x独立库 zikai_filesvc,由 setup.sh 建账)
Apache2 反向代理对外提供 HTTPS服务本身只绑 127.0.0.1:6867
系统库 libpango/cairoweasyprint PDF 转换)、build-essentialbcrypt/asyncssh 编译)

Apache2 反向代理配置

服务只绑 127.0.0.1:6867,通过 Apache 对外提供 HTTPS。安装模块并配置 vhost

a2enmod ssl proxy proxy_http proxy_wstunnel rewrite headers

创建 /etc/apache2/sites-available/f.zikai.wang.conf(关键部分):

<VirtualHost *:443>
    ServerName f.zikai.wang
    SSLEngine on
    SSLCertificateFile     /etc/letsencrypt/live/f.zikai.wang/fullchain.pem
    SSLCertificateKeyFile  /etc/letsencrypt/live/f.zikai.wang/privkey.pem

    ProxyPreserveHost On
    ProxyPass        /fdata !
    # 所有 zTools2 入口(页面/静态/探针/WS/API统一在 /api/ 下,一条规则即可;
    # WebSocket 走 /api/ws/wb/{id},靠 proxy_wstunnel 透传 Upgrade 头
    ProxyPass        /api/ http://127.0.0.1:6867/api/
    ProxyPassReverse /api/ http://127.0.0.1:6867/api/
    ProxyTimeout 300
</VirtualHost>
a2ensite f.zikai.wang
systemctl reload apache2

防火墙:放开 443HTTPS与 2022SFTP。6867 不对外(仅 loopback大文件上传Apache 全局 Timeout 300,慢链路建议走分片上传(/api/upload)或 SFTP。

从零安装Ubuntu 22.04+

1. 安装系统依赖

apt update
apt install -y python3-venv python3-pip mysql-server apache2 \
    libssl-dev build-essential  # build-essential 给 bcrypt/asyncssh 编译
# PDF 转换依赖 weasyprint需 pango/cairo 系统库:
apt install -y libpango-1.0-0 libpangoft2-1.0-0 libcairo2 libgdk-pixbuf-2.0-0

2. 获取代码并初始化

git clone <repo> /root/zikai
cd /root/zikai/zTools2
./setup.sh    # 创建 .venv + 装依赖 + 复制 config.yaml + 建 MySQL 库账 + 生成 SFTP 密钥

3. 配置凭据

编辑 config.yaml(详见 docs/configuration.mddocs.username/password(管理页 Basic Authsftp.users[].password_hashbcrypt、可选 tunnel.users[]

4. 启动

./start.sh    # 启动 HTTP(127.0.0.1:6867) + SFTP(0.0.0.0:2022)
./stop.sh     # 停止

5. 持久化部署systemd

./deploy/install-systemd.sh     # 安装并启动 ztools2 服务(开机自启)
systemctl status ztools2
journalctl -u ztools2 -f

与 zMainPage 整体部署配合systemd 管后端,zMainPage/deploy.sh --no-restart 部署前端。

了解更多

Description
No description provided
Readme 340 KiB
Languages
Python 75.4%
JavaScript 13.7%
CSS 5.5%
Shell 3.2%
HTML 2.2%