宝塔面板部署指南
GEO Wiki Pro 宝塔面板完整部署指南,从安装面板到配置 Nginx 反向代理,含踩坑记录
# 宝塔面板部署指南
> GEO Wiki Pro 宝塔面板完整部署指南,从安装面板到配置 Nginx 反向代理,含踩坑记录
---
## 概述
宝塔面板是国内常用的服务器管理工具,提供图形化界面管理网站、数据库、SSL 证书等。本文介绍如何在宝塔面板上部署 GEO Wiki Pro。
---
## 前置条件
| 条件 | 说明 |
|------|------|
| 服务器 | Linux 服务器(推荐 Ubuntu 20.04+ / CentOS 7+) |
| 宝塔面板 | 已安装宝塔面板 |
| Node.js | v18 或更高版本 |
| PM2 | 用于进程管理 |
---
## 第一步:安装 Node.js
通过宝塔面板的 **软件商店** → **Node.js 版本管理器** 安装 Node.js 18+。
或使用命令行:
```bash
# 安装 Node.js 18
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# 验证安装
node -v # 应显示 v18.x.x
npm -v # 应显示 9.x.x
```
---
## 第二步:上传代码
1. 在宝塔面板创建网站目录:`/www/wwwroot/geowiki`
2. 上传 GEO Wiki Pro 代码到该目录
3. 解压代码文件
```bash
cd /www/wwwroot/geowiki
npm install --production
```
---
## 第三步:配置环境变量
创建 `.env` 文件:
```bash
cat > .env << 'EOF'
NODE_ENV=production
PORT=3002
JWT_SECRET=your-secret-key-here-min-32-chars
BASE_URL=https://your-domain.com
EOF
```
::: warning
`JWT_SECRET` 必须设置,且长度至少 32 字符。生产环境请使用随机生成的强密钥。
:::
---
## 第四步:启动服务
使用 PM2 管理进程:
```bash
# 安装 PM2
npm install -g pm2
# 启动服务
pm2 start server/index.js --name geo-wiki
# 设置开机自启
pm2 save
pm2 startup
```
验证服务运行:
```bash
pm2 status
curl http://localhost:3002/api/v1/health
```
---
## 第五步:配置 Nginx 反向代理
在宝塔面板 → **网站** → **设置** → **反向代理**:
| 配置项 | 值 |
|--------|-----|
| 代理名称 | geowiki |
| 目标 URL | http://127.0.0.1:3002 |
| 发送域名 | $host |
或手动编辑 Nginx 配置:
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:3002;
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;
}
}
```
---
## 第六步:配置 SSL 证书
在宝塔面板 → **网站** → **SSL** → 申请免费 Let's Encrypt 证书。
---
## 踩坑记录
### 1. PM2 启动后立即退出
**原因**:Node.js 版本不兼容或缺少依赖。
**解决**:
```bash
# 检查日志
pm2 logs geo-wiki
# 确保 Node.js 版本 >= 18
node -v
# 重新安装依赖
npm install --production
```
### 2. Nginx 502 Bad Gateway
**原因**:Node.js 服务未启动或端口不匹配。
**解决**:
```bash
# 检查服务是否运行
pm2 status
# 检查端口是否正确
netstat -tlnp | grep 3002
```
### 3. 上传文件失败
**原因**:Nginx 上传大小限制。
**解决**:在 Nginx 配置中添加:
```nginx
client_max_body_size 50M;
```
### 4. Cookie / 登录问题
**原因**:Nginx 未正确传递 Cookie。
**解决**:确保配置了 `proxy_set_header Host $host;`。
### 5. 静态文件 404
**原因**:Nginx 优先匹配了静态文件路径。
**解决**:确保 SPA fallback 配置正确:
```nginx
location / {
proxy_pass http://127.0.0.1:3002;
try_files $uri $uri/ /index.html;
}
```
### 6. HSTS 导致 SSL 错误
**原因**:Helmet 默认开启 HSTS,HTTP 环境下浏览器强制升级 HTTPS。
**解决**:在 `.env` 中设置 `ENABLE_HSTS=false`(如果未使用 SSL)。
---
## 常用命令
```bash
# 查看状态
pm2 status
# 查看日志
pm2 logs geo-wiki
# 重启服务
pm2 restart geo-wiki
# 停止服务
pm2 stop geo-wiki
# 删除服务
pm2 delete geo-wiki
```
---
## 相关文档
- [Docker 部署指南](/docs/docker-deployment)
- [5 分钟快速上手](/docs/quick-start)
- [安全机制](/docs/security)