feat(deploy): 更新后端 API 域名并添加部署指南
- 将后端 API域名从 https://api.jiebanke.com 改为 https://webapi.jiebanke.com - 新增 CentOS 服务器部署指南和相关脚本 - 更新环境变量配置和 API 文档中的示例 URL
This commit is contained in:
179
BACKEND_DEPLOYMENT_GUIDE.md
Normal file
179
BACKEND_DEPLOYMENT_GUIDE.md
Normal file
@@ -0,0 +1,179 @@
|
||||
# 后端部署指南 - CentOS服务器
|
||||
|
||||
## 📋 部署概述
|
||||
|
||||
本指南详细说明如何将jiebanke后端项目部署到CentOS服务器(1.13.156.49)的 `/data/nodejs/jiebanke` 目录。
|
||||
|
||||
## 🎯 目标环境
|
||||
|
||||
- **服务器**: 1.13.156.49 (CentOS)
|
||||
- **部署目录**: /data/nodejs/jiebanke
|
||||
- **运行端口**: 3000
|
||||
- **进程管理**: PM2
|
||||
|
||||
## 📁 部署文件说明
|
||||
|
||||
### 1. 服务器初始化脚本 (`init-server.sh`)
|
||||
```bash
|
||||
# 功能: 在目标服务器上初始化Node.js环境
|
||||
# 包含: Node.js 18.x安装、PM2安装、目录创建、防火墙配置
|
||||
# 用法: ./init-server.sh
|
||||
```
|
||||
|
||||
### 2. 后端部署脚本 (`deploy-backend.sh`)
|
||||
```bash
|
||||
# 功能: 将本地后端代码部署到服务器并重启服务
|
||||
# 包含: 依赖安装、文件同步、PM2重启
|
||||
# 用法: ./deploy-backend.sh
|
||||
```
|
||||
|
||||
### 3. PM2配置文件 (`backend/ecosystem.config.js`)
|
||||
```javascript
|
||||
# 功能: PM2进程管理配置
|
||||
# 包含: 环境配置、日志管理、性能优化、重启策略
|
||||
```
|
||||
|
||||
## 🚀 部署步骤
|
||||
|
||||
### 步骤1: 服务器环境初始化
|
||||
```bash
|
||||
# 运行初始化脚本(只需执行一次)
|
||||
./init-server.sh
|
||||
```
|
||||
|
||||
**初始化脚本执行内容:**
|
||||
- 更新系统包
|
||||
- 安装Node.js 18.x
|
||||
- 安装PM2进程管理器
|
||||
- 创建项目目录结构
|
||||
- 配置防火墙开放端口3000
|
||||
|
||||
### 步骤2: 后端代码部署
|
||||
```bash
|
||||
# 运行部署脚本(每次更新后执行)
|
||||
./deploy-backend.sh
|
||||
```
|
||||
|
||||
**部署脚本执行内容:**
|
||||
1. 检查本地Node.js环境
|
||||
2. 安装生产依赖 (`npm install --production`)
|
||||
3. 使用rsync同步代码到服务器(排除不必要的文件)
|
||||
4. 在服务器上安装依赖
|
||||
5. 使用PM2重启应用服务
|
||||
|
||||
### 步骤3: 验证部署
|
||||
```bash
|
||||
# 检查服务状态
|
||||
ssh root@1.13.156.49 "pm2 status"
|
||||
|
||||
# 查看应用日志
|
||||
ssh root@1.13.156.49 "tail -f /data/nodejs/jiebanke/logs/out.log"
|
||||
|
||||
# 测试API接口
|
||||
curl http://1.13.156.49:3000/api/v1/health
|
||||
```
|
||||
|
||||
## 🔧 配置文件说明
|
||||
|
||||
### PM2配置 (`ecosystem.config.js`)
|
||||
- **集群模式**: 使用所有CPU核心
|
||||
- **内存限制**: 最大1GB内存自动重启
|
||||
- **日志管理**: 日志文件存储在 `/data/nodejs/jiebanke/logs/`
|
||||
- **环境配置**: 支持development/production/test环境
|
||||
|
||||
### 环境变量
|
||||
部署前请确保服务器上有正确的 `.env` 文件,包含:
|
||||
- 数据库连接配置
|
||||
- JWT密钥
|
||||
- Redis配置(如使用)
|
||||
- 其他第三方服务配置
|
||||
|
||||
## 🛠️ 日常运维
|
||||
|
||||
### 查看服务状态
|
||||
```bash
|
||||
ssh root@1.13.156.49 "pm2 status"
|
||||
ssh root@1.13.156.49 "pm2 logs jiebanke-backend"
|
||||
```
|
||||
|
||||
### 重启服务
|
||||
```bash
|
||||
ssh root@1.13.156.49 "pm2 restart jiebanke-backend"
|
||||
```
|
||||
|
||||
### 停止服务
|
||||
```bash
|
||||
ssh root@1.13.156.49 "pm2 stop jiebanke-backend"
|
||||
```
|
||||
|
||||
### 查看系统资源
|
||||
```bash
|
||||
ssh root@1.13.156.49 "top"
|
||||
ssh root@1.13.156.49 "df -h"
|
||||
```
|
||||
|
||||
## 🚨 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **端口占用**
|
||||
```bash
|
||||
ssh root@1.13.156.49 "lsof -i :3000"
|
||||
ssh root@1.13.156.49 "kill -9 <PID>"
|
||||
```
|
||||
|
||||
2. **权限问题**
|
||||
```bash
|
||||
ssh root@1.13.156.49 "chmod -R 755 /data/nodejs/jiebanke"
|
||||
```
|
||||
|
||||
3. **依赖安装失败**
|
||||
```bash
|
||||
# 清除npm缓存
|
||||
ssh root@1.13.156.49 "npm cache clean --force"
|
||||
|
||||
# 重新安装依赖
|
||||
ssh root@1.13.156.49 "cd /data/nodejs/jiebanke && rm -rf node_modules && npm install"
|
||||
```
|
||||
|
||||
### 日志分析
|
||||
```bash
|
||||
# 应用日志
|
||||
ssh root@1.13.156.49 "tail -f /data/nodejs/jiebanke/logs/error.log"
|
||||
|
||||
# PM2日志
|
||||
ssh root@1.13.156.49 "pm2 logs jiebanke-backend"
|
||||
|
||||
# 系统日志
|
||||
ssh root@1.13.156.49 "journalctl -u pm2-root"
|
||||
```
|
||||
|
||||
## 📊 监控与备份
|
||||
|
||||
### 应用监控
|
||||
```bash
|
||||
# 安装PM2监控插件
|
||||
ssh root@1.13.156.49 "pm2 install pm2-logrotate"
|
||||
ssh root@1.13.156.49 "pm2 set pm2-logrotate:max_size 10M"
|
||||
ssh root@1.13.156.49 "pm2 set pm2-logrotate:retain 30"
|
||||
```
|
||||
|
||||
### 数据备份
|
||||
```bash
|
||||
# 数据库备份
|
||||
ssh root@1.13.156.49 "mysqldump -u root -p jiebandata > /backup/db-backup-$(date +%Y%m%d).sql"
|
||||
|
||||
# 代码备份
|
||||
ssh root@1.13.156.49 "tar -czf /backup/code-backup-$(date +%Y%m%d).tar.gz /data/nodejs/jiebanke"
|
||||
```
|
||||
|
||||
## 📞 支持信息
|
||||
|
||||
- **服务器地址**: 1.13.156.49
|
||||
- **部署目录**: /data/nodejs/jiebanke
|
||||
- **服务端口**: 3000
|
||||
- **进程名称**: jiebanke-backend
|
||||
- **日志目录**: /data/nodejs/jiebanke/logs/
|
||||
|
||||
---
|
||||
*最后更新: 2024年* 📅
|
||||
@@ -92,7 +92,7 @@ cp admin-system/.env.example admin-system/.env
|
||||
|
||||
## 🌐 访问地址
|
||||
|
||||
- **后端API**: https://api.jiebanke.com
|
||||
- **后端API**: https://webapi.jiebanke.com
|
||||
- **后台管理**: https://admin.jiebanke.com
|
||||
- **官方网站**: https://www.jiebanke.com
|
||||
- **小程序**: 使用微信开发者工具打开 `mini-program/` 目录
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
NODE_ENV=development
|
||||
|
||||
# API配置
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com/api/v1
|
||||
VITE_API_BASE_URL=https://webapi.jiebanke.com/api/v1
|
||||
VITE_API_TIMEOUT=30000
|
||||
|
||||
# 功能开关
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
NODE_ENV=production
|
||||
|
||||
# API配置
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com/api/v1
|
||||
VITE_API_BASE_URL=https://webapi.jiebanke.com/api/v1
|
||||
VITE_API_TIMEOUT=15000
|
||||
|
||||
# 功能开关
|
||||
|
||||
@@ -86,14 +86,14 @@ docker-compose up mysql redis rabbitmq
|
||||
**.env.development** (开发环境):
|
||||
```
|
||||
VITE_APP_TITLE=结伴客后台管理系统(开发)
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com/api/v1
|
||||
VITE_API_BASE_URL=https://webapi.jiebanke.com/api/v1
|
||||
VITE_APP_VERSION=dev
|
||||
```
|
||||
|
||||
**.env.production** (生产环境):
|
||||
```
|
||||
VITE_APP_TITLE=结伴客后台管理系统
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com
|
||||
VITE_API_BASE_URL=https://webapi.jiebanke.com
|
||||
VITE_APP_VERSION=v1.0.0
|
||||
```
|
||||
|
||||
@@ -131,7 +131,7 @@ environment:
|
||||
|
||||
系统提供健康检查端点:
|
||||
- 前端: `https://admin.jiebanke.com/health`
|
||||
- 后端: `https://api.jiebanke.com/health`
|
||||
- 后端: `https://webapi.jiebanke.com/health`
|
||||
|
||||
## 监控和日志
|
||||
|
||||
|
||||
@@ -45,14 +45,14 @@ npm run preview
|
||||
### 开发环境 (.env.development)
|
||||
```env
|
||||
NODE_ENV=development
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com/api/v1
|
||||
VITE_API_BASE_URL=https://webapi.jiebanke.com/api/v1
|
||||
VITE_FEATURE_DEBUG=true
|
||||
```
|
||||
|
||||
### 生产环境 (.env.production)
|
||||
```env
|
||||
NODE_ENV=production
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com/api/v1
|
||||
VITE_API_BASE_URL=https://webapi.jiebanke.com/api/v1
|
||||
VITE_FEATURE_DEBUG=false
|
||||
```
|
||||
|
||||
|
||||
@@ -130,25 +130,17 @@ API测试脚本会自动测试以下接口:
|
||||
### 生产环境
|
||||
```javascript
|
||||
{
|
||||
host: '129.211.213.226',
|
||||
port: 9527,
|
||||
user: 'root',
|
||||
password: 'Aiot123',
|
||||
database: 'jiebandata',
|
||||
host: 'nj-cdb-3pwh2kz1.sql.tencentcdb.com',
|
||||
port: 20784,
|
||||
user: 'jiebanke',
|
||||
password: 'aiot741$12346',
|
||||
database: 'jbkdata',
|
||||
connectionLimit: 20
|
||||
}
|
||||
```
|
||||
|
||||
## ⚡ 生产环境连接说明
|
||||
|
||||
### 直接连接生产数据库
|
||||
当前配置已设置为直接连接生产环境MySQL服务器:
|
||||
|
||||
- **服务器地址**: 129.211.213.226
|
||||
- **端口**: 9527
|
||||
- **用户名**: root
|
||||
- **密码**: Aiot123
|
||||
- **数据库**: jiebandata
|
||||
|
||||
### 注意事项
|
||||
1. **谨慎操作**: 直接连接生产数据库,所有操作都会影响真实数据
|
||||
|
||||
44
backend/ecosystem.config.js
Normal file
44
backend/ecosystem.config.js
Normal file
@@ -0,0 +1,44 @@
|
||||
module.exports = {
|
||||
apps: [{
|
||||
name: 'jiebanke-backend',
|
||||
script: './src/server.js',
|
||||
instances: 'max',
|
||||
exec_mode: 'cluster',
|
||||
env: {
|
||||
NODE_ENV: 'development',
|
||||
PORT: 3000,
|
||||
WATCH: true
|
||||
},
|
||||
env_production: {
|
||||
NODE_ENV: 'production',
|
||||
PORT: 3000,
|
||||
WATCH: false
|
||||
},
|
||||
env_test: {
|
||||
NODE_ENV: 'test',
|
||||
PORT: 3001,
|
||||
WATCH: false
|
||||
},
|
||||
// 日志配置
|
||||
log_file: '/data/nodejs/jiebanke/logs/combined.log',
|
||||
out_file: '/data/nodejs/jiebanke/logs/out.log',
|
||||
error_file: '/data/nodejs/jiebanke/logs/error.log',
|
||||
// 性能配置
|
||||
max_memory_restart: '1G',
|
||||
kill_timeout: 3000,
|
||||
wait_ready: true,
|
||||
listen_timeout: 3000,
|
||||
// 监控配置
|
||||
watch: false,
|
||||
ignore_watch: [
|
||||
'node_modules',
|
||||
'logs',
|
||||
'.git',
|
||||
'uploads'
|
||||
],
|
||||
// 重启策略
|
||||
autorestart: true,
|
||||
max_restarts: 10,
|
||||
restart_delay: 4000
|
||||
}]
|
||||
};
|
||||
78
deploy-backend.sh
Normal file
78
deploy-backend.sh
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 后端部署脚本 - 部署到CentOS服务器
|
||||
# 目标服务器: 1.13.156.49
|
||||
# 目标目录: /data/nodejs/jiebanke
|
||||
|
||||
# 配置参数
|
||||
LOCAL_DIR="/Users/ainongkeji/code/vue/jiebanke/backend"
|
||||
REMOTE_USER="root"
|
||||
REMOTE_HOST="1.13.156.49"
|
||||
REMOTE_DIR="/data/nodejs/jiebanke"
|
||||
|
||||
# 检查本地目录是否存在
|
||||
if [ ! -d "$LOCAL_DIR" ]; then
|
||||
echo "错误:本地目录 $LOCAL_DIR 不存在!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查Node.js环境
|
||||
if ! command -v node &> /dev/null; then
|
||||
echo "错误:本地Node.js环境未安装!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 安装生产依赖
|
||||
cd "$LOCAL_DIR"
|
||||
echo "安装生产依赖..."
|
||||
npm install --production
|
||||
|
||||
# 使用 rsync 上传文件到服务器
|
||||
echo "开始上传后端文件到远程服务器..."
|
||||
rsync -avz --progress --delete \
|
||||
--exclude 'node_modules' \
|
||||
--exclude '.git' \
|
||||
--exclude '.env' \
|
||||
--exclude 'logs' \
|
||||
--exclude 'uploads' \
|
||||
--include 'ecosystem.config.js' \
|
||||
"$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||
|
||||
# 在服务器上执行部署后命令
|
||||
echo "在远程服务器上执行部署命令..."
|
||||
ssh "$REMOTE_USER@$REMOTE_HOST" << EOF
|
||||
cd "$REMOTE_DIR"
|
||||
|
||||
# 安装生产依赖
|
||||
echo "在服务器上安装依赖..."
|
||||
npm install --production
|
||||
|
||||
# 使用PM2重启应用
|
||||
if command -v pm2 &> /dev/null; then
|
||||
echo "使用PM2重启应用..."
|
||||
if [ -f "ecosystem.config.js" ]; then
|
||||
pm2 reload ecosystem.config.js --env production
|
||||
pm2 save
|
||||
else
|
||||
pm2 restart jiebanke-backend || pm2 start src/server.js --name "jiebanke-backend" --env production
|
||||
fi
|
||||
else
|
||||
echo "PM2未安装,使用node直接启动..."
|
||||
pkill -f "node.*server.js" || true
|
||||
NODE_ENV=production nohup node src/server.js > server.log 2>&1 &
|
||||
fi
|
||||
|
||||
# 检查服务状态
|
||||
echo "检查服务状态..."
|
||||
sleep 3
|
||||
if command -v pm2 &> /dev/null; then
|
||||
pm2 status
|
||||
else
|
||||
ps aux | grep "node.*server.js" | grep -v grep
|
||||
fi
|
||||
EOF
|
||||
|
||||
echo "后端部署完成!"
|
||||
echo "服务器地址: $REMOTE_HOST"
|
||||
echo "部署目录: $REMOTE_DIR"
|
||||
echo "应用应该运行在端口 3000 上"
|
||||
@@ -504,12 +504,12 @@ Authorization: Bearer <token>
|
||||
### 使用curl测试
|
||||
```bash
|
||||
# 微信用户登录
|
||||
curl -X POST https://api.jiebanke.com/api/v1/auth/wechat-login \
|
||||
curl -X POST https://webapi.jiebanke.com/api/v1/auth/wechat-login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"code":"wxlogincode123","userInfo":{"nickName":"测试用户","avatarUrl":"https://avatar.url","gender":1}}'
|
||||
|
||||
# 获取旅行计划列表
|
||||
curl -X GET https://api.jiebanke.com/api/v1/travel/plans \
|
||||
curl -X GET https://webapi.jiebanke.com/api/v1/travel/plans \
|
||||
-H "Authorization: Bearer <token>"
|
||||
```
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ npm run dev
|
||||
```
|
||||
|
||||
### 6. 验证部署
|
||||
- 后端API: https://api.jiebanke.com/api/v1/health
|
||||
- 后端API: https://webapi.jiebanke.com/api/v1/health
|
||||
- 后台管理: https://admin.jiebanke.com
|
||||
- 官方网站: https://www.jiebanke.com
|
||||
|
||||
|
||||
74
init-server.sh
Normal file
74
init-server.sh
Normal file
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 服务器初始化脚本 - CentOS 7+
|
||||
# 目标服务器: 1.13.156.49
|
||||
# 目标目录: /data/nodejs/jiebanke
|
||||
|
||||
# 配置参数
|
||||
REMOTE_USER="root"
|
||||
REMOTE_HOST="1.13.156.49"
|
||||
REMOTE_DIR="/data/nodejs/jiebanke"
|
||||
|
||||
# 在服务器上执行初始化命令
|
||||
echo "开始在服务器 $REMOTE_HOST 上初始化环境..."
|
||||
|
||||
ssh "$REMOTE_USER@$REMOTE_HOST" << 'EOF'
|
||||
set -e
|
||||
|
||||
# 更新系统
|
||||
echo "更新系统包..."
|
||||
yum update -y
|
||||
|
||||
# 安装必要的工具
|
||||
echo "安装必要工具..."
|
||||
yum install -y wget curl git vim
|
||||
|
||||
# 安装Node.js 18.x
|
||||
echo "安装Node.js 18.x..."
|
||||
if ! command -v node &> /dev/null; then
|
||||
curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
|
||||
yum install -y nodejs
|
||||
fi
|
||||
|
||||
# 安装PM2进程管理器
|
||||
echo "安装PM2..."
|
||||
npm install -g pm2
|
||||
|
||||
# 安装MySQL客户端(可选)
|
||||
echo "安装MySQL客户端..."
|
||||
yum install -y mysql
|
||||
|
||||
# 创建项目目录
|
||||
echo "创建项目目录..."
|
||||
mkdir -p /data/nodejs/jiebanke
|
||||
chmod 755 /data/nodejs/jiebanke
|
||||
|
||||
# 创建日志目录
|
||||
mkdir -p /data/nodejs/jiebanke/logs
|
||||
chmod 755 /data/nodejs/jiebanke/logs
|
||||
|
||||
# 创建上传文件目录
|
||||
mkdir -p /data/nodejs/jiebanke/uploads
|
||||
chmod 755 /data/nodejs/jiebanke/uploads
|
||||
|
||||
# 检查安装结果
|
||||
echo "=== 安装结果检查 ==="
|
||||
echo "Node.js版本: $(node --version)"
|
||||
echo "npm版本: $(npm --version)"
|
||||
echo "PM2版本: $(pm2 --version 2>/dev/null || echo '未安装')"
|
||||
echo "项目目录: /data/nodejs/jiebanke"
|
||||
echo "目录权限: $(ls -ld /data/nodejs/jiebanke)"
|
||||
|
||||
# 配置防火墙(如果需要)
|
||||
echo "配置防火墙..."
|
||||
if command -v firewall-cmd &> /dev/null; then
|
||||
firewall-cmd --permanent --add-port=3000/tcp
|
||||
firewall-cmd --reload
|
||||
echo "端口3000已开放"
|
||||
fi
|
||||
|
||||
echo "服务器初始化完成!"
|
||||
EOF
|
||||
|
||||
echo "服务器初始化脚本执行完成!"
|
||||
echo "接下来可以运行 deploy-backend.sh 进行部署"
|
||||
@@ -3,7 +3,7 @@
|
||||
# 配置参数
|
||||
LOCAL_DIR="/Users/ainongkeji/code/vue/jiebanke/website"
|
||||
REMOTE_USER="root"
|
||||
REMOTE_HOST="119.45.104.14"
|
||||
REMOTE_HOST="1.13.156.49"
|
||||
REMOTE_DIR="/data/php/jiebanke/www"
|
||||
|
||||
# 检查本地目录是否存在
|
||||
|
||||
Reference in New Issue
Block a user