From a63539c6d27f55a717a2ef15322eb63b2eeae287 Mon Sep 17 00:00:00 2001 From: SwTt29 <2055018491@qq.com> Date: Tue, 30 Dec 2025 10:38:44 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=EF=BC=9AGit=E5=88=86=E6=94=AF=E5=86=B2?= =?UTF-8?q?=E7=AA=81=E5=A4=84=E7=90=86=E5=92=8CDocker=20Buildx=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cleanup.sh | 34 ++++++++++++++++++++++++++++++++++ deploy.sh | 33 ++++++++++++++++++++------------- update.sh | 8 ++++++-- 3 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 cleanup.sh diff --git a/cleanup.sh b/cleanup.sh new file mode 100644 index 0000000..d60bf66 --- /dev/null +++ b/cleanup.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# 清理脚本 - 清除微信小程序后端服务部署的所有资源 + +echo "开始清理部署的资源..." + +# 进入项目目录 +cd /opt/project_app + +# 停止并移除所有相关容器 +echo "停止并移除容器..." +docker-compose down -v + +# 清理未使用的镜像 +echo "清理Docker镜像..." +docker image prune -f + +# 清理未使用的卷 +echo "清理Docker卷..." +docker volume prune -f + +# 清理未使用的网络 +echo "清理Docker网络..." +docker network prune -f + +# 清理临时文件 +echo "清理临时文件..." +rm -rf /tmp/project_app_temp 2>/dev/null || true + +# 清理构建缓存 +echo "清理Docker构建缓存..." +docker builder prune -f + +echo "清理完成!所有部署的资源已清除。" diff --git a/deploy.sh b/deploy.sh index 706e6d3..787736e 100644 --- a/deploy.sh +++ b/deploy.sh @@ -24,8 +24,14 @@ fi # 更新Docker Buildx到最新版本 echo "更新Docker Buildx..." - docker buildx install 2>/dev/null || true - docker buildx create --use 2>/dev/null || true + # 卸载旧版本 + docker buildx uninstall 2>/dev/null || true + # 安装最新版本 + docker buildx install + # 创建并使用默认构建器 + docker buildx create --name mybuilder --use 2>/dev/null || true + # 重启Docker服务以应用更改 + systemctl restart docker 2>/dev/null || true echo "Docker工具检查完成" @@ -41,10 +47,8 @@ fi # 目录不为空,创建临时目录克隆后复制文件 echo "目标目录已存在且不为空,使用临时目录克隆代码..." git clone http://8.137.125.67:4000/Swt29/Project_app.git /tmp/project_app_temp - # 复制.git文件夹和docker相关文件 - cp -r /tmp/project_app_temp/.git /opt/project_app/ - cp -r /tmp/project_app_temp/docker-compose.yml /opt/project_app/ 2>/dev/null || true - cp -r /tmp/project_app_temp/Dockerfile /opt/project_app/ 2>/dev/null || true + # 复制.git文件夹和所有文件 + cp -r /tmp/project_app_temp/. /opt/project_app/ # 清理临时目录 rm -rf /tmp/project_app_temp else @@ -55,15 +59,18 @@ fi else # 如果目录已存在.git文件夹,则更新代码 cd /opt/project_app - git pull origin BOSS + # 使用fast-forward方式更新,避免分支冲突 + git fetch origin BOSS + git merge --ff-only FETCH_HEAD || { + echo "分支冲突,重置本地分支到远程最新版本..." + git reset --hard origin/BOSS + } fi - # 检查docker-compose.yml文件是否存在 - if [ ! -f docker-compose.yml ]; then - echo "警告: docker-compose.yml文件不存在,正在从仓库重新拉取..." - git fetch origin BOSS - git checkout origin/BOSS -- docker-compose.yml Dockerfile - fi + # 确保有必要的配置文件 + echo "确保配置文件存在..." + git fetch origin BOSS + git checkout origin/BOSS -- docker-compose.yml Dockerfile 2>/dev/null || true # 检查.env文件是否存在 echo "检查环境变量配置..." diff --git a/update.sh b/update.sh index 002d50e..3214120 100644 --- a/update.sh +++ b/update.sh @@ -8,8 +8,12 @@ echo "开始更新微信小程序后端服务..." cd /opt/project_app # 拉取最新代码 -echo "拉取最新代码..." -git pull origin BOSS + echo "拉取最新代码..." + git fetch origin BOSS + git merge --ff-only FETCH_HEAD || { + echo "分支冲突,重置本地分支到远程最新版本..." + git reset --hard origin/BOSS + } # 构建新的Docker镜像 echo "构建新的Docker镜像..." From cb375c5f83a45c93913c2323e0c646952a80da75 Mon Sep 17 00:00:00 2001 From: SwTt29 <2055018491@qq.com> Date: Tue, 30 Dec 2025 10:42:48 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=EF=BC=9A=E7=BD=91=E7=BB=9C=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=92=8CBuildx=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy.sh | 94 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 35 deletions(-) diff --git a/deploy.sh b/deploy.sh index 787736e..6c48376 100644 --- a/deploy.sh +++ b/deploy.sh @@ -24,14 +24,24 @@ fi # 更新Docker Buildx到最新版本 echo "更新Docker Buildx..." - # 卸载旧版本 - docker buildx uninstall 2>/dev/null || true - # 安装最新版本 - docker buildx install - # 创建并使用默认构建器 - docker buildx create --name mybuilder --use 2>/dev/null || true - # 重启Docker服务以应用更改 - systemctl restart docker 2>/dev/null || true + # 检查当前Buildx版本 + buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1) + if [[ "$buildx_version" < "0.17" ]]; then + echo "当前Buildx版本 $buildx_version 低于要求的0.17,正在升级..." + # 卸载旧版本 + docker buildx uninstall 2>/dev/null || true + # 安装最新版本 + docker buildx install + # 重启Docker服务以应用更改 + systemctl restart docker 2>/dev/null || true + # 等待Docker重启 + sleep 5 + # 创建并使用默认构建器 + docker buildx create --name mybuilder --use 2>/dev/null || true + fi + # 验证Buildx版本 + new_buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1) + echo "当前Buildx版本: $new_buildx_version" echo "Docker工具检查完成" @@ -41,37 +51,51 @@ fi # 处理代码仓库或更新代码 echo "处理代码仓库..." - if [ ! -d /opt/project_app/.git ]; then - # 如果目录不存在.git文件夹,检查目录是否为空 - if [ "$(ls -A /opt/project_app)" ]; then - # 目录不为空,创建临时目录克隆后复制文件 - echo "目标目录已存在且不为空,使用临时目录克隆代码..." - git clone http://8.137.125.67:4000/Swt29/Project_app.git /tmp/project_app_temp - # 复制.git文件夹和所有文件 - cp -r /tmp/project_app_temp/. /opt/project_app/ - # 清理临时目录 - rm -rf /tmp/project_app_temp + REPO_URL="http://8.137.125.67:4000/Swt29/Project_app.git" + BRANCH="BOSS" + + # 测试仓库连接 + if ! git ls-remote $REPO_URL &> /dev/null; then + echo "警告: 无法连接到Gitea仓库 $REPO_URL (端口4000拒绝连接)" + echo "请检查网络连接和仓库地址是否正确" + echo "如果仓库不可用,将使用本地已有代码继续部署..." + else + if [ ! -d /opt/project_app/.git ]; then + # 如果目录不存在.git文件夹,检查目录是否为空 + if [ "$(ls -A /opt/project_app)" ]; then + # 目录不为空,创建临时目录克隆后复制文件 + echo "目标目录已存在且不为空,使用临时目录克隆代码..." + git clone -b $BRANCH $REPO_URL /tmp/project_app_temp + if [ $? -eq 0 ]; then + # 复制.git文件夹和所有文件 + cp -r /tmp/project_app_temp/. /opt/project_app/ + # 清理临时目录 + rm -rf /tmp/project_app_temp + else + echo "警告: 克隆仓库失败,将使用本地已有代码继续部署..." + fi + else + # 目录为空,直接克隆仓库 + git clone -b $BRANCH $REPO_URL /opt/project_app + fi + cd /opt/project_app else - # 目录为空,直接克隆仓库 - git clone http://8.137.125.67:4000/Swt29/Project_app.git /opt/project_app + # 如果目录已存在.git文件夹,则更新代码 + cd /opt/project_app + # 使用fast-forward方式更新,避免分支冲突 + git fetch origin $BRANCH + git merge --ff-only FETCH_HEAD || { + echo "分支冲突,重置本地分支到远程最新版本..." + git reset --hard origin/$BRANCH + } fi - cd /opt/project_app - else - # 如果目录已存在.git文件夹,则更新代码 - cd /opt/project_app - # 使用fast-forward方式更新,避免分支冲突 - git fetch origin BOSS - git merge --ff-only FETCH_HEAD || { - echo "分支冲突,重置本地分支到远程最新版本..." - git reset --hard origin/BOSS - } + + # 确保有必要的配置文件 + echo "确保配置文件存在..." + git fetch origin $BRANCH + git checkout origin/$BRANCH -- docker-compose.yml Dockerfile 2>/dev/null || true fi - # 确保有必要的配置文件 - echo "确保配置文件存在..." - git fetch origin BOSS - git checkout origin/BOSS -- docker-compose.yml Dockerfile 2>/dev/null || true - # 检查.env文件是否存在 echo "检查环境变量配置..." if [ ! -f .env ]; then From f0065ed73eaee04b86bf734f4a650c71335698de Mon Sep 17 00:00:00 2001 From: SwTt29 <2055018491@qq.com> Date: Tue, 30 Dec 2025 10:45:07 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=EF=BC=9A=E5=BC=BA=E5=88=B6=E5=8D=87=E7=BA=A7?= =?UTF-8?q?Buildx=E5=92=8C=E6=B7=BB=E5=8A=A0=E6=9B=BF=E4=BB=A3=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy.sh | 67 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/deploy.sh b/deploy.sh index 6c48376..e2a7364 100644 --- a/deploy.sh +++ b/deploy.sh @@ -25,23 +25,47 @@ fi # 更新Docker Buildx到最新版本 echo "更新Docker Buildx..." # 检查当前Buildx版本 - buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1) + buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1 || echo "0.0") + echo "当前Buildx版本: $buildx_version" + if [[ "$buildx_version" < "0.17" ]]; then - echo "当前Buildx版本 $buildx_version 低于要求的0.17,正在升级..." - # 卸载旧版本 + echo "当前Buildx版本 $buildx_version 低于要求的0.17,正在强制升级..." + + # 1. 停止Docker服务 + systemctl stop docker 2>/dev/null || true + sleep 3 + + # 2. 卸载旧版本Buildx + rm -rf ~/.docker/cli-plugins/docker-buildx 2>/dev/null || true + rm -rf /usr/libexec/docker/cli-plugins/docker-buildx 2>/dev/null || true docker buildx uninstall 2>/dev/null || true - # 安装最新版本 + sleep 2 + + # 3. 重新安装Docker服务 + systemctl start docker 2>/dev/null || true + sleep 5 + + # 4. 安装最新版本Buildx docker buildx install - # 重启Docker服务以应用更改 + + # 5. 再次重启Docker服务 systemctl restart docker 2>/dev/null || true - # 等待Docker重启 sleep 5 - # 创建并使用默认构建器 - docker buildx create --name mybuilder --use 2>/dev/null || true + + # 6. 创建并使用默认构建器 + docker buildx create --name mybuilder --driver docker-container --use 2>/dev/null || true + fi + + # 再次验证Buildx版本 + new_buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1 || echo "0.0") + echo "升级后Buildx版本: $new_buildx_version" + + # 如果Buildx版本仍然不足,尝试使用docker build替代docker-compose build + if [[ "$new_buildx_version" < "0.17" ]]; then + echo "警告: Buildx版本仍然低于0.17,将尝试使用替代方案构建镜像..." + # 创建一个环境变量标记,后续使用 + export USE_ALTERNATE_BUILD="true" fi - # 验证Buildx版本 - new_buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1) - echo "当前Buildx版本: $new_buildx_version" echo "Docker工具检查完成" @@ -106,12 +130,25 @@ fi fi # 构建Docker镜像 -echo "构建Docker镜像..." -docker-compose build + echo "构建Docker镜像..." + if [[ "$USE_ALTERNATE_BUILD" == "true" ]]; then + # 使用docker build替代docker-compose build + echo "使用docker build直接构建镜像..." + docker build -t project_app-app . --no-cache + if [ $? -eq 0 ]; then + echo "镜像构建成功!" + else + echo "错误: 镜像构建失败!" + exit 1 + fi + else + # 使用正常的docker-compose build + docker-compose build + fi # 启动服务 -echo "启动服务..." -docker-compose up -d + echo "启动服务..." + docker-compose up -d echo "部署完成!服务已启动并在后台运行。" echo "使用以下命令查看服务状态:docker-compose ps" From 1299f774f87dff95ee807da8da1765f8ff45f5f3 Mon Sep 17 00:00:00 2001 From: SwTt29 <2055018491@qq.com> Date: Tue, 30 Dec 2025 10:49:50 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=EF=BC=9A=E4=BB=8EGitHub=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E6=9C=80=E6=96=B0Buildx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy.sh | 85 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 37 deletions(-) diff --git a/deploy.sh b/deploy.sh index e2a7364..df84373 100644 --- a/deploy.sh +++ b/deploy.sh @@ -22,49 +22,60 @@ fi chmod +x /usr/local/bin/docker-compose fi - # 更新Docker Buildx到最新版本 - echo "更新Docker Buildx..." - # 检查当前Buildx版本 - buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1 || echo "0.0") - echo "当前Buildx版本: $buildx_version" + # 安装或更新Docker Buildx + echo "检查并安装Docker Buildx..." - if [[ "$buildx_version" < "0.17" ]]; then - echo "当前Buildx版本 $buildx_version 低于要求的0.17,正在强制升级..." + # 检查Buildx是否已安装 + if ! docker buildx version &> /dev/null; then + echo "Buildx未安装,正在安装..." - # 1. 停止Docker服务 - systemctl stop docker 2>/dev/null || true - sleep 3 - - # 2. 卸载旧版本Buildx - rm -rf ~/.docker/cli-plugins/docker-buildx 2>/dev/null || true - rm -rf /usr/libexec/docker/cli-plugins/docker-buildx 2>/dev/null || true - docker buildx uninstall 2>/dev/null || true - sleep 2 - - # 3. 重新安装Docker服务 - systemctl start docker 2>/dev/null || true - sleep 5 - - # 4. 安装最新版本Buildx - docker buildx install + # 1. 获取系统架构 + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + BUILDX_ARCH="amd64" + elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then + BUILDX_ARCH="arm64" + else + echo "错误: 不支持的系统架构 $ARCH" + echo "将直接使用docker build替代docker-compose build..." + export USE_ALTERNATE_BUILD="true" + fi - # 5. 再次重启Docker服务 - systemctl restart docker 2>/dev/null || true - sleep 5 + if [ -z "$USE_ALTERNATE_BUILD" ]; then + # 2. 下载最新版本的Buildx + BUILDX_VERSION=$(curl -s https://api.github.com/repos/docker/buildx/releases/latest | grep -o '"tag_name": "v[^"]*"' | sed 's/"tag_name": "v//' | sed 's/"//') + echo "正在下载Buildx版本 $BUILDX_VERSION ($BUILDX_ARCH)..." + + # 3. 创建插件目录 + mkdir -p ~/.docker/cli-plugins + + # 4. 下载并安装Buildx + curl -L "https://github.com/docker/buildx/releases/download/v$BUILDX_VERSION/buildx-v$BUILDX_VERSION.linux-$BUILDX_ARCH" -o ~/.docker/cli-plugins/docker-buildx + + # 5. 添加执行权限 + chmod +x ~/.docker/cli-plugins/docker-buildx + + # 6. 验证安装 + if docker buildx version &> /dev/null; then + echo "Buildx安装成功!" + else + echo "警告: Buildx安装失败,将直接使用docker build替代docker-compose build..." + export USE_ALTERNATE_BUILD="true" + fi + fi + else + # Buildx已安装,检查版本 + buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1 || echo "0.0") + echo "当前Buildx版本: $buildx_version" - # 6. 创建并使用默认构建器 - docker buildx create --name mybuilder --driver docker-container --use 2>/dev/null || true + if [[ "$buildx_version" < "0.17" ]]; then + echo "Buildx版本低于0.17,将直接使用docker build替代docker-compose build..." + export USE_ALTERNATE_BUILD="true" + fi fi - # 再次验证Buildx版本 - new_buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1 || echo "0.0") - echo "升级后Buildx版本: $new_buildx_version" - - # 如果Buildx版本仍然不足,尝试使用docker build替代docker-compose build - if [[ "$new_buildx_version" < "0.17" ]]; then - echo "警告: Buildx版本仍然低于0.17,将尝试使用替代方案构建镜像..." - # 创建一个环境变量标记,后续使用 - export USE_ALTERNATE_BUILD="true" + if [[ "$USE_ALTERNATE_BUILD" == "true" ]]; then + echo "将使用docker build直接构建镜像..." fi echo "Docker工具检查完成"