#!/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 < /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