docs(deployment): 更新部署文档并添加自动化部署脚本

- 更新了 DEPLOYMENT.md 文档,增加了更多部署细节和说明
- 添加了 Linux 和 Windows 平台的自动化部署脚本
- 更新了 README.md,增加了部署相关说明
- 调整了 .env 文件配置,以适应新的部署流程
- 移除了部分不必要的代码和配置
This commit is contained in:
2025-09-10 14:16:27 +08:00
parent 18fe719f94
commit b2d940e014
114 changed files with 6990 additions and 247 deletions

View File

@@ -1,42 +1,15 @@
# 服务器配置
NODE_ENV=development
PORT=3100
PORT=3000
HOST=0.0.0.0
ENABLE_SWAGGER=true
# MySQL数据库配置
DB_HOST=129.211.213.226
DB_PORT=9527
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=aiotAiot123!
DB_NAME=jiebandata
# 测试环境数据库
TEST_DB_HOST=192.168.0.240
TEST_DB_PORT=3306
TEST_DB_USER=root
TEST_DB_PASSWORD=aiot$Aiot123
TEST_DB_NAME=jiebandata
# 生产环境数据库
PROD_DB_HOST=129.211.213.226
PROD_DB_PORT=9527
PROD_DB_USER=root
PROD_DB_PASSWORD=aiotAiot123!
PROD_DB_NAME=jiebandata
# Redis配置
REDIS_HOST=redis.jiebanke.com
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
# RabbitMQ配置
RABBITMQ_HOST=rabbitmq.jiebanke.com
RABBITMQ_PORT=5672
RABBITMQ_USERNAME=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/
DB_PASSWORD=
DB_NAME=jiebanke_dev
DB_NAME_TEST=jiebanke_test
# JWT配置
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
@@ -48,4 +21,18 @@ WECHAT_SECRET=your-wechat-secret
# 文件上传配置
UPLOAD_MAX_SIZE=10485760
UPLOAD_ALLOWED_TYPES=image/jpeg,image/png,image/gif
UPLOAD_ALLOWED_TYPES=image/jpeg,image/png,image/gif
# Redis配置可选
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
# MySQL连接池配置
DB_CONNECTION_LIMIT=10
DB_CHARSET=utf8mb4
DB_TIMEZONE=+08:00
# 调试配置
DEBUG=jiebanke:*
LOG_LEVEL=info

181
backend/README_SCRIPTS.md Normal file
View File

@@ -0,0 +1,181 @@
# 结伴客后端服务管理脚本
## 概述
本目录包含用于管理结伴客后端服务的一组脚本,包括启动、停止、重启和状态检查等功能。
## 脚本说明
### start.sh - 启动脚本
用于启动结伴客后端服务。
#### 使用方法
```bash
# 生产模式启动(默认)
./start.sh
# 开发模式启动(支持热重载)
./start.sh dev
# 显示帮助信息
./start.sh help
```
#### 功能特点
- 自动检查并安装依赖(如果未安装)
- 自动复制环境变量文件(如果不存在)
- 支持生产模式和开发模式
- 开发模式下优先使用 nodemon如果已安装
### stop.sh - 停止脚本
用于停止正在运行的结伴客后端服务。
#### 使用方法
```bash
# 停止服务
./stop.sh
# 显示帮助信息
./stop.sh help
```
#### 功能特点
- 自动查找并停止所有相关的后端服务进程
- 优雅地停止进程,超时后强制终止
- 显示详细的进程停止信息
### restart.sh - 重启脚本
用于重启结伴客后端服务。
#### 使用方法
```bash
# 生产模式重启(默认)
./restart.sh
# 开发模式重启
./restart.sh dev
# 显示帮助信息
./restart.sh help
```
#### 功能特点
- 结合了 stop.sh 和 start.sh 的所有功能
- 支持生产模式和开发模式
- 在停止和启动之间添加了延迟以确保服务完全停止
### status.sh - 状态检查脚本
用于检查结伴客后端服务的运行状态。
#### 使用方法
```bash
# 检查服务状态
./status.sh
# 显示详细信息
./status.sh detail
# 显示帮助信息
./status.sh help
```
#### 功能特点
- 显示服务是否正在运行
- 显示相关的进程信息
- 详细模式下显示端口占用、工作目录等信息
## 使用示例
### 日常使用
```bash
# 进入后端目录
cd backend
# 启动服务
./start.sh
# 检查服务状态
./status.sh
# 重启服务
./restart.sh
# 停止服务
./stop.sh
```
### 开发环境使用
```bash
# 进入后端目录
cd backend
# 以开发模式启动(支持热重载)
./start.sh dev
# 检查服务状态
./status.sh
# 重启服务(保持开发模式)
./restart.sh dev
# 停止服务
./stop.sh
```
## 注意事项
1. 首次运行脚本前,请确保已安装 Node.js 和 npm
2. 脚本会自动检查依赖并安装(如果未安装)
3. 如果没有安装 nodemon开发模式将回退到使用 node
4. 脚本需要在后端项目根目录下运行
5. 确保运行脚本的用户具有足够的权限
## 故障排除
### 权限问题
如果遇到权限问题,请为脚本添加执行权限:
```bash
chmod +x start.sh stop.sh restart.sh status.sh
```
或者使用 npm 命令:
```bash
npm run start-scripts
```
### 服务无法启动
1. 检查端口是否被占用:
```bash
netstat -tlnp | grep :3000
```
2. 检查环境变量配置是否正确
3. 查看详细日志信息
### 服务无法停止
1. 脚本会自动等待10秒后强制终止进程
2. 如果仍有问题,可以手动终止进程:
```bash
ps aux | grep "node src/server.js"
kill -9 <PID>
```

View File

@@ -6,12 +6,14 @@
"scripts": {
"start": "node src/server.js",
"dev": "nodemon src/server.js",
"build": "echo \"Building backend project...\" && npm run lint",
"test": "jest",
"lint": "eslint src/**/*.js",
"migrate": "node src/utils/migrate.js",
"init-test-data": "node scripts/init-test-data.js",
"test-api": "node scripts/test-api-endpoints.js",
"test-db": "node scripts/test-database-connection.js"
"test-db": "node scripts/test-database-connection.js",
"start-scripts": "chmod +x *.sh"
},
"keywords": [
"mini-program",
@@ -48,10 +50,6 @@
"devDependencies": {
"eslint": "^8.56.0",
"jest": "^29.7.0",
"nodemon": "^3.1.10",
"supertest": "^6.3.3"
},
"engines": {
"node": ">=16.0.0"
"nodemon": "^3.1.10"
}
}
}

107
backend/restart.sh Executable file
View File

@@ -0,0 +1,107 @@
#!/bin/bash
# 结伴客后端服务重启脚本
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 停止服务
stop_server() {
echo -e "${BLUE}正在停止结伴客后端服务...${NC}"
# 查找并停止结伴客后端服务进程
PIDS=$(ps aux | grep "node src/server.js" | grep -v grep | awk '{print $2}')
if [ -z "$PIDS" ]; then
echo -e "${YELLOW}未找到正在运行的结伴客后端服务进程${NC}"
return 0
fi
echo -e "${BLUE}找到以下结伴客后端服务进程: $PIDS${NC}"
for PID in $PIDS; do
echo -e "${BLUE}正在停止进程 $PID...${NC}"
kill $PID
# 等待进程结束
COUNT=0
while kill -0 $PID 2>/dev/null; do
sleep 1
COUNT=$((COUNT + 1))
if [ $COUNT -gt 10 ]; then
echo -e "${YELLOW}进程 $PID 未能正常停止,正在强制终止...${NC}"
kill -9 $PID
break
fi
done
echo -e "${GREEN}进程 $PID 已停止${NC}"
done
echo -e "${GREEN}结伴客后端服务已停止${NC}"
}
# 启动服务
start_server() {
echo -e "${BLUE}正在启动结伴客后端服务...${NC}"
# 检查是否提供了参数
if [ "$1" = "dev" ]; then
# 开发模式
if command -v nodemon &> /dev/null; then
nodemon src/server.js
else
echo -e "${YELLOW}未安装 nodemon使用 node 运行...${NC}"
node src/server.js
fi
else
# 生产模式
node src/server.js
fi
}
# 重启服务
restart_server() {
stop_server
sleep 2
start_server "$1"
}
# 显示帮助信息
show_help() {
echo "结伴客后端服务重启脚本"
echo ""
echo "使用方法:"
echo " ./restart.sh - 重启服务(生产模式)"
echo " ./restart.sh dev - 重启服务(开发模式)"
echo " ./restart.sh help - 显示帮助信息"
echo ""
echo "说明:"
echo " 生产模式: 使用 node 直接运行服务"
echo " 开发模式: 使用 nodemon 运行服务(支持热重载)"
}
# 主逻辑
main() {
echo -e "${GREEN}========== 结伴客后端服务重启脚本 ==========${NC}"
# 检查参数
case "$1" in
"help"|"-h"|"--help")
show_help
;;
"dev")
restart_server "dev"
;;
*)
restart_server
;;
esac
}
# 执行主逻辑
main "$@"

View File

@@ -8,13 +8,13 @@
const mysql = require('mysql2/promise');
const config = require('../config/env');
// 数据库配置
// 数据库配置 - 使用环境变量,优先使用开发环境配置
const dbConfig = {
host: process.env.DB_HOST || '129.211.213.226',
port: process.env.DB_PORT || 9527,
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 3306,
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || 'Aiot123',
database: process.env.DB_NAME || 'jiebandata',
password: process.env.DB_PASSWORD || '',
database: process.env.DB_NAME || 'jiebanke_dev',
charset: process.env.DB_CHARSET || 'utf8mb4',
timezone: process.env.DB_TIMEZONE || '+08:00',
connectTimeout: 10000

93
backend/start.sh Executable file
View File

@@ -0,0 +1,93 @@
#!/bin/bash
# 结伴客后端服务启动脚本
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查是否已经安装依赖
check_dependencies() {
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}检测到未安装依赖,正在安装...${NC}"
npm install
if [ $? -ne 0 ]; then
echo -e "${RED}依赖安装失败!${NC}"
exit 1
fi
echo -e "${GREEN}依赖安装完成!${NC}"
fi
}
# 检查环境变量文件
check_env() {
if [ ! -f ".env" ]; then
echo -e "${YELLOW}未找到 .env 文件,正在复制示例文件...${NC}"
if [ -f ".env.example" ]; then
cp .env.example .env
echo -e "${GREEN}.env 文件已创建,请根据需要修改配置!${NC}"
else
echo -e "${RED}未找到 .env.example 文件!${NC}"
fi
fi
}
# 启动服务
start_server() {
echo -e "${GREEN}正在启动结伴客后端服务...${NC}"
# 检查是否提供了参数
if [ "$1" = "dev" ]; then
# 开发模式
if command -v nodemon &> /dev/null; then
nodemon src/server.js
else
echo -e "${YELLOW}未安装 nodemon使用 node 运行...${NC}"
node src/server.js
fi
else
# 生产模式
node src/server.js
fi
}
# 显示帮助信息
show_help() {
echo "结伴客后端服务启动脚本"
echo ""
echo "使用方法:"
echo " ./start.sh - 以生产模式启动服务"
echo " ./start.sh dev - 以开发模式启动服务"
echo " ./start.sh help - 显示帮助信息"
echo ""
echo "说明:"
echo " 生产模式: 使用 node 直接运行服务"
echo " 开发模式: 使用 nodemon 运行服务(支持热重载)"
}
# 主逻辑
main() {
echo -e "${GREEN}========== 结伴客后端服务启动脚本 ==========${NC}"
# 检查参数
case "$1" in
"help"|"-h"|"--help")
show_help
;;
"dev")
check_dependencies
check_env
start_server "dev"
;;
*)
check_dependencies
check_env
start_server
;;
esac
}
# 执行主逻辑
main "$@"

90
backend/status.sh Executable file
View File

@@ -0,0 +1,90 @@
#!/bin/bash
# 结伴客后端服务状态检查脚本
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 检查服务状态
check_status() {
echo -e "${BLUE}正在检查结伴客后端服务状态...${NC}"
# 查找结伴客后端服务进程
PROCESSES=$(ps aux | grep "node src/server.js" | grep -v grep)
PIDS=$(echo "$PROCESSES" | awk '{print $2}')
if [ -z "$PIDS" ]; then
echo -e "${RED}状态: 未运行${NC}"
return 1
else
echo -e "${GREEN}状态: 运行中${NC}"
echo -e "${BLUE}进程信息:${NC}"
echo "$PROCESSES"
return 0
fi
}
# 显示详细信息
show_details() {
echo -e "${BLUE}========== 结伴客后端服务详细信息 ==========${NC}"
# 显示进程信息
echo -e "${BLUE}进程信息:${NC}"
ps aux | grep "node src/server.js" | grep -v grep || echo -e "${YELLOW}未找到相关进程${NC}"
# 显示端口占用情况
echo -e "${BLUE}端口占用情况:${NC}"
netstat -tlnp | grep :3000 || echo -e "${YELLOW}未检测到3000端口占用${NC}"
# 显示工作目录
echo -e "${BLUE}当前工作目录:${NC}"
echo "$(pwd)"
# 显示Node.js版本
echo -e "${BLUE}Node.js版本:${NC}"
node --version || echo -e "${YELLOW}未安装Node.js${NC}"
# 显示npm版本
echo -e "${BLUE}npm版本:${NC}"
npm --version || echo -e "${YELLOW}未安装npm${NC}"
}
# 显示帮助信息
show_help() {
echo "结伴客后端服务状态检查脚本"
echo ""
echo "使用方法:"
echo " ./status.sh - 检查服务状态"
echo " ./status.sh detail - 显示详细信息"
echo " ./status.sh help - 显示帮助信息"
}
# 主逻辑
main() {
echo -e "${GREEN}========== 结伴客后端服务状态检查 ==========${NC}"
# 检查参数
case "$1" in
"help"|"-h"|"--help")
show_help
;;
"detail")
show_details
;;
*)
if check_status; then
echo -e "${GREEN}结伴客后端服务正在正常运行${NC}"
else
echo -e "${RED}结伴客后端服务未运行${NC}"
exit 1
fi
;;
esac
}
# 执行主逻辑
main "$@"

72
backend/stop.sh Executable file
View File

@@ -0,0 +1,72 @@
#!/bin/bash
# 结伴客后端服务停止脚本
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 停止服务
stop_server() {
echo -e "${GREEN}正在停止结伴客后端服务...${NC}"
# 查找并停止结伴客后端服务进程
PIDS=$(ps aux | grep "node src/server.js" | grep -v grep | awk '{print $2}')
if [ -z "$PIDS" ]; then
echo -e "${YELLOW}未找到正在运行的结伴客后端服务进程${NC}"
return 0
fi
echo -e "${GREEN}找到以下结伴客后端服务进程: $PIDS${NC}"
for PID in $PIDS; do
echo -e "${GREEN}正在停止进程 $PID...${NC}"
kill $PID
# 等待进程结束
COUNT=0
while kill -0 $PID 2>/dev/null; do
sleep 1
COUNT=$((COUNT + 1))
if [ $COUNT -gt 10 ]; then
echo -e "${YELLOW}进程 $PID 未能正常停止,正在强制终止...${NC}"
kill -9 $PID
break
fi
done
echo -e "${GREEN}进程 $PID 已停止${NC}"
done
echo -e "${GREEN}结伴客后端服务已停止${NC}"
}
# 显示帮助信息
show_help() {
echo "结伴客后端服务停止脚本"
echo ""
echo "使用方法:"
echo " ./stop.sh - 停止所有结伴客后端服务进程"
echo " ./stop.sh help - 显示帮助信息"
}
# 主逻辑
main() {
echo -e "${GREEN}========== 结伴客后端服务停止脚本 ==========${NC}"
# 检查参数
case "$1" in
"help"|"-h"|"--help")
show_help
;;
*)
stop_server
;;
esac
}
# 执行主逻辑
main "$@"