From 7e3f4d792f306ade9f16b12c8f03cf9d9d2af75a Mon Sep 17 00:00:00 2001 From: renjue Date: Sat, 9 May 2026 16:19:18 +0800 Subject: [PATCH] Update Docker runtime to pull latest code on startup. Install git in image and change start script to clone/pull target branch, reinstall dependencies, rebuild frontend, then launch backend and frontend services. Co-authored-by: Cursor --- Dockerfile | 15 +-------------- README.md | 10 +++++++++- docker/start.sh | 26 ++++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 697daf3..9748d24 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,24 +3,11 @@ FROM node:20-bookworm-slim ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ - && apt-get install -y --no-install-recommends python3 python3-pip ca-certificates \ + && apt-get install -y --no-install-recommends python3 python3-pip ca-certificates git \ && rm -rf /var/lib/apt/lists/* WORKDIR /app -# Install backend dependencies. -COPY backend/requirements.txt /app/backend/requirements.txt -RUN python3 -m pip install --no-cache-dir -r /app/backend/requirements.txt - -# Install frontend dependencies and build. -COPY frontend/package*.json /app/frontend/ -WORKDIR /app/frontend -RUN npm install -COPY frontend /app/frontend -RUN npm run build - -# Copy backend source and runtime launcher. -WORKDIR /app COPY backend /app/backend COPY docker/start.sh /app/docker/start.sh RUN chmod +x /app/docker/start.sh diff --git a/README.md b/README.md index a9d3aca..382411a 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ npm run dev ## Docker 单容器运行 -项目提供了单容器运行前后端的 `Dockerfile`,容器内会同时启动: +项目提供了单容器运行前后端的 `Dockerfile`,容器启动时会先从 Git 拉取最新代码,然后再启动: - Flask 后端:`14620` - 前端预览服务:`14621` @@ -76,6 +76,14 @@ docker run --rm -it \ -p 14620:14620 \ -p 14621:14621 \ --env-file backend/.env \ + -e GIT_REPO_URL=https://git.rc707blog.top/rose_cat707/media_crawler.git \ + -e GIT_BRANCH=main \ media-crawler:latest ``` +可选环境变量: + +- `GIT_REPO_URL`:容器启动时拉取代码的仓库地址 +- `GIT_BRANCH`:拉取分支(默认 `main`) +- `WORKTREE_DIR`:容器内代码目录(默认 `/app/runtime`) + diff --git a/docker/start.sh b/docker/start.sh index 4de3cf9..1b5f502 100644 --- a/docker/start.sh +++ b/docker/start.sh @@ -1,14 +1,36 @@ #!/usr/bin/env sh set -eu +GIT_REPO_URL="${GIT_REPO_URL:-https://git.rc707blog.top/rose_cat707/media_crawler.git}" +GIT_BRANCH="${GIT_BRANCH:-main}" +WORKTREE_DIR="${WORKTREE_DIR:-/app/runtime}" BACKEND_PORT="${FLASK_RUN_PORT:-14620}" FRONTEND_PORT="${FRONTEND_PORT:-14621}" -cd /app/backend +echo "[start] syncing source from ${GIT_REPO_URL} (${GIT_BRANCH})" +if [ ! -d "${WORKTREE_DIR}/.git" ]; then + rm -rf "${WORKTREE_DIR}" + git clone --branch "${GIT_BRANCH}" --single-branch "${GIT_REPO_URL}" "${WORKTREE_DIR}" +else + git -C "${WORKTREE_DIR}" fetch origin "${GIT_BRANCH}" + git -C "${WORKTREE_DIR}" checkout "${GIT_BRANCH}" + git -C "${WORKTREE_DIR}" reset --hard "origin/${GIT_BRANCH}" +fi + +echo "[start] installing backend dependencies" +python3 -m pip install --no-cache-dir -r "${WORKTREE_DIR}/backend/requirements.txt" + +echo "[start] installing frontend dependencies and building" +cd "${WORKTREE_DIR}/frontend" +npm install +npm run build + +echo "[start] launching backend:${BACKEND_PORT} and frontend:${FRONTEND_PORT}" +cd "${WORKTREE_DIR}/backend" python3 app.py & BACKEND_PID=$! -cd /app/frontend +cd "${WORKTREE_DIR}/frontend" npm run preview -- --host 0.0.0.0 --port "${FRONTEND_PORT}" & FRONTEND_PID=$!