项目概览

目录与角色

关键目录速览

路径职责
src/前端页面与组件(App.vuePageCard.vueEditModal.vueAuthModal.vue
scripts/upload-server.mjsExpress 上传/删除/编辑/重建 API,写入 data/pages.jsonpublic/data/pages.json,并可触发 Docker 构建
scripts/rebuild.sh简化的手动构建脚本,调用 docker compose builder
data/pages.json线上/本地共用的页面索引源,构建时同步到 public/data/pages.json 与宿主静态目录
docker-compose.yml定义 builderupload 服务的挂载、端口、环境变量
Dockerfilemulti-stage:基础镜像 -> 依赖层 -> upload 运行层

前端特性

后端(upload server)概述

接口与数据约定

API 列表

方法路径功能认证
POST/api/upload上传 HTML,写入 pages.jsonx-upload-token 或 Basic 密码
POST/api/upload-local已有 HTML(scp)登记到 pages.json同上
POST/api/delete删除 HTML + 从 pages.json 移除同上
POST/api/edit更新标题/描述/首图同上
POST/api/rebuild触发 builder 构建同上
GET/api/health健康检查

pages.json 结构

字段说明
url线上可访问的完整 URL
title卡片标题
description摘要文本(AI 或人工)
image首图 URL,可为空
created_atISO 时间戳,按此排序

环境变量

运行时环境变量速查

变量默认值作用
UPLOAD_PASSWORDchange-me上传、编辑、删除、重建的鉴权密码
UPLOAD_PORT8787upload 服务监听端口
HOST_STATIC_ROOT/WWW_ROOT/static宿主静态根目录(builder rsync 目标)
PAGES_DIR同上HTML 写入目录;默认落在静态根,方便直接以根路径访问
BASE_URLhttps://pages.lijie.space/生成页面 URL 的基准
HOST_PROJECT_ROOT/root/Static-Page-Server宿主仓库路径,触发 docker compose 的工作目录
SKIP_BUILD1/true/yes 时跳过自动构建
VITE_OPENAI_API_KEY前端 AI 摘要所需 Key(浏览器侧调用,注意暴露风险)
VITE_OPENAI_BASE_URLhttps://api.openai.com/v1OpenAI 兼容端点
VITE_OPENAI_MODELgpt-4o-miniChat 模型名

开发与运行

本地开发启动

启动上传服务

Docker 一键构建/服务(推荐与线上一致)

构建与发布流

  1. 前端从 data/pages.json 读取卡片;上传/编辑/删除都会同步三份 pages.json(仓库、public、宿主静态目录)。

  2. 触发 /api/rebuild 或执行 docker compose run builder

    • 安装依赖 → pnpm build → 将 dist/index.htmldist/assets/**dist/data/** rsync 到宿主静态目录(默认 /WWW_ROOT/static)。

  3. 访问:若 HTML 直接放在静态根,URL 为 BASE_URL + filename;若设定 pages 子目录,URL 为 BASE_URL/pages/<filename>

AI 摘要功能

安全与最佳实践

常见操作备忘