# 🎬 豆瓣电影信息收集站 — 宝塔面板部署教程

---

## 一、上传项目文件到服务器

1. 电脑上把 `collect` 文件夹打包成 **collect.zip**
2. 登录宝塔 → **文件** → 进入 `/www/wwwroot/`
3. 点 **上传** → 选 `collect.zip` → 上传完右键 **解压**

解压后确认目录结构：

```
/www/wwwroot/collect/
├── package.json
├── server.js
└── public/
    └── index.html
```

---

## 二、安装 Node.js 环境

软件商店里需要装**两个东西**（缺一不可）：

| 顺序 | 搜索关键词 | 安装内容 | 作用 |
|------|-----------|----------|------|
| 先装 | Node.js版本管理器 | 选 v20.x | 让终端能用 `node` `npm` 命令 |
| 再装 | PM2管理器 | 最新版就行 | 让项目24小时运行不挂 |

---

## 三、让终端能识别 node / npm / pm2

宝塔装的东西在 `/www/server/nodejs/` 下，不在系统 PATH。先修复：

```bash
# 1. 看装的是哪个版本
ls /www/server/nodejs/

# 显示类似 v20.18.0，记下这个版本号，下面每步替换成你的

# 2. 创建软链接
ln -sf /www/server/nodejs/v20.18.0/bin/node  /usr/bin/node
ln -sf /www/server/nodejs/v20.18.0/bin/npm   /usr/bin/npm

# 3. 验证
node -v    # 应显示 v20.18.0
npm -v     # 应显示 10.8.2

# 4. 全局装 pm2（用 npm 装，别用宝塔自带的）
npm install -g pm2
ln -sf /www/server/nodejs/v20.18.0/bin/pm2  /usr/bin/pm2

# 5. 验证
pm2 -v     # 应显示版本号
```

---

## 四、安装项目依赖

```bash
cd /www/wwwroot/collect

# 如果之前装过报错的依赖，先清理
rm -rf node_modules package-lock.json

# 安装（只依赖 express 一个包，不会有兼容问题）
npm install
```

输出应该类似：

```
added 65 packages in 3s
found 0 vulnerabilities
```

---

## 五、用 PM2 启动项目

### 方式1：宝塔 PM2管理器 UI（推荐）

1. 宝塔 → **软件商店** → PM2管理器 → **设置**
2. 点 **添加项目**：

| 字段 | 值 |
|------|-----|
| 启动文件 | `/www/wwwroot/collect/server.js` |
| 运行目录 | `/www/wwwroot/collect` |
| 项目名称 | `douban-movie` |
| 端口 | `3000` |

3. 点 **添加**

> ⚠️ 如果添加时报 `pm2: command not found`，说明第三节的第4步软链接没做对，回去重做。

### 方式2：终端直接启动

```bash
cd /www/wwwroot/collect
pm2 start server.js --name douban-movie
pm2 save
pm2 startup
```

---

## 六、放行端口

### 宝塔安全面板

宝塔 → **安全** → 添加端口 `3000` → 备注"电影站" → **放行**

### 云服务器安全组

如果你用阿里云/腾讯云/华为云，去云控制台安全组添加 `3000` 端口。

---

## 七、验证

浏览器访问 `http://你的服务器IP:3000`，能看到电影页面就成功了。

---

## 八、绑定域名 + HTTPS（可选）

### 8.1 添加站点

1. 宝塔 → **网站** → **添加站点**

| 字段 | 值 |
|------|-----|
| 域名 | `movie.你的域名.com` |
| 根目录 | `/www/wwwroot/collect/public` |

### 8.2 配置反向代理

1. 站点列表 → **设置** → **反向代理** → **添加反向代理**

| 字段 | 值 |
|------|-----|
| 代理名称 | `api` |
| 目标URL | `http://127.0.0.1:3000` |
| 发送域名 | `$host` |

### 8.3 一键 SSL

1. 站点设置 → **SSL** → **Let's Encrypt**
2. 勾选域名 → **申请**
3. 开启 **强制HTTPS**

之后访问 `https://movie.你的域名.com` 即可。

---

## 九、日常维护

| 操作 | 在哪点 |
|------|--------|
| 重启 | PM2管理器 → 设置 → 找到项目 → 重启 |
| 看日志 | PM2管理器 → 设置 → 找到项目 → 日志 |
| 修改代码 | 文件管理 → 编辑文件 → 保存 → 重启项目 |
| 更新依赖 | 终端 `cd /www/wwwroot/collect && npm install` |

---

## 十、常见报错速查

| 报错 | 原因 | 解决 |
|------|------|------|
| `npm: command not found` | Node没链接到系统 | 重做第三节第2步 |
| `pm2: command not found` | pm2没链接 | 重做第三节第4步 |
| `E404 Not Found cheerio` | 用了淘宝镜像 | 已去掉cheerio，不影响了 |
| `EBADENGINE` warning | Node版本稍低 | 警告不影响，可忽略 |
| PM2状态显示"未启动" | 端口被占/代码报错 | 点日志看详细错误 |
| 页面能打开但没数据 | API不通 | 打开F12看Console报错 |
