Speed up deploys with BuildKit caches and incremental service rebuilds.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
402e2e950b
commit
871ea78bf8
21
README.md
21
README.md
@ -229,25 +229,26 @@ NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1
|
||||
|
||||
**更新部署:**
|
||||
|
||||
本地一键增量部署(推荐):
|
||||
|
||||
```bash
|
||||
python scripts/deploy_update.py
|
||||
```
|
||||
|
||||
脚本会对比上次成功部署的 commit:仅前端改动只重建 `frontend`,仅后端改动只重建 `backend`,并启用 BuildKit npm/pip 缓存;健康检查改为短轮询。
|
||||
|
||||
服务器手动全量:
|
||||
|
||||
```bash
|
||||
# SSH 登录服务器后(当前开发分支为 dev1)
|
||||
cd /opt/nomadweb
|
||||
git fetch origin && git checkout -B dev1 origin/dev1
|
||||
export DOMAIN=nomadweb.nomadro.com
|
||||
export DOMAIN=nomadweb.nomadro.com DOCKER_BUILDKIT=1
|
||||
export NEXT_PUBLIC_API_URL=https://nomadweb.nomadro.com/api/v1
|
||||
export NEXT_PUBLIC_SITE_URL=https://nomadweb.nomadro.com
|
||||
export CORS_ORIGINS=https://nomadweb.nomadro.com
|
||||
docker compose -f docker-compose.prod.yml up -d --build
|
||||
```
|
||||
|
||||
或使用 Docker Compose 生产配置:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml up -d --build
|
||||
cp deploy/caddy/nomadweb.caddy /etc/caddy/sites/nomadweb.caddy
|
||||
systemctl reload caddy
|
||||
```
|
||||
|
||||
### 本地 Docker Compose
|
||||
|
||||
```bash
|
||||
|
||||
14
backend/.dockerignore
Normal file
14
backend/.dockerignore
Normal file
@ -0,0 +1,14 @@
|
||||
__pycache__
|
||||
*.py[cod]
|
||||
*.egg-info
|
||||
.venv
|
||||
venv
|
||||
.env*
|
||||
!.env.example
|
||||
.git
|
||||
.gitignore
|
||||
*.md
|
||||
.pytest_cache
|
||||
.mypy_cache
|
||||
.ruff_cache
|
||||
tests
|
||||
@ -1,7 +1,10 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
FROM python:3.12-slim
|
||||
WORKDIR /app
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
pip install -r requirements.txt
|
||||
COPY . .
|
||||
EXPOSE 8000
|
||||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
|
||||
@ -29,6 +29,7 @@ services:
|
||||
frontend:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-https://nomadweb.nomadro.com/api/v1}
|
||||
NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:-https://nomadweb.nomadro.com}
|
||||
|
||||
15
frontend/.dockerignore
Normal file
15
frontend/.dockerignore
Normal file
@ -0,0 +1,15 @@
|
||||
node_modules
|
||||
.next
|
||||
.git
|
||||
.gitignore
|
||||
*.md
|
||||
.env*
|
||||
!.env.example
|
||||
Dockerfile*
|
||||
docker-compose*
|
||||
coverage
|
||||
.turbo
|
||||
.vercel
|
||||
npm-debug.log*
|
||||
playwright-report
|
||||
test-results
|
||||
@ -1,24 +1,28 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
FROM node:20-alpine AS base
|
||||
WORKDIR /app
|
||||
ENV NEXT_TELEMETRY_DISABLED=1
|
||||
|
||||
FROM base AS deps
|
||||
WORKDIR /app
|
||||
COPY package.json package-lock.json ./
|
||||
RUN npm ci --legacy-peer-deps || npm install --legacy-peer-deps
|
||||
RUN --mount=type=cache,target=/root/.npm \
|
||||
npm ci --legacy-peer-deps --prefer-offline
|
||||
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
ARG NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1
|
||||
ARG NEXT_PUBLIC_SITE_URL=http://localhost:3000
|
||||
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL
|
||||
ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL
|
||||
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL \
|
||||
NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL \
|
||||
NODE_ENV=production
|
||||
RUN npm run build
|
||||
|
||||
FROM base AS runner
|
||||
WORKDIR /app
|
||||
ENV NODE_ENV=production
|
||||
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs
|
||||
RUN addgroup --system --gid 1001 nodejs \
|
||||
&& adduser --system --uid 1001 nextjs
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
|
||||
Loading…
Reference in New Issue
Block a user