mirror of
https://github.com/DullJZ/s3-balance.git
synced 2026-06-27 22:11:22 +08:00
309 lines
8.3 KiB
Bash
Executable File
309 lines
8.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# S3 Balance 快速部署脚本
|
|
# 支持 Docker、Docker Compose、Kubernetes、HELM 四种部署方式
|
|
|
|
set -e
|
|
|
|
# 显示帮助信息
|
|
show_help() {
|
|
echo "S3 Balance 快速部署脚本"
|
|
echo ""
|
|
echo "用法: ./start.sh [选项]"
|
|
echo ""
|
|
echo "选项:"
|
|
echo " -m, --mode MODE 部署模式: docker|compose|kubernetes|helm"
|
|
echo " -e, --env ENV 环境: dev|test|prod (默认: dev)"
|
|
echo " -b, --build 构建镜像"
|
|
echo " -p, --port PORT 服务端口 (默认: 8080)"
|
|
echo " -h, --help 显示帮助信息"
|
|
echo ""
|
|
echo "示例:"
|
|
echo " ./start.sh -m compose -e prod"
|
|
echo " ./start.sh -m kubernetes --build"
|
|
echo " ./start.sh -m helm -e test"
|
|
}
|
|
|
|
# 默认参数
|
|
MODE="compose"
|
|
ENV="dev"
|
|
BUILD=false
|
|
PORT="8080"
|
|
|
|
# 解析命令行参数
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-m|--mode)
|
|
MODE="$2"
|
|
shift 2
|
|
;;
|
|
-e|--env)
|
|
ENV="$2"
|
|
shift 2
|
|
;;
|
|
-b|--build)
|
|
BUILD=true
|
|
shift
|
|
;;
|
|
-p|--port)
|
|
PORT="$2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "未知选项: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# 输出配置信息
|
|
echo "🚀 S3 Balance 快速部署开始..."
|
|
echo "📋 配置信息:"
|
|
echo " 部署模式: $MODE"
|
|
echo " 环境: $ENV"
|
|
echo " 构建镜像: $BUILD"
|
|
echo " 服务端口: $PORT"
|
|
echo ""
|
|
|
|
# 检查必要工具
|
|
check_requirements() {
|
|
local tool=$1
|
|
local tool_name=$2
|
|
if ! command -v $tool &> /dev/null; then
|
|
echo "❌ $tool_name 未安装"
|
|
return 1
|
|
fi
|
|
echo "✅ $tool_name 已安装"
|
|
}
|
|
|
|
# Docker 模式部署
|
|
deploy_docker() {
|
|
echo "📦 Docker 单容器部署..."
|
|
|
|
check_requirements docker "Docker" || exit 1
|
|
|
|
if [ "$BUILD" = true ]; then
|
|
echo "🔨 构建 Docker 镜像..."
|
|
docker build -t s3-balance:$MODE-$ENV -f deploy/docker/Dockerfile .
|
|
fi
|
|
|
|
echo "🚀 启动容器..."
|
|
docker run -d \
|
|
--name s3-balance-$ENV \
|
|
-p $PORT:8080 \
|
|
-v $(pwd)/deploy/docker/config.docker.yaml:/app/config/config.yaml \
|
|
-v s3-balance-data:/app/data \
|
|
-e TZ=Asia/Shanghai \
|
|
--restart unless-stopped \
|
|
s3-balance:$MODE-$ENV
|
|
|
|
echo "✅ Docker 容器已启动"
|
|
}
|
|
|
|
# Docker Compose 模式部署
|
|
deploy_compose() {
|
|
echo "🐳 Docker Compose 部署..."
|
|
|
|
check_requirements docker "Docker" || exit 1
|
|
check_requirements docker-compose "Docker Compose" || exit 1
|
|
|
|
if [ "$BUILD" = true ]; then
|
|
echo "🔨 构建 Docker 镜像..."
|
|
cd deploy/docker
|
|
docker build -t s3-balance:$MODE-$ENV -f Dockerfile ../..
|
|
fi
|
|
|
|
echo "🚀 启动服务栈..."
|
|
cd deploy/docker
|
|
|
|
# 修改 docker-compose.yml 中的端口
|
|
if [ "$PORT" != "8080" ]; then
|
|
sed -i.bak "s/8080:8080/$PORT:8080/" docker-compose.yml
|
|
fi
|
|
|
|
docker-compose up -d
|
|
|
|
# 恢复配置文件
|
|
if [ "$PORT" != "8080" ]; then
|
|
mv docker-compose.yml.bak docker-compose.yml
|
|
fi
|
|
|
|
cd ../..
|
|
echo "✅ Docker Compose 服务已启动"
|
|
}
|
|
|
|
# Kubernetes 模式部署
|
|
deploy_kubernetes() {
|
|
echo "☸️ Kubernetes 部署..."
|
|
|
|
check_requirements kubectl "kubectl" || exit 1
|
|
check_requirements kubectl "Kubernetes 集群连接" || exit 1
|
|
|
|
echo "🚀 应用 Kubernetes 配置..."
|
|
cd deploy/kubernetes
|
|
|
|
# 替换环境变量
|
|
if [ "$ENV" != "dev" ]; then
|
|
# 根据环境替换镜像标签
|
|
sed -i.bak 's/image: s3-balance:latest/image: s3-balance:'"$ENV"'/' deployment.yaml
|
|
fi
|
|
|
|
kubectl apply -f namespace.yaml
|
|
kubectl apply -f configmap.yaml
|
|
kubectl apply -f deployment.yaml
|
|
kubectl apply -f service.yaml
|
|
kubectl apply -f ingress.yaml
|
|
|
|
# 如果是生产环境,应用 HPA
|
|
if [ "$ENV" = "prod" ]; then
|
|
kubectl apply -f hpa.yaml
|
|
echo "📊 已启用水平自动扩缩容"
|
|
fi
|
|
|
|
# 恢复配置文件
|
|
if [ -f deployment.yaml.bak ]; then
|
|
mv deployment.yaml.bak deployment.yaml
|
|
fi
|
|
|
|
cd ../..
|
|
echo "✅ Kubernetes 部署完成"
|
|
}
|
|
|
|
# HELM 模式部署
|
|
deploy_helm() {
|
|
echo "🔧 HELM Chart 部署..."
|
|
|
|
check_requirements helm "HELM" || exit 1
|
|
check_requirements kubectl "kubectl" || exit 1
|
|
|
|
echo "🚀 部署 HELM Chart..."
|
|
cd deploy/helm
|
|
|
|
# 根据环境选择 values 文件
|
|
VALUES_FILE="values.yaml"
|
|
if [ "$ENV" = "prod" ] && [ -f "production-values.yaml" ]; then
|
|
VALUES_FILE="production-values.yaml"
|
|
fi
|
|
|
|
# 安装或升级 Chart
|
|
if helm status s3-balance-$ENV 2>/dev/null; then
|
|
echo "⬆️ 升级现有 HELM 发布..."
|
|
helm upgrade s3-balance-$ENV s3-balance -f $VALUES_FILE \
|
|
--namespace s3-balance-$ENV \
|
|
--create-namespace \
|
|
--wait
|
|
else
|
|
echo "📦 安装新的 HELM Chart..."
|
|
helm install s3-balance-$ENV s3-balance -f $VALUES_FILE \
|
|
--namespace s3-balance-$ENV \
|
|
--create-namespace \
|
|
--wait
|
|
fi
|
|
|
|
cd ../..
|
|
echo "✅ HELM Chart 部署完成"
|
|
}
|
|
|
|
# 通用后处理
|
|
post_deploy() {
|
|
echo ""
|
|
echo "⏳ 等待服务启动..."
|
|
sleep 10
|
|
|
|
case $MODE in
|
|
docker)
|
|
echo ""
|
|
echo "✅ Docker 部署完成!"
|
|
echo "🔗 访问地址:"
|
|
echo " 📊 指标端点: http://localhost:$PORT/metrics"
|
|
echo ""
|
|
echo "📝 Docker 命令:"
|
|
echo " docker logs -f s3-balance-$ENV # 查看日志"
|
|
echo " docker stop s3-balance-$ENV # 停止服务"
|
|
echo " docker rm s3-balance-$ENV # 删除容器"
|
|
;;
|
|
|
|
compose)
|
|
echo ""
|
|
echo "✅ Docker Compose 部署完成!"
|
|
echo "🔗 访问地址:"
|
|
echo " 📊 Grafana 面板: http://localhost:3000 (admin/admin123)"
|
|
echo " 🔥 Prometheus: http://localhost:9090"
|
|
echo " 📈 指标端点: http://localhost:$PORT/metrics"
|
|
echo ""
|
|
echo "📝 Compose 命令:"
|
|
echo " cd deploy/docker && docker-compose logs -f # 查看日志"
|
|
echo " cd deploy/docker && docker-compose down # 停止服务"
|
|
;;
|
|
|
|
kubernetes)
|
|
echo ""
|
|
echo "✅ Kubernetes 部署完成!"
|
|
echo "🔗 检查状态:"
|
|
echo " kubectl get pods -n s3-balance"
|
|
echo " kubectl get svc -n s3-balance"
|
|
echo " kubectl get ingress -n s3-balance"
|
|
echo ""
|
|
echo "📋 常用命令:"
|
|
echo " kubectl logs -f deployment/s3-balance-deployment -n s3-balance"
|
|
echo " kubectl scale deployment s3-balance-deployment --replicas=5 -n s3-balance"
|
|
;;
|
|
|
|
helm)
|
|
echo ""
|
|
echo "✅ HELM Chart 部署完成!"
|
|
echo "🔗 检查状态:"
|
|
echo " helm status s3-balance-$ENV -n s3-balance-$ENV"
|
|
echo " kubectl get pods -n s3-balance-$ENV"
|
|
echo " kubectl get svc -n s3-balance-$ENV"
|
|
echo ""
|
|
echo "🔧 HELM 命令:"
|
|
echo " helm uninstall s3-balance-$ENV -n s3-balance-$ENV"
|
|
echo " helm list -A"
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
echo "📊 监控指标查询:"
|
|
echo " - 存储桶健康: s3_balance_bucket_healthy"
|
|
echo " - QPS: rate(s3_balance_s3_operations_total[1m])"
|
|
echo " - 延迟: histogram_quantile(0.95, s3_balance_s3_operation_duration_seconds_bucket)"
|
|
echo ""
|
|
echo "🎉 部署完成!享受 S3 Balance 服务!"
|
|
}
|
|
|
|
# 主执行逻辑
|
|
main() {
|
|
echo "🚀 开始部署 S3 Balance..."
|
|
|
|
# 根据模式执行部署
|
|
case $MODE in
|
|
docker)
|
|
deploy_docker
|
|
;;
|
|
compose)
|
|
deploy_compose
|
|
;;
|
|
kubernetes)
|
|
deploy_kubernetes
|
|
;;
|
|
helm)
|
|
deploy_helm
|
|
;;
|
|
*)
|
|
echo "❌ 未知部署模式: $MODE"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
post_deploy
|
|
}
|
|
|
|
# 执行主函数
|
|
main |