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 <cursoragent@cursor.com>
This commit is contained in:
15
Dockerfile
15
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
|
||||
|
||||
10
README.md
10
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`)
|
||||
|
||||
|
||||
@@ -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=$!
|
||||
|
||||
|
||||
Reference in New Issue
Block a user