java_demo/server-setup.sh

169 lines
4.4 KiB
Bash
Raw Normal View History

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