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 34e25a6..bf97517 100644 --- a/deploy.sh +++ b/deploy.sh @@ -22,10 +22,61 @@ fi chmod +x /usr/local/bin/docker-compose fi - # 更新Docker Buildx到最新版本 - echo "更新Docker Buildx..." - docker buildx install 2>/dev/null || true - docker buildx create --use 2>/dev/null || true + # 安装或更新Docker Buildx + echo "检查并安装Docker Buildx..." + + # 检查Buildx是否已安装 + if ! docker buildx version &> /dev/null; then + echo "Buildx未安装,正在安装..." + + # 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 + + 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" + + if [[ "$buildx_version" < "0.17" ]]; then + echo "Buildx版本低于0.17,将直接使用docker build替代docker-compose build..." + export USE_ALTERNATE_BUILD="true" + fi + fi + + if [[ "$USE_ALTERNATE_BUILD" == "true" ]]; then + echo "将使用docker build直接构建镜像..." + fi echo "Docker工具检查完成" @@ -35,34 +86,49 @@ 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文件夹和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 - # 清理临时目录 - 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 - git pull 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 + + # 确保有必要的配置文件 + echo "确保配置文件存在..." + git fetch origin $BRANCH + git checkout origin/$BRANCH -- docker-compose.yml Dockerfile 2>/dev/null || true fi # 检查.env文件是否存在 @@ -75,12 +141,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" 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镜像..."