# 前后端分离部署说明 项目支持**前后端分离**部署:前端为纯静态资源,后端为独立 Node API,便于分别部署到静态主机与 API 服务器。 --- ## 一、目录与职责 | 类型 | 目录/文件 | 说明 | |------|-----------|------| | **前端(静态)** | `index.html`, `config.json`, `api.config.json`, `lib/`, `image/` | 可部署到 Nginx、OSS、Vercel、GitHub Pages 等 | | **后端(API)** | `server/`(含 `server.js`, `db.js`, `index.js`, `package.json`) | 单独部署到 Node 主机,仅提供 `/api/*` 接口 | --- ## 二、前端部署 1. **构建静态包**(在项目根目录): ```bash npm run build ``` 产出目录 `dist/`,内含:`index.html`, `config.json`, `api.config.json`, `lib/`, `image/`。 2. **配置 API 地址**: 将 `dist/` 部署到你的静态站点后,修改 **`dist/api.config.json`**(或部署前在根目录改好再 build): ```json { "apiBase": "https://你的API域名" } ``` - 不填或空字符串 `""` 表示与当前页面同源(例如 Nginx 反向代理了 `/api` 到后端时可用 `""`)。 - 前后端不同域时填后端根地址,例如 `https://api.example.com`(不要以 `/` 结尾)。 前端会请求 `apiBase + '/api/config'`、`apiBase + '/api/stats'` 等。 3. **上传**:将 `dist/` 内所有文件上传到静态主机或 CDN。 --- ## 三、后端部署 1. **只部署 API**:进入后端目录并安装依赖、启动: ```bash cd server npm install npm start ``` 默认端口 3000,可通过环境变量 `PORT` 修改。 数据文件为 `server/data/store.json`(首次运行自动创建,纯 JSON,无原生依赖)。 2. **生产环境建议**: - 使用 pm2、systemd 等保活。 - 如需限制跨域,设置环境变量 `CORS_ORIGIN` 为前端域名,例如: `CORS_ORIGIN=https://你的前端域名` --- ## 四、弹幕配置(后端) 弹幕**默认不显示**,由后端配置控制。 - 接口:**GET /api/config** 返回示例: ```json { "danmakuEnabled": false, "danmakuPosition": "top" } ``` - 数据来源:`server/data/store.json` 中的 `settings` 对象: - `danmaku_enabled`:`"1"` 开启弹幕,`"0"` 关闭(默认)。 - `danmaku_position`:弹幕区域位置,目前仅使用 `top`(顶部)。 **开启弹幕**:在部署后端的机器上任选一种方式: 1. 直接编辑 `server/data/store.json`,将 `settings.danmaku_enabled` 改为 `"1"`。 2. 或执行(需在 `server` 目录下): ```bash cd server node -e " const fs=require('fs'),path=require('path'); const p=path.join(process.cwd(),'data','store.json'); const s=JSON.parse(fs.readFileSync(p,'utf8')); s.settings.danmaku_enabled='1'; fs.writeFileSync(p,JSON.stringify(s,null,0)); console.log('已开启弹幕'); " ``` 前端会周期性/首次请求 `/api/config`,收到 `danmakuEnabled: true` 后显示顶部弹幕并拉取留言。 --- ## 五、本地联合运行(不分离) 在项目根目录: ```bash npm install npm start ``` 会同时提供静态资源与 `/api` 接口(根目录 `server.js` 挂载 `server/` 的 API),适合本地开发。此时 `api.config.json` 的 `apiBase` 保持为 `""` 即可。