Files
leaudit-platform-frontend/ubuntu-nginx-setup.sh
T

342 lines
8.6 KiB
Bash

#!/bin/bash
# Ubuntu环境下Nginx多客户端配置快速部署脚本
# 使用方法: chmod +x ubuntu-nginx-setup.sh && ./ubuntu-nginx-setup.sh
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"
}
# 检查是否为root用户
check_root() {
if [[ $EUID -eq 0 ]]; then
log_warning "检测到root用户,建议使用sudo执行此脚本"
fi
}
# 检查系统要求
check_requirements() {
log_info "检查系统要求..."
# 检查操作系统
if [[ ! -f /etc/os-release ]]; then
log_error "无法检测操作系统版本"
exit 1
fi
. /etc/os-release
log_info "操作系统: $PRETTY_NAME"
# 检查网络连接
if ! ping -c 1 172.16.0.34 &> /dev/null; then
log_warning "无法连接到开发服务器 172.16.0.34,请确保网络连接正常"
fi
log_success "系统要求检查完成"
}
# 安装Nginx
install_nginx() {
log_info "检查Nginx安装状态..."
if command -v nginx &> /dev/null; then
NGINX_VERSION=$(nginx -v 2>&1 | cut -d' ' -f3 | cut -d'/' -f2)
log_info "Nginx已安装,版本: $NGINX_VERSION"
return 0
fi
log_info "安装Nginx..."
sudo apt update
sudo apt install -y nginx
# 启动并启用Nginx服务
sudo systemctl start nginx
sudo systemctl enable nginx
log_success "Nginx安装完成"
}
# 备份原始配置
backup_config() {
log_info "备份原始Nginx配置..."
BACKUP_DIR="/etc/nginx/backup-$(date +%Y%m%d-%H%M%S)"
sudo mkdir -p "$BACKUP_DIR"
# 备份主要配置文件
if [[ -f /etc/nginx/nginx.conf ]]; then
sudo cp /etc/nginx/nginx.conf "$BACKUP_DIR/"
fi
if [[ -f /etc/nginx/sites-available/default ]]; then
sudo cp /etc/nginx/sites-available/default "$BACKUP_DIR/"
fi
# 备份现有的conf.d配置
if [[ -d /etc/nginx/conf.d ]]; then
sudo cp -r /etc/nginx/conf.d "$BACKUP_DIR/"
fi
log_success "配置已备份到: $BACKUP_DIR"
}
# 创建多客户端配置
create_multi_client_config() {
log_info "创建多客户端Nginx配置..."
# 确保conf.d目录存在
sudo mkdir -p /etc/nginx/conf.d
# 检查配置文件是否存在
if [[ ! -f "nginx-ubuntu-optimized.conf" ]]; then
log_error "找不到nginx-ubuntu-optimized.conf文件,请确保文件在当前目录"
exit 1
fi
# 复制配置文件
sudo cp nginx-ubuntu-optimized.conf /etc/nginx/conf.d/multi-client.conf
# 设置正确的权限
sudo chown root:root /etc/nginx/conf.d/multi-client.conf
sudo chmod 644 /etc/nginx/conf.d/multi-client.conf
log_success "多客户端配置已创建"
}
# 创建日志目录
setup_logging() {
log_info "设置日志目录..."
# 创建客户端日志目录
sudo mkdir -p /var/log/nginx/clients
# 设置权限
sudo chown -R www-data:www-data /var/log/nginx
sudo chmod -R 755 /var/log/nginx
# 创建日志轮转配置
sudo tee /etc/logrotate.d/nginx-clients > /dev/null <<EOF
/var/log/nginx/client-*-access.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 644 www-data www-data
postrotate
systemctl reload nginx
endscript
}
/var/log/nginx/client-*-error.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 644 www-data www-data
postrotate
systemctl reload nginx
endscript
}
EOF
log_success "日志配置完成"
}
# 配置防火墙
setup_firewall() {
log_info "配置防火墙规则..."
# 检查ufw是否安装
if command -v ufw &> /dev/null; then
# 允许Nginx端口
sudo ufw allow 5174/tcp comment "Nginx Client A"
sudo ufw allow 5175/tcp comment "Nginx Client B"
sudo ufw allow 5176/tcp comment "Nginx Client C"
sudo ufw allow 5177/tcp comment "Nginx Client D"
log_success "防火墙规则已配置"
else
log_warning "ufw未安装,跳过防火墙配置"
fi
}
# 验证配置
validate_config() {
log_info "验证Nginx配置..."
# 测试配置语法
if sudo nginx -t; then
log_success "Nginx配置语法正确"
else
log_error "Nginx配置语法错误,请检查配置文件"
exit 1
fi
}
# 重启Nginx服务
restart_nginx() {
log_info "重启Nginx服务..."
sudo systemctl reload nginx
# 检查服务状态
if sudo systemctl is-active --quiet nginx; then
log_success "Nginx服务运行正常"
else
log_error "Nginx服务启动失败"
sudo systemctl status nginx
exit 1
fi
}
# 测试端口监听
test_ports() {
log_info "测试端口监听状态..."
PORTS=(5174 5175 5176 5177)
for port in "${PORTS[@]}"; do
if ss -tuln | grep -q ":$port "; then
log_success "端口 $port 监听正常"
else
log_error "端口 $port 未监听"
fi
done
}
# 测试健康检查
test_health_checks() {
log_info "测试健康检查端点..."
PORTS=(5174 5175 5176 5177)
CLIENTS=("Client A" "Client B" "Client C" "Client D")
for i in "${!PORTS[@]}"; do
port=${PORTS[$i]}
client=${CLIENTS[$i]}
if curl -s "http://localhost:$port/health" | grep -q "OK"; then
log_success "$client (端口 $port) 健康检查通过"
else
log_warning "$client (端口 $port) 健康检查失败"
fi
done
}
# 显示测试命令
show_test_commands() {
log_info "测试命令示例:"
echo -e "\n${YELLOW}1. 健康检查:${NC}"
echo " curl http://localhost:5174/health"
echo " curl http://localhost:5175/health"
echo " curl http://localhost:5176/health"
echo " curl http://localhost:5177/health"
echo -e "\n${YELLOW}2. 测试代理功能:${NC}"
echo " curl -v http://localhost:5174/ 2>&1 | grep 'X-Client-ID'"
echo " curl -v http://localhost:5175/ 2>&1 | grep 'X-Client-ID'"
echo -e "\n${YELLOW}3. 监控日志:${NC}"
echo " sudo tail -f /var/log/nginx/client-a-access.log"
echo " sudo tail -f /var/log/nginx/client-*-error.log"
echo -e "\n${YELLOW}4. 浏览器测试:${NC}"
echo " http://$(hostname -I | awk '{print $1}'):5174"
echo " http://$(hostname -I | awk '{print $1}'):5175"
echo " http://$(hostname -I | awk '{print $1}'):5176"
echo " http://$(hostname -I | awk '{print $1}'):5177"
echo -e "\n${YELLOW}5. 环境变量测试:${NC}"
echo " CLIENT_ID=client-a npm run dev"
echo " CLIENT_ID=client-b npm run dev"
}
# 显示管理命令
show_management_commands() {
log_info "管理命令:"
echo -e "\n${YELLOW}Nginx服务管理:${NC}"
echo " sudo systemctl start nginx # 启动服务"
echo " sudo systemctl stop nginx # 停止服务"
echo " sudo systemctl restart nginx # 重启服务"
echo " sudo systemctl reload nginx # 重新加载配置"
echo " sudo systemctl status nginx # 查看状态"
echo -e "\n${YELLOW}配置管理:${NC}"
echo " sudo nginx -t # 测试配置"
echo " sudo nginx -s reload # 重新加载"
echo -e "\n${YELLOW}日志查看:${NC}"
echo " sudo tail -f /var/log/nginx/error.log"
echo " sudo tail -f /var/log/nginx/access.log"
echo -e "\n${YELLOW}端口检查:${NC}"
echo " sudo ss -tuln | grep :517"
echo " sudo lsof -i :5174"
}
# 主函数
main() {
echo -e "${GREEN}======================================${NC}"
echo -e "${GREEN} Ubuntu Nginx多客户端配置部署脚本 ${NC}"
echo -e "${GREEN}======================================${NC}"
echo
check_root
check_requirements
install_nginx
backup_config
create_multi_client_config
setup_logging
setup_firewall
validate_config
restart_nginx
echo
log_success "多客户端Nginx配置部署完成!"
echo
test_ports
test_health_checks
echo
show_test_commands
show_management_commands
echo
log_info "部署完成!现在可以开始测试多客户端功能。"
log_info "请确保开发服务器在 172.16.0.34:5173 上运行。"
echo
}
# 脚本入口
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi