Pārlūkot izejas kodu

-dev:修改部署流程

LuoChinWen 4 nedēļas atpakaļ
vecāks
revīzija
81bd6f659e
2 mainītis faili ar 36 papildinājumiem un 18 dzēšanām
  1. 7 15
      backend/Dockerfile
  2. 29 3
      deploy.sh

+ 7 - 15
backend/Dockerfile

@@ -1,39 +1,31 @@
 # 标注平台后端 Dockerfile
-# 使用 Python 3.11 slim 镜像作为基础
 FROM python:3.11-slim
 
-# 设置工作目录
 WORKDIR /app
 
-# 设置环境变量
 ENV PYTHONDONTWRITEBYTECODE=1 \
     PYTHONUNBUFFERED=1 \
     PIP_NO_CACHE_DIR=1 \
     PIP_DISABLE_PIP_VERSION_CHECK=1
 
-# 安装系统依赖
-RUN apt-get update && apt-get install -y --no-install-recommends \
-    gcc \
-    && rm -rf /var/lib/apt/lists/*
+# 使用阿里云镜像源 + 安装依赖(合并为一层减少镜像大小)
+RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources && \
+    apt-get update && apt-get install -y --no-install-recommends gcc && \
+    rm -rf /var/lib/apt/lists/* && \
+    pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
 
-# 复制依赖文件
+# 复制依赖文件(利用 Docker 缓存)
 COPY requirements.txt .
-
-# 安装 Python 依赖
 RUN pip install --no-cache-dir -r requirements.txt
 
-# 复制应用代码
+# 复制应用代码(代码变更不会重新安装依赖)
 COPY . .
 
-# 创建数据目录
 RUN mkdir -p /app/data
 
-# 暴露端口
 EXPOSE 8000
 
-# 健康检查
 HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
     CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1
 
-# 启动命令
 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

+ 29 - 3
deploy.sh

@@ -59,9 +59,35 @@ fi
 # 创建数据目录
 mkdir -p data
 
-# 构建并启动 Docker 容器
-echo "构建 Docker 镜像..."
-docker build -t lq-label-backend:latest .
+# 检查是否需要重新构建镜像
+NEED_BUILD=false
+
+# 检查镜像是否存在
+if ! docker image inspect lq-label-backend:latest > /dev/null 2>&1; then
+    echo "镜像不存在,需要构建..."
+    NEED_BUILD=true
+fi
+
+# 检查 requirements.txt 或 Dockerfile 是否有变更
+if [ -f ".last_build_hash" ]; then
+    CURRENT_HASH=$(md5sum requirements.txt Dockerfile 2>/dev/null | md5sum | cut -d' ' -f1)
+    LAST_HASH=$(cat .last_build_hash)
+    if [ "$CURRENT_HASH" != "$LAST_HASH" ]; then
+        echo "检测到依赖或 Dockerfile 变更,需要重新构建..."
+        NEED_BUILD=true
+    fi
+else
+    NEED_BUILD=true
+fi
+
+if [ "$NEED_BUILD" = true ]; then
+    echo "构建 Docker 镜像..."
+    docker build -t lq-label-backend:latest .
+    # 保存构建哈希
+    md5sum requirements.txt Dockerfile 2>/dev/null | md5sum | cut -d' ' -f1 > .last_build_hash
+else
+    echo "镜像无变更,跳过构建"
+fi
 
 echo "启动后端服务..."
 docker compose down 2>/dev/null || true