#!/bin/bash # Jenkins Demo 目标服务器配置脚本 # 运行环境:116.62.163.84 set -e echo "🚀 开始配置Jenkins Demo部署环境..." # 1. 更新系统 echo "📦 更新系统包..." yum update -y # 2. 安装必要工具 echo "🔧 安装必要工具..." yum install -y curl wget git # 3. 配置Docker(假设已安装) echo "🐳 配置Docker..." systemctl enable docker systemctl start docker # 4. 创建应用目录 echo "📁 创建应用目录..." mkdir -p /opt/jenkins-demo mkdir -p /opt/jenkins-demo/logs mkdir -p /opt/jenkins-demo/backup # 5. 创建日志目录 echo "📋 创建日志目录..." mkdir -p /var/log/jenkins-demo chmod 755 /var/log/jenkins-demo # 6. 配置防火墙(如果需要) echo "🔥 配置防火墙..." # 开放应用端口 firewall-cmd --permanent --add-port=80/tcp || true firewall-cmd --permanent --add-port=8080/tcp || true firewall-cmd --reload || true # 7. 创建应用用户(可选,增强安全性) echo "👤 创建应用用户..." useradd -r -s /bin/false -d /opt/jenkins-demo jenkins-demo || true chown -R jenkins-demo:jenkins-demo /opt/jenkins-demo || true chown -R jenkins-demo:jenkins-demo /var/log/jenkins-demo || true # 8. 配置Docker用户权限 echo "🔐 配置Docker权限..." usermod -aG docker jenkins-demo || true # 9. 创建部署脚本 echo "📜 创建部署脚本..." cat > /opt/jenkins-demo/deploy.sh << 'EOF' #!/bin/bash # 应用部署脚本 APP_NAME="jenkins-demo" CONTAINER_NAME="jenkins-demo-prod" IMAGE_TAG="${1:-latest}" echo "🚀 开始部署 ${APP_NAME}:${IMAGE_TAG}" # 停止现有容器 echo "⏹️ 停止现有容器..." docker stop ${CONTAINER_NAME} 2>/dev/null || true docker rm ${CONTAINER_NAME} 2>/dev/null || true # 备份当前镜像 echo "💾 备份当前镜像..." docker tag ${APP_NAME}:latest ${APP_NAME}:backup-$(date +%Y%m%d-%H%M%S) 2>/dev/null || true # 运行新容器 echo "🏃 启动新容器..." docker run -d \ --name ${CONTAINER_NAME} \ --restart unless-stopped \ -p 80:8080 \ -e SPRING_PROFILES_ACTIVE=prod \ -e JAVA_OPTS="-Xms512m -Xmx1024m" \ -v /var/log/jenkins-demo:/app/logs \ --health-cmd="curl -f http://localhost:8080/api/health || exit 1" \ --health-interval=30s \ --health-timeout=10s \ --health-retries=3 \ --health-start-period=60s \ ${APP_NAME}:${IMAGE_TAG} echo "✅ 部署完成!" echo "🌐 应用访问地址: http://116.62.163.84" echo "🏥 健康检查: http://116.62.163.84/api/health" EOF chmod +x /opt/jenkins-demo/deploy.sh # 10. 创建清理脚本 echo "🧹 创建清理脚本..." cat > /opt/jenkins-demo/cleanup.sh << 'EOF' #!/bin/bash echo "🧹 开始清理Docker资源..." # 删除停止的容器 docker container prune -f # 删除未使用的镜像 docker image prune -f # 删除旧的备份镜像(保留最近5个) echo "🗑️ 清理旧备份镜像..." docker images jenkins-demo --format "table {{.Repository}}:{{.Tag}}" | \ grep "backup-" | tail -n +6 | xargs -r docker rmi echo "✅ 清理完成!" EOF chmod +x /opt/jenkins-demo/cleanup.sh # 11. 设置定时清理任务 echo "⏰ 设置定时清理任务..." (crontab -l 2>/dev/null; echo "0 2 * * 0 /opt/jenkins-demo/cleanup.sh >> /var/log/jenkins-demo/cleanup.log 2>&1") | crontab - # 12. 创建监控脚本 echo "📊 创建监控脚本..." cat > /opt/jenkins-demo/monitor.sh << 'EOF' #!/bin/bash APP_NAME="jenkins-demo-prod" HEALTH_URL="http://localhost/api/health" # 检查容器状态 if ! docker ps | grep -q ${APP_NAME}; then echo "❌ 容器 ${APP_NAME} 未运行" exit 1 fi # 检查健康状态 HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" ${HEALTH_URL}) if [ "$HTTP_CODE" != "200" ]; then echo "❌ 应用健康检查失败,HTTP状态码: ${HTTP_CODE}" exit 1 fi echo "✅ 应用运行正常" EOF chmod +x /opt/jenkins-demo/monitor.sh # 13. 显示配置摘要 echo " 🎉 服务器配置完成! 📁 应用目录: /opt/jenkins-demo 📋 日志目录: /var/log/jenkins-demo 🚀 部署脚本: /opt/jenkins-demo/deploy.sh 🧹 清理脚本: /opt/jenkins-demo/cleanup.sh 📊 监控脚本: /opt/jenkins-demo/monitor.sh 🔧 下一步操作: 1. 在Jenkins中配置SSH密钥 2. 测试SSH连接:ssh root@116.62.163.84 3. 运行第一次部署 📝 常用命令: - 部署应用: /opt/jenkins-demo/deploy.sh [版本号] - 检查状态: /opt/jenkins-demo/monitor.sh - 查看日志: docker logs jenkins-demo-prod - 清理资源: /opt/jenkins-demo/cleanup.sh "