后端版本服务器部署成功
This commit is contained in:
278
backend/start_server.sh
Executable file
278
backend/start_server.sh
Executable file
@@ -0,0 +1,278 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 结伴客后端服务启动脚本 - 在CentOS服务器上运行
|
||||
# 使用PM2管理Node.js应用
|
||||
|
||||
# 设置颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 配置参数
|
||||
APP_DIR="$(pwd)"
|
||||
NODE_ENV=${NODE_ENV:-"production"}
|
||||
PORT=${PORT:-"3200"}
|
||||
|
||||
# 检查Node.js环境
|
||||
check_node() {
|
||||
if ! command -v node &> /dev/null; then
|
||||
echo -e "${RED}错误:Node.js环境未安装!${NC}"
|
||||
echo -e "${YELLOW}请先安装Node.js: curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash - && sudo yum install -y nodejs${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}Node.js版本: $(node -v)${NC}"
|
||||
}
|
||||
|
||||
# 检查PM2是否安装
|
||||
check_pm2() {
|
||||
if ! command -v pm2 &> /dev/null; then
|
||||
echo -e "${YELLOW}PM2未安装,正在全局安装...${NC}"
|
||||
npm install -g pm2
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}PM2安装失败!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo -e "${GREEN}PM2版本: $(pm2 -v)${NC}"
|
||||
}
|
||||
|
||||
# 检查环境变量文件
|
||||
check_env() {
|
||||
if [ ! -f "$APP_DIR/.env" ]; then
|
||||
echo -e "${RED}错误:未找到.env文件!${NC}"
|
||||
echo -e "${YELLOW}请确保.env文件已正确配置,包含必要的数据库连接信息和其他配置。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}已找到.env文件${NC}"
|
||||
}
|
||||
|
||||
# 检查ecosystem.config.js文件
|
||||
check_ecosystem() {
|
||||
if [ ! -f "$APP_DIR/ecosystem.config.js" ]; then
|
||||
echo -e "${YELLOW}未找到ecosystem.config.js文件,正在创建默认配置...${NC}"
|
||||
cat > "$APP_DIR/ecosystem.config.js" << EOF
|
||||
module.exports = {
|
||||
apps: [{
|
||||
name: 'jiebanke-backend',
|
||||
script: './src/server.js',
|
||||
instances: 'max',
|
||||
exec_mode: 'cluster',
|
||||
env: {
|
||||
NODE_ENV: 'development',
|
||||
PORT: $PORT,
|
||||
WATCH: true
|
||||
},
|
||||
env_production: {
|
||||
NODE_ENV: 'production',
|
||||
PORT: $PORT,
|
||||
WATCH: false
|
||||
},
|
||||
log_file: '$APP_DIR/logs/combined.log',
|
||||
out_file: '$APP_DIR/logs/out.log',
|
||||
error_file: '$APP_DIR/logs/error.log',
|
||||
max_memory_restart: '1G',
|
||||
kill_timeout: 3000,
|
||||
wait_ready: true,
|
||||
listen_timeout: 3000,
|
||||
autorestart: true,
|
||||
max_restarts: 10,
|
||||
restart_delay: 4000,
|
||||
ignore_watch: [
|
||||
'node_modules',
|
||||
'logs',
|
||||
'.git',
|
||||
'uploads'
|
||||
]
|
||||
}]
|
||||
};
|
||||
EOF
|
||||
echo -e "${GREEN}ecosystem.config.js文件已创建${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 安装依赖
|
||||
install_dependencies() {
|
||||
echo -e "${BLUE}正在安装生产依赖...${NC}"
|
||||
cd "$APP_DIR"
|
||||
npm install --production
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}依赖安装失败!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}依赖安装完成!${NC}"
|
||||
}
|
||||
|
||||
# 创建日志和上传目录
|
||||
create_directories() {
|
||||
echo -e "${BLUE}正在创建必要的目录...${NC}"
|
||||
mkdir -p "$APP_DIR/logs" "$APP_DIR/uploads"
|
||||
chmod 755 "$APP_DIR/logs" "$APP_DIR/uploads"
|
||||
echo -e "${GREEN}目录创建完成!${NC}"
|
||||
}
|
||||
|
||||
# 启动服务
|
||||
start_service() {
|
||||
echo -e "${BLUE}正在使用PM2启动结伴客后端服务...${NC}"
|
||||
cd "$APP_DIR"
|
||||
|
||||
# 设置NODE_ENV环境变量
|
||||
export NODE_ENV=$NODE_ENV
|
||||
|
||||
# 使用PM2启动应用
|
||||
pm2 start ecosystem.config.js --env $NODE_ENV
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}服务启动失败!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}服务启动成功!${NC}"
|
||||
echo -e "${BLUE}应用名称: jiebanke-backend${NC}"
|
||||
echo -e "${BLUE}环境: $NODE_ENV${NC}"
|
||||
echo -e "${BLUE}端口: $PORT${NC}"
|
||||
echo -e "${YELLOW}提示:使用 pm2 logs jiebanke-backend 查看日志${NC}"
|
||||
echo -e "${YELLOW}提示:使用 pm2 monit 监控应用状态${NC}"
|
||||
}
|
||||
|
||||
# 设置PM2开机自启
|
||||
setup_autostart() {
|
||||
echo -e "${BLUE}正在配置PM2开机自启...${NC}"
|
||||
pm2 startup
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}PM2开机自启配置失败!${NC}"
|
||||
else
|
||||
pm2 save
|
||||
echo -e "${GREEN}PM2开机自启配置完成!${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo ""
|
||||
echo "结伴客后端服务管理脚本"
|
||||
echo ""
|
||||
echo "用法: $0 [命令] [环境]"
|
||||
echo ""
|
||||
echo "命令选项:"
|
||||
echo " start - 启动服务(默认)"
|
||||
echo " stop - 停止服务"
|
||||
echo " restart - 重启服务"
|
||||
echo " status - 查看服务状态"
|
||||
echo " logs - 查看服务日志"
|
||||
echo " install - 仅安装依赖"
|
||||
echo " setup - 配置PM2开机自启"
|
||||
echo " help - 显示此帮助信息"
|
||||
echo ""
|
||||
echo "环境选项:"
|
||||
echo " production - 生产环境(默认)"
|
||||
echo " development - 开发环境"
|
||||
echo " test - 测试环境"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 start production # 在生产环境启动服务"
|
||||
echo " $0 restart development # 在开发环境重启服务"
|
||||
echo " $0 logs # 查看服务日志"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 停止服务
|
||||
stop_service() {
|
||||
echo -e "${BLUE}正在停止结伴客后端服务...${NC}"
|
||||
pm2 stop jiebanke-backend
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${YELLOW}服务可能未在运行!${NC}"
|
||||
else
|
||||
echo -e "${GREEN}服务已停止!${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 重启服务
|
||||
restart_service() {
|
||||
echo -e "${BLUE}正在重启结伴客后端服务...${NC}"
|
||||
export NODE_ENV=$NODE_ENV
|
||||
pm2 restart ecosystem.config.js --env $NODE_ENV
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}服务重启失败!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}服务重启成功!${NC}"
|
||||
}
|
||||
|
||||
# 查看服务状态
|
||||
status_service() {
|
||||
echo -e "${BLUE}正在查看结伴客后端服务状态...${NC}"
|
||||
pm2 status jiebanke-backend
|
||||
}
|
||||
|
||||
# 查看服务日志
|
||||
logs_service() {
|
||||
echo -e "${BLUE}正在查看结伴客后端服务日志...${NC}"
|
||||
pm2 logs jiebanke-backend
|
||||
}
|
||||
|
||||
# 主函数
|
||||
handle_command() {
|
||||
# 解析命令和环境参数
|
||||
COMMAND="start"
|
||||
if [ $# -ge 1 ]; then
|
||||
case $1 in
|
||||
start|stop|restart|status|logs|install|setup|help) COMMAND=$1 ;;
|
||||
*) echo -e "${RED}未知命令:$1${NC}"; show_help; exit 1 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ $# -ge 2 ]; then
|
||||
case $2 in
|
||||
production|development|test) NODE_ENV=$2 ;;
|
||||
*) echo -e "${RED}未知环境:$2${NC}"; show_help; exit 1 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# 执行相应的命令
|
||||
case $COMMAND in
|
||||
start)
|
||||
check_node
|
||||
check_pm2
|
||||
check_env
|
||||
check_ecosystem
|
||||
install_dependencies
|
||||
create_directories
|
||||
start_service
|
||||
;;
|
||||
stop)
|
||||
check_pm2
|
||||
stop_service
|
||||
;;
|
||||
restart)
|
||||
check_node
|
||||
check_pm2
|
||||
check_env
|
||||
install_dependencies
|
||||
restart_service
|
||||
;;
|
||||
status)
|
||||
check_pm2
|
||||
status_service
|
||||
;;
|
||||
logs)
|
||||
check_pm2
|
||||
logs_service
|
||||
;;
|
||||
install)
|
||||
check_node
|
||||
install_dependencies
|
||||
;;
|
||||
setup)
|
||||
check_pm2
|
||||
setup_autostart
|
||||
;;
|
||||
help)
|
||||
show_help
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
handle_command "$@"
|
||||
Reference in New Issue
Block a user