java_demo/server-setup-simple.sh
wangtianqi abdb259a9f 更新Jenkins配置支持SSH用户名密码认证 + 添加详细的Jenkins面板操作指南
- 修改Jenkinsfile支持SSH用户名密码认证方式
- 添加JENKINS_PANEL_GUIDE.md详细操作指南
- 添加QUICK_START.md快速配置清单
- 添加服务器配置脚本支持用户名密码认证
- 更新配置文档和部署说明
2025-06-23 18:39:00 +08:00

266 lines
7.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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