Browse Source

完成合并:清理脚本更新

pull/2/head
徐飞洋 2 months ago
parent
commit
cbcc2b1807
  1. 34
      cleanup.sh
  2. 147
      deploy.sh
  3. 8
      update.sh

34
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 "清理完成!所有部署的资源已清除。"

147
deploy.sh

@ -22,10 +22,61 @@ fi
chmod +x /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
fi fi
# 更新Docker Buildx到最新版本 # 安装或更新Docker Buildx
echo "更新Docker Buildx..." echo "检查并安装Docker Buildx..."
docker buildx install 2>/dev/null || true
docker buildx create --use 2>/dev/null || true # 检查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工具检查完成" echo "Docker工具检查完成"
@ -35,34 +86,49 @@ fi
# 处理代码仓库或更新代码 # 处理代码仓库或更新代码
echo "处理代码仓库..." echo "处理代码仓库..."
if [ ! -d /opt/project_app/.git ]; then REPO_URL="http://8.137.125.67:4000/Swt29/Project_app.git"
# 如果目录不存在.git文件夹,检查目录是否为空 BRANCH="BOSS"
if [ "$(ls -A /opt/project_app)" ]; then
# 目录不为空,创建临时目录克隆后复制文件 # 测试仓库连接
echo "目标目录已存在且不为空,使用临时目录克隆代码..." if ! git ls-remote $REPO_URL &> /dev/null; then
git clone http://8.137.125.67:4000/Swt29/Project_app.git /tmp/project_app_temp echo "警告: 无法连接到Gitea仓库 $REPO_URL (端口4000拒绝连接)"
# 复制.git文件夹和docker相关文件 echo "请检查网络连接和仓库地址是否正确"
cp -r /tmp/project_app_temp/.git /opt/project_app/ echo "如果仓库不可用,将使用本地已有代码继续部署..."
cp -r /tmp/project_app_temp/docker-compose.yml /opt/project_app/ 2>/dev/null || true else
cp -r /tmp/project_app_temp/Dockerfile /opt/project_app/ 2>/dev/null || true if [ ! -d /opt/project_app/.git ]; then
# 清理临时目录 # 如果目录不存在.git文件夹,检查目录是否为空
rm -rf /tmp/project_app_temp 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 else
# 目录为空,直接克隆仓库 # 如果目录已存在.git文件夹,则更新代码
git clone http://8.137.125.67:4000/Swt29/Project_app.git /opt/project_app cd /opt/project_app
# 使用fast-forward方式更新,避免分支冲突
git fetch origin $BRANCH
git merge --ff-only FETCH_HEAD || {
echo "分支冲突,重置本地分支到远程最新版本..."
git reset --hard origin/$BRANCH
}
fi fi
cd /opt/project_app
else # 确保有必要的配置文件
# 如果目录已存在.git文件夹,则更新代码 echo "确保配置文件存在..."
cd /opt/project_app git fetch origin $BRANCH
git pull origin BOSS git checkout origin/$BRANCH -- docker-compose.yml Dockerfile 2>/dev/null || true
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 fi
# 检查.env文件是否存在 # 检查.env文件是否存在
@ -75,12 +141,25 @@ fi
fi fi
# 构建Docker镜像 # 构建Docker镜像
echo "构建Docker镜像..." echo "构建Docker镜像..."
docker-compose build 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 "启动服务..." echo "启动服务..."
docker-compose up -d docker-compose up -d
echo "部署完成!服务已启动并在后台运行。" echo "部署完成!服务已启动并在后台运行。"
echo "使用以下命令查看服务状态:docker-compose ps" echo "使用以下命令查看服务状态:docker-compose ps"

8
update.sh

@ -8,8 +8,12 @@ echo "开始更新微信小程序后端服务..."
cd /opt/project_app cd /opt/project_app
# 拉取最新代码 # 拉取最新代码
echo "拉取最新代码..." echo "拉取最新代码..."
git pull origin BOSS git fetch origin BOSS
git merge --ff-only FETCH_HEAD || {
echo "分支冲突,重置本地分支到远程最新版本..."
git reset --hard origin/BOSS
}
# 构建新的Docker镜像 # 构建新的Docker镜像
echo "构建新的Docker镜像..." echo "构建新的Docker镜像..."

Loading…
Cancel
Save