Files
hometown/docs/部署说明.md
2026-03-07 23:35:08 +08:00

102 lines
3.2 KiB
Markdown
Raw Permalink 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.
# 前后端分离部署说明
项目支持**前后端分离**部署:前端为纯静态资源,后端为独立 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` 保持为 `""` 即可。