# 🎬 豆瓣电影信息收集站 — 服务器部署教程

适用系统：Linux（CentOS / Ubuntu / Debian）

---

## 一、项目文件确认

部署前，确保服务器上有以下文件：

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

---

## 二、上传文件到服务器

### 方式1：使用 scp（推荐）

在你本地电脑打开终端，执行：

```bash
# 先打包
cd ~/Desktop
tar -czf collect.tar.gz collect/

# 上传到服务器（替换为你的服务器IP和路径）
scp collect.tar.gz root@你的服务器IP:/home/

# 登录服务器
ssh root@你的服务器IP

# 解压
cd /home
tar -xzf collect.tar.gz
cd collect
```

### 方式2：使用 FTP 工具

用 FileZilla、WinSCP 等工具，把 `collect` 整个文件夹拖到服务器的 `/home/` 或 `/var/www/` 目录下。

---

## 三、安装 Node.js 环境

### CentOS 系统

```bash
# 安装 Node.js 20.x
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo yum install -y nodejs

# 验证安装
node -v    # 应显示 v20.x.x
npm -v     # 应显示 10.x.x
```

### Ubuntu / Debian 系统

```bash
# 安装 Node.js 20.x
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

# 验证安装
node -v
npm -v
```

---

## 四、安装依赖并启动

```bash
# 进入项目目录
cd /home/collect

# 安装依赖
npm install

# 测试启动（前台运行，Ctrl+C 可停止）
node server.js
```

如果看到以下输出，说明启动成功：

```
🎬 豆瓣电影信息收集站已启动！
📍 访问地址: http://localhost:3000
📡 API地址:  http://localhost:3000/api/movies
📊 已收录 33 部电影
```

此时在浏览器访问 `http://你的服务器IP:3000` 应该能看到了。

> ⚠️ 如果访问不了，检查服务器防火墙是否开放了 3000 端口（见第七节）。

---

## 五、使用 PM2 后台运行（生产环境必备）

`node server.js` 关掉终端就停了，需要用 PM2 守护进程。

```bash
# 全局安装 PM2
npm install -g pm2

# 用 PM2 启动项目
cd /home/collect
pm2 start server.js --name douban-movie

# 设置开机自启
pm2 startup
# 执行上面命令输出的那行 sudo 命令
pm2 save

# 常用 PM2 命令
pm2 status          # 查看运行状态
pm2 logs douban-movie  # 查看日志
pm2 restart douban-movie  # 重启
pm2 stop douban-movie     # 停止
```

---

## 六、配置 Nginx 反向代理（推荐）

直接用 `IP:3000` 访问不够优雅，用 Nginx 可以绑定域名 + 配置 HTTPS。

### 6.1 安装 Nginx

```bash
# CentOS
sudo yum install -y nginx

# Ubuntu/Debian
sudo apt-get install -y nginx
```

### 6.2 创建 Nginx 配置

```bash
sudo nano /etc/nginx/conf.d/douban-movie.conf
```

写入以下内容：

```nginx
server {
    listen 80;
    server_name 你的域名.com www.你的域名.com;   # 如果有域名就填，没有就填服务器IP

    # 如果没域名，把上面一行改成：
    # server_name _;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

### 6.3 启动 Nginx

```bash
# 测试配置是否正确
sudo nginx -t

# 启动 Nginx
sudo systemctl start nginx
sudo systemctl enable nginx   # 开机自启

# 重启 Nginx（修改配置后执行）
sudo systemctl restart nginx
```

配置完成后，直接访问 `http://你的服务器IP` 或 `http://你的域名.com` 即可，不需要加 `:3000` 端口了。

---

## 七、防火墙配置

### 如果使用 Nginx（只需开放 80/443）

```bash
# firewalld（CentOS）
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

# ufw（Ubuntu）
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
```

### 如果不使用 Nginx（直接暴露 3000 端口）

```bash
# firewalld
sudo firewall-cmd --add-port=3000/tcp --permanent
sudo firewall-cmd --reload

# ufw
sudo ufw allow 3000/tcp
```

### 云服务器安全组

如果你用的是阿里云/腾讯云/华为云等，还需要在**云控制台的安全组**中添加入站规则：

| 端口 | 协议 | 来源 | 说明 |
|------|------|------|------|
| 80 | TCP | 0.0.0.0/0 | HTTP（Nginx） |
| 443 | TCP | 0.0.0.0/0 | HTTPS（Nginx+SSL） |
| 3000 | TCP | 0.0.0.0/0 | 直连端口（不用Nginx时） |

---

## 八、配置 HTTPS（SSL 证书）

有域名的话，建议配置免费 SSL：

```bash
# 安装 certbot
# CentOS
sudo yum install -y certbot python3-certbot-nginx

# Ubuntu/Debian
sudo apt-get install -y certbot python3-certbot-nginx

# 自动配置 SSL
sudo certbot --nginx -d 你的域名.com -d www.你的域名.com

# 证书会自动续期，可以手动测试续期：
sudo certbot renew --dry-run
```

---

## 九、部署完整流程总结

以下是从零开始的完整操作清单：

```bash
# === 第一步：本地打包上传 ===
cd ~/Desktop
tar -czf collect.tar.gz collect/
scp collect.tar.gz root@你的服务器IP:/home/

# === 第二步：服务器上解压 ===
ssh root@你的服务器IP
cd /home
tar -xzf collect.tar.gz
cd collect

# === 第三步：安装 Node.js（如已安装跳过）===
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

# === 第四步：安装依赖 ===
npm install

# === 第五步：PM2 启动 ===
npm install -g pm2
pm2 start server.js --name douban-movie
pm2 startup   # 按提示执行输出的命令
pm2 save

# === 第六步：Nginx（可选）===
sudo apt-get install -y nginx
# 编辑 /etc/nginx/conf.d/douban-movie.conf
sudo nginx -t
sudo systemctl restart nginx

# === 第七步：开放端口 ===
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
```

---

## 十、故障排查

| 问题 | 检查方式 |
|------|----------|
| 访问不了 `IP:3000` | `netstat -tlnp` 看 3000 端口是否在监听；检查云安全组 |
| PM2 状态显示 `errored` | `pm2 logs douban-movie` 查看错误日志 |
| Nginx 502 错误 | 确认 Node 服务正在运行：`pm2 status` |
| 页面空白 | 浏览器 F12 → Console 看是否有 JS 报错 |
| 豆瓣图片加载不出 | 豆瓣有防盗链，部分图片可能不显示，属于正常情况 |

---

完成后，访问你的服务器就能看到电影信息站了 🎉
