# Linux 环境启动说明

本文说明在 Linux 服务器上如何启动本项目（联合模式与前后端分离模式）。

---

## 环境要求

- **Node.js** >= 14（推荐 18 或 20 LTS）
- 可选：Python 3（仅在使用 `scripts/` 下 720 云提取脚本时需要）

安装 Node（示例，以实际环境为准）：

```bash
# 使用 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 18
nvm use 18

# 或使用系统包管理器
# Ubuntu/Debian: sudo apt install nodejs npm
# CentOS: sudo yum install nodejs npm
```

---

## 方式一：联合启动（前后端同机、单端口）

适合本机或单台服务器同时提供页面和 API，访问一个端口即可。

1. 上传项目到服务器（或 `git clone`），进入项目根目录：

   ```bash
   cd /path/to/720yun-offline
   ```

2. 使用启动脚本（推荐）：

   ```bash
   chmod +x start.sh
   ./start.sh
   ```

   或在当前终端前台运行：

   ```bash
   bash start.sh
   ```

3. 或手动执行：

   ```bash
   npm install
   npm start
   ```

4. 默认端口 **3000**。修改端口可设置环境变量后再启动：

   ```bash
   export PORT=8080
   ./start.sh
   ```

5. 浏览器访问：`http://服务器IP:3000`（或你设置的端口）。

**说明**：`start.sh` 会先执行根目录 `npm install`，再执行 `node server.js`，同时提供静态页面和 `/api` 接口。

---

## 方式二：前后端分离启动

适合前端、后端分别部署（如前端 Nginx、后端 Node），或需要单独调试 API 时使用。

### 1. 启动后端 API

在项目根目录执行：

```bash
chmod +x start-api.sh
./start-api.sh
```

或手动：

```bash
cd server
npm install
npm start
```

- 默认端口以 **start-api.sh** 内为准（如 5599），若与联合模式同机需避免端口冲突。
- 修改端口：`PORT=3001 ./start-api.sh` 或 `cd server && PORT=3001 npm start`。
- 数据文件：`server/data/store.json`（自动创建）。
- **重要**：前后端分离时，前端 **api.config.json** 的 `apiBase` 必须填后端完整地址（含端口），例如 `"http://你的域名或IP:5599"`，否则页面无法请求统计/弹幕等接口。
- 生产环境建议用 **pm2** 保活，例如：
  ```bash
  cd server && npm install && PORT=5599 npx pm2 start index.js --name pano-api
  ```

### 2. 启动前端（静态资源）

**选项 A：用脚本构建并临时预览**

```bash
chmod +x start-front.sh
./start-front.sh
```

- 会执行 `npm run build` 生成 `dist/`，再用静态服务托管 `dist/`，默认端口 **8080**。
- 修改端口：`FRONT_PORT=8080 ./start-front.sh`。
- 此时前端与后端分离，需在 **根目录 `api.config.json`**（构建会复制到 dist）中设置 `apiBase` 为后端地址**且端口与 start-api.sh 一致**，例如后端端口 5599 则填 `"http://你的域名或IP:5599"`，否则页面无法请求到统计/弹幕等接口。

**选项 B：部署到 Nginx**

1. 在项目根目录执行 `npm run build`。
2. 将 `dist/` 内所有文件拷贝到 Nginx 站点目录。
3. 在 Nginx 中配置该目录为 root。若 API 同域并反代到后端（如 `proxy_pass http://127.0.0.1:5599`），则 `api.config.json` 的 `apiBase` 可留空 `""`；否则必须填后端完整地址（含端口）。

---

## 脚本说明

| 脚本 | 作用 |
|------|------|
| **start.sh** | 联合启动：根目录安装依赖并启动 `server.js`，同时提供静态 + API（默认 3000）。 |
| **start-api.sh** | 仅启动后端：进入 `server/` 安装依赖并启动 API（默认 3000）。 |
| **start-front.sh** | 构建前端到 `dist/` 并启动静态服务预览（默认 8080），需自行配置 `api.config.json` 指向后端。 |

所有脚本均可在 Linux 下直接执行，需先 `chmod +x 脚本名`。

---

## 常见问题

- **端口被占用**：修改 `PORT`（联合/后端）或脚本内前端端口后再启动。
- **无权限监听 80**：使用 3000/8080 等高位端口，或用 Nginx 反代。
- **跨域**：前后端分离且不同域时，后端已设置 CORS；可限制来源：在启动后端前设置 `CORS_ORIGIN=https://你的前端域名`。
