#!/bin/bash # 目标服务器配置脚本 (简化版 - 支持用户名密码) # 在 116.62.163.84 服务器上运行 echo "🚀 开始配置Jenkins部署目标服务器..." # 更新系统 echo "📦 更新系统包..." yum update -y || apt update -y # 检查Docker是否已安装 if command -v docker &> /dev/null; then echo "✅ Docker已安装" docker --version else echo "❌ 请先安装Docker" exit 1 fi # 启动Docker服务 echo "🐳 启动Docker服务..." systemctl start docker systemctl enable docker # 创建应用目录 echo "📁 创建应用目录..." mkdir -p /opt/jenkins-demo mkdir -p /opt/jenkins-demo/logs mkdir -p /opt/jenkins-demo/backup # 设置防火墙规则 echo "🔥 配置防火墙规则..." if command -v firewall-cmd &> /dev/null; then # CentOS/RHEL firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload elif command -v ufw &> /dev/null; then # Ubuntu ufw allow 80/tcp ufw allow 8080/tcp ufw --force enable fi # 配置SSH(如果使用密码认证) echo "🔐 配置SSH..." # 确保SSH服务运行 systemctl start sshd systemctl enable sshd # 如果需要启用密码认证(不推荐生产环境) # sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config # systemctl restart sshd # 创建部署脚本 echo "📝 创建部署脚本..." cat > /opt/jenkins-demo/deploy-local.sh << 'EOF' #!/bin/bash # 本地部署脚本 APP_NAME="jenkins-demo" CONTAINER_NAME_PROD="jenkins-demo-prod" CONTAINER_NAME_TEST="jenkins-demo-test" case "$1" in "prod") echo "🎯 部署生产环境..." docker stop $CONTAINER_NAME_PROD || true docker rm $CONTAINER_NAME_PROD || true docker run -d --name $CONTAINER_NAME_PROD \ -p 80:8080 \ --restart unless-stopped \ -e SPRING_PROFILES_ACTIVE=prod \ -e JAVA_OPTS="-Xms512m -Xmx1024m" \ -v /opt/jenkins-demo/logs:/app/logs \ $APP_NAME:latest echo "✅ 生产环境部署完成" ;; "test") echo "🧪 部署测试环境..." docker stop $CONTAINER_NAME_TEST || true docker rm $CONTAINER_NAME_TEST || true docker run -d --name $CONTAINER_NAME_TEST \ -p 8080:8080 \ --restart unless-stopped \ -e SPRING_PROFILES_ACTIVE=test \ -v /opt/jenkins-demo/logs:/app/logs \ $APP_NAME:latest echo "✅ 测试环境部署完成" ;; "status") echo "📊 应用状态:" docker ps -a --filter name=jenkins-demo ;; "logs") echo "📄 应用日志:" docker logs -f ${2:-jenkins-demo-prod} ;; "backup") echo "💾 备份当前版本..." BACKUP_TAG="backup-$(date +%Y%m%d-%H%M%S)" docker tag $APP_NAME:latest $APP_NAME:$BACKUP_TAG echo "✅ 备份完成: $APP_NAME:$BACKUP_TAG" ;; *) echo "用法: $0 {prod|test|status|logs|backup}" exit 1 ;; esac EOF chmod +x /opt/jenkins-demo/deploy-local.sh # 创建健康检查脚本 cat > /opt/jenkins-demo/health-check.sh << 'EOF' #!/bin/bash # 健康检查脚本 PROD_URL="http://localhost/api/health" TEST_URL="http://localhost:8080/api/health" echo "🏥 执行应用健康检查..." echo "检查生产环境:" curl -s -o /dev/null -w "状态码: %{http_code}\n" $PROD_URL || echo "生产环境无响应" echo "检查测试环境:" curl -s -o /dev/null -w "状态码: %{http_code}\n" $TEST_URL || echo "测试环境无响应" echo "Docker容器状态:" docker ps --filter name=jenkins-demo --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" EOF chmod +x /opt/jenkins-demo/health-check.sh # 创建清理脚本 cat > /opt/jenkins-demo/cleanup.sh << 'EOF' #!/bin/bash echo "🧹 清理Docker资源..." # 清理停止的容器 docker container prune -f # 清理未使用的镜像 docker image prune -f # 清理未使用的网络 docker network prune -f # 清理未使用的卷 docker volume prune -f # 显示磁盘使用情况 echo "💾 磁盘使用情况:" df -h / echo "🐳 Docker磁盘使用情况:" docker system df echo "✅ 清理完成" EOF chmod +x /opt/jenkins-demo/cleanup.sh # 设置定时清理任务 echo "⏰ 设置定时清理任务..." (crontab -l 2>/dev/null; echo "0 2 * * 0 /opt/jenkins-demo/cleanup.sh >> /var/log/docker-cleanup.log 2>&1") | crontab - # 创建监控脚本 cat > /opt/jenkins-demo/monitor.sh << 'EOF' #!/bin/bash # 应用监控脚本 LOG_FILE="/var/log/jenkins-demo-monitor.log" # 记录日志 log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE } # 检查容器是否运行 check_container() { local container_name=$1 if docker ps --filter name=$container_name --filter status=running -q | grep -q .; then log "✅ $container_name 运行正常" return 0 else log "❌ $container_name 未运行" return 1 fi } # 检查应用健康状态 check_health() { local url=$1 local name=$2 local status=$(curl -s -o /dev/null -w "%{http_code}" $url) if [ "$status" = "200" ]; then log "✅ $name 健康检查通过" return 0 else log "❌ $name 健康检查失败,状态码: $status" return 1 fi } # 主监控逻辑 main() { log "🔍 开始监控检查..." # 检查生产环境 if check_container "jenkins-demo-prod"; then check_health "http://localhost/api/health" "生产环境" fi # 检查测试环境 if check_container "jenkins-demo-test"; then check_health "http://localhost:8080/api/health" "测试环境" fi log "✅ 监控检查完成" } main EOF chmod +x /opt/jenkins-demo/monitor.sh # 设置监控定时任务 echo "📊 设置监控定时任务..." (crontab -l 2>/dev/null; echo "*/5 * * * * /opt/jenkins-demo/monitor.sh") | crontab - # 显示服务器信息 echo "" echo "🎉 服务器配置完成!" echo "" echo "📋 服务器信息:" echo "IP地址: $(hostname -I | awk '{print $1}')" echo "操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'=' -f2 | tr -d '\"')" echo "Docker版本: $(docker --version)" echo "" echo "📁 应用目录: /opt/jenkins-demo" echo "📄 日志目录: /opt/jenkins-demo/logs" echo "💾 备份目录: /opt/jenkins-demo/backup" echo "" echo "🔧 可用脚本:" echo " 部署脚本: /opt/jenkins-demo/deploy-local.sh" echo " 健康检查: /opt/jenkins-demo/health-check.sh" echo " 清理脚本: /opt/jenkins-demo/cleanup.sh" echo " 监控脚本: /opt/jenkins-demo/monitor.sh" echo "" echo "🌐 访问地址:" echo " 生产环境: http://$(hostname -I | awk '{print $1}')/api/health" echo " 测试环境: http://$(hostname -I | awk '{print $1}'):8080/api/health" echo "" echo "💡 使用提示:" echo " sudo /opt/jenkins-demo/deploy-local.sh prod # 部署生产环境" echo " sudo /opt/jenkins-demo/deploy-local.sh test # 部署测试环境" echo " sudo /opt/jenkins-demo/health-check.sh # 健康检查" echo " sudo /opt/jenkins-demo/cleanup.sh # 清理资源" echo ""