From cf4a2bcc4559885b1145ea83883917ba04dc325c Mon Sep 17 00:00:00 2001 From: qaq <1937228092@qq.com> Date: Thu, 12 Jun 2025 15:47:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=96=B0=E6=97=A7=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ deployment.zip | Bin 47180167 -> 47180334 bytes deployment/deploy.sh | 34 ++++++++++++++++++++++++++-------- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 4c6a445..f2f35f4 100644 --- a/.gitignore +++ b/.gitignore @@ -122,6 +122,9 @@ logs/ ._* .Spotlight-V100 .Trashes +__MACOSX/ +__MACOSX +*.dmg ehthumbs.db Thumbs.db diff --git a/deployment.zip b/deployment.zip index 48f6b2dd0dc443533cfdc99c21d544832b0e4ffe..bc4108a8979dc81d7c62373f5c02efda0276fddd 100644 GIT binary patch delta 5531 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 /dev/null; then + echo "docker-compose" + elif docker compose version &> /dev/null; then + echo "docker compose" + else + echo "" + fi +} + # 检查docker和docker-compose是否安装 check_dependencies() { if ! command -v docker &> /dev/null; then @@ -47,11 +58,15 @@ check_dependencies() { exit 1 fi - if ! command -v docker-compose &> /dev/null; then + DOCKER_COMPOSE_CMD=$(get_docker_compose_cmd) + if [ -z "$DOCKER_COMPOSE_CMD" ]; then echo -e "${RED}错误: Docker Compose 未安装${NC}" echo "请先安装Docker Compose: https://docs.docker.com/compose/install/" + echo "或者更新Docker到最新版本(包含Compose插件)" exit 1 fi + + echo -e "${GREEN}检测到Docker Compose命令: $DOCKER_COMPOSE_CMD${NC}" } # 从docker-compose.yml读取端口配置 @@ -88,7 +103,7 @@ start_services() { # 切换到脚本目录 cd "$SCRIPT_DIR" - docker-compose up -d + $DOCKER_COMPOSE_CMD up -d if [ $? -eq 0 ]; then echo -e "${GREEN}服务启动成功!${NC}" @@ -125,7 +140,7 @@ start_services() { stop_services() { echo -e "${YELLOW}停止所有服务...${NC}" cd "$SCRIPT_DIR" - docker-compose down + $DOCKER_COMPOSE_CMD down echo -e "${GREEN}服务已停止${NC}" } @@ -133,7 +148,7 @@ stop_services() { restart_services() { echo -e "${YELLOW}重启所有服务...${NC}" cd "$SCRIPT_DIR" - docker-compose restart + $DOCKER_COMPOSE_CMD restart echo -e "${GREEN}服务重启完成${NC}" } @@ -141,20 +156,20 @@ restart_services() { build_frontend() { echo -e "${YELLOW}重新构建前端镜像...${NC}" cd "$SCRIPT_DIR" - docker-compose build frontend --no-cache + $DOCKER_COMPOSE_CMD build frontend --no-cache echo -e "${GREEN}前端镜像构建完成${NC}" } # 查看日志 show_logs() { cd "$SCRIPT_DIR" - docker-compose logs -f + $DOCKER_COMPOSE_CMD logs -f } # 查看状态 show_status() { cd "$SCRIPT_DIR" - docker-compose ps + $DOCKER_COMPOSE_CMD ps } # 清理未使用的容器和镜像 @@ -171,7 +186,7 @@ clean_all() { echo if [[ $REPLY =~ ^[Yy]$ ]]; then cd "$SCRIPT_DIR" - docker-compose down -v + $DOCKER_COMPOSE_CMD down -v docker system prune -f echo -e "${GREEN}完全清理完成${NC}" else @@ -183,6 +198,9 @@ clean_all() { main() { check_dependencies + # 设置全局的Docker Compose命令变量 + DOCKER_COMPOSE_CMD=$(get_docker_compose_cmd) + case "${1:-start}" in start) start_services