perf(deploy): parallel deploys, preserve build cache, prod-only runtime deps
Three changes to cut deploy time: 1. deploy.sh: Pi and VM deploy concurrently (wall time = max, not sum) 2. deploy.sh: Build cache capped at 2GB instead of nuked after 24h, so pnpm install layer is reused between deploys 3. Dockerfile: runtime stage uses --prod (skip devDeps). Moved tsx from devDependencies to dependencies since it's used in CMD.
This commit is contained in:
+2
-2
@@ -57,8 +57,8 @@ COPY packages/web/package.json packages/web/
|
|||||||
# Copy patches (referenced by pnpm-lock.yaml)
|
# Copy patches (referenced by pnpm-lock.yaml)
|
||||||
COPY patches/ patches/
|
COPY patches/ patches/
|
||||||
|
|
||||||
# Install production dependencies only (plus tsx for running TS)
|
# Install production dependencies only (tsx is in server dependencies)
|
||||||
RUN pnpm install --frozen-lockfile || pnpm install
|
RUN pnpm install --prod --frozen-lockfile || pnpm install --prod
|
||||||
|
|
||||||
# Copy shared source (needed at runtime since server imports types directly)
|
# Copy shared source (needed at runtime since server imports types directly)
|
||||||
COPY packages/shared/ packages/shared/
|
COPY packages/shared/ packages/shared/
|
||||||
|
|||||||
@@ -74,9 +74,9 @@ deploy() {
|
|||||||
# Clean up stale renamed containers left by failed recreates (e.g. "d420a6c00439_backspace")
|
# Clean up stale renamed containers left by failed recreates (e.g. "d420a6c00439_backspace")
|
||||||
ssh "$PI_USER@$host" "cd $path && docker rm -f \$(docker ps -aq --filter 'name=_backspace' 2>/dev/null) 2>/dev/null; docker compose up -d --build"
|
ssh "$PI_USER@$host" "cd $path && docker rm -f \$(docker ps -aq --filter 'name=_backspace' 2>/dev/null) 2>/dev/null; docker compose up -d --build"
|
||||||
|
|
||||||
# Prune old images and build cache to prevent disk bloat
|
# Prune old images; keep build cache capped at 2GB for fast rebuilds
|
||||||
echo " [4/4] Pruning stale Docker data..."
|
echo " [4/4] Pruning stale Docker data..."
|
||||||
ssh "$PI_USER@$host" "docker image prune -af --filter 'until=24h' 2>/dev/null; docker builder prune -af --filter 'until=24h' 2>/dev/null" || true
|
ssh "$PI_USER@$host" "docker image prune -af --filter 'until=24h' 2>/dev/null; docker builder prune -f --keep-storage=2GB 2>/dev/null" || true
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo " Done: $name"
|
echo " Done: $name"
|
||||||
@@ -114,8 +114,9 @@ case "$TARGET" in
|
|||||||
|
|
||||||
all|both)
|
all|both)
|
||||||
PI_HOST=$(resolve_pi_host)
|
PI_HOST=$(resolve_pi_host)
|
||||||
deploy "Pi" "$PI_HOST" "$PI_PATH"
|
deploy "Pi" "$PI_HOST" "$PI_PATH" &
|
||||||
deploy "Beta VM" "$BETA_HOST" "$BETA_PATH"
|
deploy "Beta VM" "$BETA_HOST" "$BETA_PATH" &
|
||||||
|
wait
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
|
|||||||
@@ -26,7 +26,8 @@
|
|||||||
"fastify": "^4.28.1",
|
"fastify": "^4.28.1",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"livekit-server-sdk": "^2.6.1",
|
"livekit-server-sdk": "^2.6.1",
|
||||||
"sharp": "^0.33.0"
|
"sharp": "^0.33.0",
|
||||||
|
"tsx": "^4.16.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bcryptjs": "^2.4.6",
|
"@types/bcryptjs": "^2.4.6",
|
||||||
@@ -35,7 +36,6 @@
|
|||||||
"@types/node": "^20.14.0",
|
"@types/node": "^20.14.0",
|
||||||
"@types/ws": "^8.18.1",
|
"@types/ws": "^8.18.1",
|
||||||
"drizzle-kit": "^0.24.0",
|
"drizzle-kit": "^0.24.0",
|
||||||
"tsx": "^4.16.0",
|
|
||||||
"typescript": "^5.4.0",
|
"typescript": "^5.4.0",
|
||||||
"vitest": "^4.0.18"
|
"vitest": "^4.0.18"
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+3
-3
@@ -82,6 +82,9 @@ importers:
|
|||||||
sharp:
|
sharp:
|
||||||
specifier: ^0.33.0
|
specifier: ^0.33.0
|
||||||
version: 0.33.5
|
version: 0.33.5
|
||||||
|
tsx:
|
||||||
|
specifier: ^4.16.0
|
||||||
|
version: 4.21.0
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@types/bcryptjs':
|
'@types/bcryptjs':
|
||||||
specifier: ^2.4.6
|
specifier: ^2.4.6
|
||||||
@@ -101,9 +104,6 @@ importers:
|
|||||||
drizzle-kit:
|
drizzle-kit:
|
||||||
specifier: ^0.24.0
|
specifier: ^0.24.0
|
||||||
version: 0.24.2
|
version: 0.24.2
|
||||||
tsx:
|
|
||||||
specifier: ^4.16.0
|
|
||||||
version: 4.21.0
|
|
||||||
typescript:
|
typescript:
|
||||||
specifier: ^5.4.0
|
specifier: ^5.4.0
|
||||||
version: 5.9.3
|
version: 5.9.3
|
||||||
|
|||||||
Reference in New Issue
Block a user