Speed up updates: hot-copy backend code, suppress GPU warnings
- update.sh: docker cp backend into running container + restart (no rebuild) Backend updates now take ~5s instead of 2min - backend/Dockerfile: ORT_DISABLE_GPU=1 suppresses ONNX GPU discovery errors on CPU-only servers Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
598f7343c3
commit
ae511f1086
2 changed files with 44 additions and 54 deletions
|
|
@ -23,6 +23,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
|
||||
ENV APP_DATA_DIRECTORY=/app_data
|
||||
ENV TEMP_DIRECTORY=/tmp/deckforge
|
||||
ENV ORT_DISABLE_GPU=1
|
||||
ENV ONNXRUNTIME_DEVICE=CPU
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
|
|
|
|||
96
update.sh
96
update.sh
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
# DeckForge Fast Update Script
|
||||
# Use this for code-only updates (no new dependencies).
|
||||
# For code-only updates: copies files into running containers, no Docker rebuild.
|
||||
# Run ./deploy.sh only when Dockerfile or dependencies change.
|
||||
set -euo pipefail
|
||||
|
||||
|
|
@ -29,72 +29,60 @@ fi
|
|||
if echo "$CHANGED" | grep -q "package.json\|package-lock.json\|frontend/Dockerfile"; then
|
||||
FRONTEND_DEPS_CHANGED=true
|
||||
fi
|
||||
if echo "$CHANGED" | grep -q "^frontend/"; then
|
||||
if echo "$CHANGED" | grep -qE "^frontend/"; then
|
||||
FRONTEND_CHANGED=true
|
||||
fi
|
||||
if echo "$CHANGED" | grep -q "^backend/"; then
|
||||
if echo "$CHANGED" | grep -qE "^backend/"; then
|
||||
BACKEND_CHANGED=true
|
||||
fi
|
||||
|
||||
export API_PORT WEB_PORT PG_PORT REDIS_PORT
|
||||
export API_PORT WEB_PORT
|
||||
env_val() { local key=$1 def=$2; grep -E "^${key}=" .env 2>/dev/null | cut -d= -f2 | tr -d '"' | head -1 | grep -v '^$' || echo "$def"; }
|
||||
API_PORT=${API_PORT:-$(env_val API_PORT 8000)}
|
||||
WEB_PORT=${WEB_PORT:-$(env_val WEB_PORT 3000)}
|
||||
|
||||
# ── Step 2: Rebuild only what's needed ───────────────────────────────────────
|
||||
REBUILD_API=false
|
||||
REBUILD_WEB=false
|
||||
|
||||
# ── Backend: hot-copy files if no dep changes (avoids 2min Docker rebuild) ───
|
||||
if $BACKEND_DEPS_CHANGED; then
|
||||
warn "Backend dependencies changed — full rebuild required. Run ./deploy.sh instead."
|
||||
REBUILD_API=true
|
||||
elif $BACKEND_CHANGED; then
|
||||
REBUILD_API=true
|
||||
warn "Backend dependencies changed — run ./deploy.sh for a full rebuild."
|
||||
warn "Continuing with hot-copy anyway (new deps won't be available until full rebuild)."
|
||||
fi
|
||||
|
||||
if $FRONTEND_DEPS_CHANGED; then
|
||||
warn "Frontend dependencies changed — full rebuild required. Run ./deploy.sh instead."
|
||||
REBUILD_WEB=true
|
||||
elif $FRONTEND_CHANGED; then
|
||||
REBUILD_WEB=true
|
||||
fi
|
||||
|
||||
if ! $REBUILD_API && ! $REBUILD_WEB; then
|
||||
info "No relevant changes detected. Restarting services anyway..."
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml restart api worker web
|
||||
info "Done."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ── Step 3: Build changed services ───────────────────────────────────────────
|
||||
SERVICES_TO_BUILD=""
|
||||
SERVICES_TO_UP="api worker"
|
||||
|
||||
if $REBUILD_API; then
|
||||
info "Rebuilding api/worker..."
|
||||
SERVICES_TO_BUILD="$SERVICES_TO_BUILD api worker"
|
||||
fi
|
||||
|
||||
if $REBUILD_WEB; then
|
||||
info "Rebuilding web..."
|
||||
SERVICES_TO_BUILD="$SERVICES_TO_BUILD web"
|
||||
SERVICES_TO_UP="$SERVICES_TO_UP web"
|
||||
fi
|
||||
|
||||
DOCKER_BUILDKIT=1 docker compose -f docker-compose.yml -f docker-compose.prod.yml \
|
||||
build $SERVICES_TO_BUILD
|
||||
|
||||
# ── Step 4: Restart updated services ─────────────────────────────────────────
|
||||
info "Restarting services: $SERVICES_TO_UP"
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml \
|
||||
up -d $SERVICES_TO_UP
|
||||
|
||||
# ── Step 5: Run migrations if backend changed ─────────────────────────────────
|
||||
if $BACKEND_CHANGED; then
|
||||
info "Running migrations..."
|
||||
sleep 5
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml \
|
||||
exec -T api alembic upgrade head || warn "Migration failed or already up to date"
|
||||
API_CONTAINER=$(docker compose -f docker-compose.yml -f docker-compose.prod.yml ps -q api 2>/dev/null | head -1)
|
||||
WORKER_CONTAINER=$(docker compose -f docker-compose.yml -f docker-compose.prod.yml ps -q worker 2>/dev/null | head -1)
|
||||
|
||||
if [[ -n "$API_CONTAINER" ]]; then
|
||||
info "Hot-copying backend code into containers..."
|
||||
docker cp backend/. "$API_CONTAINER":/app/
|
||||
[[ -n "$WORKER_CONTAINER" ]] && docker cp backend/. "$WORKER_CONTAINER":/app/
|
||||
|
||||
info "Restarting api + worker..."
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml restart api worker
|
||||
|
||||
info "Running migrations..."
|
||||
sleep 5
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml \
|
||||
exec -T api alembic upgrade head || warn "Migration already up to date"
|
||||
else
|
||||
warn "api container not running — falling back to docker build"
|
||||
DOCKER_BUILDKIT=1 docker compose -f docker-compose.yml -f docker-compose.prod.yml build api worker
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d api worker
|
||||
fi
|
||||
fi
|
||||
|
||||
# ── Frontend: still needs build (Next.js compilation required) ───────────────
|
||||
if $FRONTEND_DEPS_CHANGED; then
|
||||
warn "Frontend dependencies changed — run ./deploy.sh for a full rebuild."
|
||||
fi
|
||||
|
||||
if $FRONTEND_CHANGED; then
|
||||
info "Rebuilding frontend (Next.js build required)..."
|
||||
DOCKER_BUILDKIT=1 docker compose -f docker-compose.yml -f docker-compose.prod.yml build web
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d web
|
||||
fi
|
||||
|
||||
if ! $BACKEND_CHANGED && ! $FRONTEND_CHANGED; then
|
||||
info "No relevant changes. Services are up to date."
|
||||
fi
|
||||
|
||||
info "Update complete."
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue