162 lines
4.0 KiB
Bash
Executable File
162 lines
4.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 项目管理主脚本
|
|
set -euo pipefail
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# 项目根目录
|
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 显示项目状态
|
|
show_status() {
|
|
log_info "=== 项目状态总览 ==="
|
|
echo ""
|
|
|
|
# Docker Swarm 状态
|
|
log_info "Docker Swarm 状态:"
|
|
if docker info --format '{{.Swarm.LocalNodeState}}' 2>/dev/null | grep -q "active"; then
|
|
log_success "✓ Docker Swarm 已激活"
|
|
docker node ls 2>/dev/null | head -n 5
|
|
else
|
|
log_warning "✗ Docker Swarm 未激活"
|
|
fi
|
|
echo ""
|
|
|
|
# OpenTofu 状态
|
|
log_info "OpenTofu 状态:"
|
|
if command -v tofu &> /dev/null; then
|
|
local version=$(tofu version | head -n1)
|
|
log_success "✓ OpenTofu 已安装: $version"
|
|
else
|
|
log_warning "✗ OpenTofu 未安装"
|
|
fi
|
|
echo ""
|
|
|
|
# 部署的堆栈
|
|
log_info "已部署的 Docker Stack:"
|
|
if docker info --format '{{.Swarm.LocalNodeState}}' 2>/dev/null | grep -q "active"; then
|
|
docker stack ls 2>/dev/null || log_warning "无堆栈部署"
|
|
else
|
|
log_warning "Swarm 未激活,无法查看堆栈"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
# 快速部署
|
|
quick_deploy() {
|
|
log_info "=== 快速部署 ==="
|
|
|
|
# 检查 Swarm
|
|
if ! docker info --format '{{.Swarm.LocalNodeState}}' 2>/dev/null | grep -q "active"; then
|
|
log_info "初始化 Docker Swarm..."
|
|
"${PROJECT_ROOT}/swarm/scripts/swarm-manager.sh" init
|
|
fi
|
|
|
|
# 部署 Traefik
|
|
log_info "部署 Traefik 反向代理..."
|
|
"${PROJECT_ROOT}/swarm/scripts/swarm-manager.sh" deploy traefik "${PROJECT_ROOT}/swarm/stacks/traefik-swarm-stack.yml"
|
|
|
|
# 等待 Traefik 启动
|
|
log_info "等待 Traefik 启动..."
|
|
sleep 10
|
|
|
|
# 部署示例服务
|
|
log_info "部署示例服务..."
|
|
"${PROJECT_ROOT}/swarm/scripts/swarm-manager.sh" deploy demo "${PROJECT_ROOT}/swarm/stacks/demo-services-stack.yml"
|
|
|
|
log_success "快速部署完成!"
|
|
echo ""
|
|
log_info "访问地址:"
|
|
echo " - Traefik Dashboard: http://localhost:8080"
|
|
echo " - 示例应用: 请查看 demo 堆栈的服务配置"
|
|
}
|
|
|
|
# 清理环境
|
|
cleanup() {
|
|
log_info "=== 清理环境 ==="
|
|
|
|
# 停止所有堆栈
|
|
log_info "停止所有 Docker Stack..."
|
|
docker stack ls --format "{{.Name}}" 2>/dev/null | while read -r stack; do
|
|
if [[ -n "$stack" ]]; then
|
|
log_info "删除堆栈: $stack"
|
|
docker stack rm "$stack"
|
|
fi
|
|
done
|
|
|
|
# 等待服务清理
|
|
log_info "等待服务清理..."
|
|
sleep 5
|
|
|
|
log_success "环境清理完成"
|
|
}
|
|
|
|
# 显示帮助
|
|
show_help() {
|
|
echo "项目管理脚本"
|
|
echo ""
|
|
echo "用法: $0 [命令]"
|
|
echo ""
|
|
echo "命令:"
|
|
echo " status - 显示项目状态总览"
|
|
echo " deploy - 快速部署所有服务"
|
|
echo " cleanup - 清理所有部署的服务"
|
|
echo " swarm - 打开 Swarm 管理工具"
|
|
echo " tofu - 打开 OpenTofu 管理工具"
|
|
echo " help - 显示此帮助信息"
|
|
echo ""
|
|
echo "子工具:"
|
|
echo " ./swarm/scripts/swarm-manager.sh - Docker Swarm 管理"
|
|
echo " ./scripts/setup/setup-opentofu.sh - OpenTofu 设置"
|
|
echo ""
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
cd "$PROJECT_ROOT"
|
|
|
|
case "${1:-help}" in
|
|
"status")
|
|
show_status
|
|
;;
|
|
"deploy")
|
|
quick_deploy
|
|
;;
|
|
"cleanup")
|
|
cleanup
|
|
;;
|
|
"swarm")
|
|
exec "${PROJECT_ROOT}/swarm/scripts/swarm-manager.sh" "${@:2}"
|
|
;;
|
|
"tofu")
|
|
exec "${PROJECT_ROOT}/scripts/setup/setup-opentofu.sh" "${@:2}"
|
|
;;
|
|
"help"|*)
|
|
show_help
|
|
;;
|
|
esac
|
|
}
|
|
|
|
main "$@" |