java_demo/server-setup-simple.sh

266 lines
7.0 KiB
Bash
Raw Normal View History

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