Files
jiebanke/backend/start_server.bat

430 lines
10 KiB
Batchfile
Raw Normal View History

2025-09-11 16:14:15 +08:00
module.exports = {
apps: [{
name: 'jiebanke-backend',
script: 'server.js',
env: {
PORT: 3200,
NODE_ENV: 'production',
},
autorestart: true,
watch: false,
max_memory_restart: '1G',
output: 'logs/pm2.log',
error: 'logs/pm2-error.log',
log: 'logs/pm2-combined.log',
pid_file: 'pm2.pid',
instances: 1,
exec_mode: 'fork'
}]
};
2025-09-11 15:52:38 +08:00
#!/bin/bash
# 结伴客后端服务启动脚本
# 用于启动Node.js后端服务
# 设置颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 显示脚本使用说明
show_usage() {
echo "用法: $0 [选项]"
echo "选项:"
echo " start 启动后端服务"
echo " stop 停止后端服务"
echo " restart 重启后端服务"
echo " status 查看服务状态"
echo " help 显示帮助信息"
}
# 检查是否安装了Node.js
check_node() {
if ! command -v node &> /dev/null; then
echo -e "${RED}错误: 未找到Node.js请先安装Node.js${NC}"
exit 1
fi
NODE_VERSION=$(node -v)
echo -e "${GREEN}✓ Node.js版本: ${NODE_VERSION}${NC}"
}
# 检查是否安装了npm
check_npm() {
if ! command -v npm &> /dev/null; then
echo -e "${RED}错误: 未找到npm请先安装npm${NC}"
exit 1
fi
NPM_VERSION=$(npm -v)
echo -e "${GREEN}✓ npm版本: ${NPM_VERSION}${NC}"
}
# 检查依赖是否已安装
check_dependencies() {
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}警告: 未找到node_modules目录正在安装依赖...${NC}"
npm install
if [ $? -ne 0 ]; then
echo -e "${RED}错误: 依赖安装失败${NC}"
exit 1
fi
echo -e "${GREEN}✓ 依赖安装完成${NC}"
else
echo -e "${GREEN}✓ 依赖已安装${NC}"
fi
}
# 启动服务
start_service() {
# 检查服务是否已经在运行
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${YELLOW}警告: 服务已在运行中${NC}"
exit 1
fi
echo -e "${GREEN}正在启动结伴客后端服务...${NC}"
# 设置环境变量
export NODE_ENV=production
export PORT=${PORT:-3200}
# 启动服务并将其放到后台运行
nohup npm start > server.log 2>&1 &
SERVER_PID=$!
# 将PID保存到文件
echo $SERVER_PID > server.pid
# 等待几秒钟让服务启动
sleep 3
# 检查服务是否成功启动
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${GREEN}✓ 服务启动成功${NC}"
echo -e "${GREEN}✓ PID: ${SERVER_PID}${NC}"
echo -e "${GREEN}✓ 日志文件: server.log${NC}"
echo -e "${GREEN}✓ 访问地址: http://localhost:${PORT}${NC}"
else
echo -e "${RED}✗ 服务启动失败,请检查日志文件 server.log${NC}"
rm -f server.pid
exit 1
fi
}
# 停止服务
stop_service() {
if [ ! -f server.pid ]; then
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${YELLOW}警告: 找到正在运行的服务但PID文件不存在${NC}"
echo -e "${YELLOW}尝试查找并终止服务...${NC}"
pkill -f "node.*server.js"
sleep 2
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${RED}✗ 无法终止服务${NC}"
exit 1
else
echo -e "${GREEN}✓ 服务已终止${NC}"
fi
else
echo -e "${YELLOW}服务未在运行${NC}"
fi
else
SERVER_PID=$(cat server.pid)
if ps -p $SERVER_PID > /dev/null; then
echo -e "${GREEN}正在停止服务 (PID: ${SERVER_PID})...${NC}"
kill $SERVER_PID
sleep 3
if ps -p $SERVER_PID > /dev/null; then
echo -e "${YELLOW}服务未响应,强制终止...${NC}"
kill -9 $SERVER_PID
fi
rm -f server.pid
echo -e "${GREEN}✓ 服务已停止${NC}"
else
echo -e "${YELLOW}PID文件存在但服务未在运行${NC}"
rm -f server.pid
fi
fi
}
# 查看服务状态
status_service() {
if [ -f server.pid ]; then
SERVER_PID=$(cat server.pid)
if ps -p $SERVER_PID > /dev/null; then
echo -e "${GREEN}✓ 服务正在运行 (PID: ${SERVER_PID})${NC}"
else
echo -e "${RED}✗ PID文件存在但服务未在运行${NC}"
fi
else
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${GREEN}✓ 服务正在运行${NC}"
else
echo -e "${YELLOW}服务未在运行${NC}"
fi
fi
}
# 查看日志
tail_logs() {
if [ -f server.log ]; then
tail -f server.log
else
echo -e "${RED}日志文件不存在${NC}"
fi
}
# 主逻辑
main() {
# 获取命令行参数
ACTION=${1:-"start"}
case "$ACTION" in
start)
check_node
check_npm
check_dependencies
start_service
;;
stop)
stop_service
;;
restart)
stop_service
sleep 2
check_node
check_npm
check_dependencies
start_service
;;
status)
status_service
;;
logs)
tail_logs
;;
help)
show_usage
;;
*)
echo -e "${RED}未知选项: $ACTION${NC}"
show_usage
exit 1
;;
esac
}
# 执行主逻辑
main "$@"
```
```
@echo off
2025-09-11 16:14:15 +08:00
title 结伴客后端服务PM2启动脚本
2025-09-11 15:52:38 +08:00
setlocal enabledelayedexpansion
:: 设置颜色
for /f "delims=" %%i in ('echo prompt $E^| cmd') do set "ESC=%%i"
2025-09-11 16:14:15 +08:00
:: 显示使用说明
if "%1"=="" (
call :show_usage
goto :eof
)
:: 根据参数执行相应操作
if "%1"=="start" (
call :start_service
) else if "%1"=="stop" (
call :stop_service
) else if "%1"=="restart" (
call :restart_service
) else if "%1"=="status" (
call :status_service
) else if "%1"=="logs" (
call :logs_service
) else if "%1"=="delete" (
call :delete_service
) else if "%1"=="list" (
call :list_service
) else if "%1"=="help" (
call :show_usage
) else (
echo %ESC%[91m未知选项: %1%ESC%[0m
call :show_usage
)
goto :eof
:: 显示使用说明
:show_usage
echo 用法: %0 [选项]
echo 选项:
echo start 使用PM2启动后端服务
echo stop 停止PM2管理的后端服务
echo restart 重启PM2管理的后端服务
echo status 查看PM2服务状态
echo logs 查看PM2服务日志
echo delete 从PM2中删除应用
echo list 列出所有PM2应用
echo help 显示帮助信息
goto :eof
:: 检查Node.js
:check_node
2025-09-11 15:52:38 +08:00
echo 检查Node.js环境...
node -v >nul 2>&1
if %errorlevel% neq 0 (
echo %ESC%[91m错误: 未找到Node.js请先安装Node.js%ESC%[0m
exit /b 1
) else (
for /f %%i in ('node -v') do set NODE_VERSION=%%i
echo %ESC%[92m✓ Node.js版本: %NODE_VERSION%%ESC%[0m
)
2025-09-11 16:14:15 +08:00
goto :eof
2025-09-11 15:52:38 +08:00
2025-09-11 16:14:15 +08:00
:: 检查npm
:check_npm
2025-09-11 15:52:38 +08:00
echo 检查npm环境...
npm -v >nul 2>&1
if %errorlevel% neq 0 (
echo %ESC%[91m错误: 未找到npm请先安装npm%ESC%[0m
exit /b 1
) else (
for /f %%i in ('npm -v') do set NPM_VERSION=%%i
echo %ESC%[92m✓ npm版本: %NPM_VERSION%%ESC%[0m
)
2025-09-11 16:14:15 +08:00
goto :eof
2025-09-11 15:52:38 +08:00
2025-09-11 16:14:15 +08:00
:: 检查PM2
:check_pm2
echo 检查PM2环境...
pm2 -v >nul 2>&1
if %errorlevel% neq 0 (
echo %ESC%[93m警告: 未找到PM2正在安装...%ESC%[0m
npm install -g pm2
if !errorlevel! neq 0 (
echo %ESC%[91m错误: PM2安装失败%ESC%[0m
exit /b 1
)
echo %ESC%[92m✓ PM2安装完成%ESC%[0m
) else (
for /f %%i in ('pm2 -v') do set PM2_VERSION=%%i
echo %ESC%[92m✓ PM2版本: %PM2_VERSION%%ESC%[0m
)
goto :eof
:: 检查依赖
:check_dependencies
2025-09-11 15:52:38 +08:00
if not exist "node_modules" (
echo %ESC%[93m警告: 未找到node_modules目录正在安装依赖...%ESC%[0m
npm install
if !errorlevel! neq 0 (
echo %ESC%[91m错误: 依赖安装失败%ESC%[0m
exit /b 1
)
echo %ESC%[92m✓ 依赖安装完成%ESC%[0m
) else (
echo %ESC%[92m✓ 依赖已安装%ESC%[0m
)
2025-09-11 16:14:15 +08:00
goto :eof
2025-09-11 15:52:38 +08:00
:: 启动服务
2025-09-11 16:14:15 +08:00
:start_service
call :check_node
call :check_npm
call :check_pm2
call :check_dependencies
echo %ESC%[92m正在使用PM2启动结伴客后端服务...%ESC%[0m
pm2 start ecosystem.config.js --env production
if %errorlevel% equ 0 (
echo %ESC%[92m✓ 服务已通过PM2启动%ESC%[0m
echo %ESC%[92m✓ 执行 'pm2 list' 查看运行中的应用%ESC%[0m
echo %ESC%[92m✓ 执行 'pm2 logs' 查看应用日志%ESC%[0m
) else (
echo %ESC%[91m✗ 服务启动失败%ESC%[0m
exit /b 1
)
goto :eof
2025-09-11 15:52:38 +08:00
2025-09-11 16:14:15 +08:00
:: 停止服务
:stop_service
call :check_pm2
echo %ESC%[92m正在停止PM2管理的服务...%ESC%[0m
pm2 stop ecosystem.config.js
2025-09-11 15:52:38 +08:00
if %errorlevel% equ 0 (
2025-09-11 16:14:15 +08:00
echo %ESC%[92m✓ 服务已停止%ESC%[0m
2025-09-11 15:52:38 +08:00
) else (
2025-09-11 16:14:15 +08:00
echo %ESC%[93m可能没有正在运行的服务%ESC%[0m
2025-09-11 15:52:38 +08:00
)
2025-09-11 16:14:15 +08:00
goto :eof
:: 重启服务
:restart_service
call :check_pm2
echo %ESC%[92m正在重启PM2管理的服务...%ESC%[0m
:: 检查应用是否在运行,如果未运行则直接启动
call :is_app_running
if %errorlevel% neq 0 (
echo %ESC%[93m应用未在运行正在启动...%ESC%[0m
pm2 start ecosystem.config.js --env production
) else (
pm2 restart ecosystem.config.js --env production
)
if %errorlevel% equ 0 (
echo %ESC%[92m✓ 服务已重启%ESC%[0m
) else (
echo %ESC%[91m✗ 服务重启失败%ESC%[0m
exit /b 1
)
goto :eof
:: 删除应用
:delete_service
call :check_pm2
echo %ESC%[92m正在从PM2中删除应用...%ESC%[0m
:: 检查应用是否存在
call :is_app_running
if %errorlevel% neq 0 (
echo %ESC%[93m应用不存在或未在运行%ESC%[0m
goto :eof
)
pm2 delete ecosystem.config.js
if %errorlevel% equ 0 (
echo %ESC%[92m✓ 应用已从PM2中删除%ESC%[0m
) else (
echo %ESC%[93m删除应用时遇到问题%ESC%[0m
)
goto :eof
:: 查看服务状态
:status_service
call :check_pm2
echo %ESC%[92mPM2应用状态:%ESC%[0m
pm2 list
goto :eof
:: 列出所有应用
:list_service
call :check_pm2
echo %ESC%[92mPM2应用列表:%ESC%[0m
pm2 list
goto :eof
2025-09-11 15:52:38 +08:00
2025-09-11 16:14:15 +08:00
:: 查看日志
:logs_service
call :check_pm2
echo %ESC%[92m正在查看应用日志...%ESC%[0m
pm2 logs ecosystem.config.js
goto :eof