Files
leaudit-platform-frontend/deploy-multi-client.sh
T

255 lines
5.6 KiB
Bash
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
# 多客户端部署脚本
# 用于部署和管理3个不同地区客户端的反向代理服务
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查依赖
check_dependencies() {
log_info "检查系统依赖..."
# 检查PM2
if ! command -v pm2 &> /dev/null; then
log_error "PM2 未安装,请先安装: npm install -g pm2"
exit 1
fi
# 检查Nginx
if ! command -v nginx &> /dev/null; then
log_warning "Nginx 未安装,请手动安装并配置"
fi
# 检查Node.js
if ! command -v node &> /dev/null; then
log_error "Node.js 未安装"
exit 1
fi
log_success "依赖检查完成"
}
# 构建项目
build_project() {
log_info "构建项目..."
# 安装依赖
if [ -f "package-lock.json" ]; then
npm ci
else
npm install
fi
# 构建项目
npm run build
log_success "项目构建完成"
}
# 创建日志目录
create_log_dirs() {
log_info "创建日志目录..."
mkdir -p logs
mkdir -p /var/log/nginx 2>/dev/null || log_warning "无法创建nginx日志目录,请手动创建"
log_success "日志目录创建完成"
}
# 部署PM2应用
deploy_pm2() {
log_info "部署PM2应用..."
# 停止现有应用
pm2 delete all 2>/dev/null || log_warning "没有运行中的PM2应用"
# 启动新应用
pm2 start ecosystem.config.cjs
# 保存PM2配置
pm2 save
# 设置开机自启
pm2 startup
log_success "PM2应用部署完成"
}
# 配置Nginx
configure_nginx() {
log_info "配置Nginx..."
# 检查配置文件
if [ ! -f "nginx-multi-client.conf" ]; then
log_error "nginx-multi-client.conf 文件不存在"
exit 1
fi
# 复制配置文件到nginx目录
if [ -d "/etc/nginx/sites-available" ]; then
sudo cp nginx-multi-client.conf /etc/nginx/sites-available/docreview-multi-client
sudo ln -sf /etc/nginx/sites-available/docreview-multi-client /etc/nginx/sites-enabled/
elif [ -d "/etc/nginx/conf.d" ]; then
sudo cp nginx-multi-client.conf /etc/nginx/conf.d/docreview-multi-client.conf
else
log_warning "请手动配置Nginx,配置文件: nginx-multi-client.conf"
return
fi
# 测试nginx配置
sudo nginx -t
# 重载nginx
sudo systemctl reload nginx
log_success "Nginx配置完成"
}
# 检查服务状态
check_status() {
log_info "检查服务状态..."
echo "\n=== PM2 应用状态 ==="
pm2 status
echo "\n=== 端口监听状态 ==="
netstat -tlnp | grep -E ':(51701|51702|51703|51704)'
echo "\n=== 服务健康检查 ==="
for port in 51701 51702 51703 51704; do
if curl -s "http://10.79.97.17:$port/health" > /dev/null; then
log_success "端口 $port: 正常"
else
log_error "端口 $port: 异常"
fi
done
}
# 显示帮助信息
show_help() {
echo "多客户端部署脚本"
echo ""
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " deploy 完整部署(构建+PM2+Nginx"
echo " build 仅构建项目"
echo " pm2 仅部署PM2应用"
echo " nginx 仅配置Nginx"
echo " status 检查服务状态"
echo " stop 停止所有服务"
echo " restart 重启所有服务"
echo " logs 查看日志"
echo " help 显示帮助信息"
echo ""
echo "客户端访问地址:"
echo " 客户端A: http://10.79.97.17:51701"
echo " 客户端B: http://10.79.97.17:51702"
echo " 客户端C: http://10.79.97.17:51704"
echo " 主服务: http://10.79.97.17:51703"
}
# 停止服务
stop_services() {
log_info "停止服务..."
pm2 stop all
log_success "服务已停止"
}
# 重启服务
restart_services() {
log_info "重启服务..."
pm2 restart all
log_success "服务已重启"
}
# 查看日志
show_logs() {
echo "选择要查看的日志:"
echo "1) 主服务日志"
echo "2) 客户端A日志"
echo "3) 客户端B日志"
echo "4) 客户端C日志"
echo "5) 所有日志"
read -p "请选择 (1-5): " choice
case $choice in
1) pm2 logs docreview-main ;;
2) pm2 logs docreview-client-a ;;
3) pm2 logs docreview-client-b ;;
4) pm2 logs docreview-client-c ;;
5) pm2 logs ;;
*) log_error "无效选择" ;;
esac
}
# 主函数
main() {
case "${1:-help}" in
"deploy")
check_dependencies
create_log_dirs
build_project
deploy_pm2
configure_nginx
check_status
;;
"build")
build_project
;;
"pm2")
check_dependencies
create_log_dirs
deploy_pm2
;;
"nginx")
configure_nginx
;;
"status")
check_status
;;
"stop")
stop_services
;;
"restart")
restart_services
;;
"logs")
show_logs
;;
"help")
show_help
;;
*)
log_error "未知选项: $1"
show_help
exit 1
;;
esac
}
# 执行主函数
main "$@"