Files
jiebanke/backend/start_server.sh

278 lines
7.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"