Reduce background model deployment overhead

This commit is contained in:
achraf
2026-06-08 00:40:57 +02:00
parent fdc6d8f14d
commit 9e507d2ea6
3 changed files with 38 additions and 3 deletions

View File

@@ -16,11 +16,14 @@ COPY . .
# that directory in a BuildKit cache avoids downloading ~300 MB after every
# source-only redeploy, while Vite still copies the assets into dist/imgly.
RUN --mount=type=cache,id=plimi-imgly-assets,target=/app/public/imgly,sharing=locked \
pnpm build
pnpm build && mv /app/dist/imgly /app/imgly-dist
FROM nginx:1.27-alpine AS runtime
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY docker/40-generate-runtime-config.sh /docker-entrypoint.d/40-generate-runtime-config.sh
# Keep the large, versioned model files in a stable layer. App-only changes can
# then reuse this layer instead of exporting the full model bundle each time.
COPY --from=build /app/imgly-dist /usr/share/nginx/html/imgly
COPY --from=build /app/dist /usr/share/nginx/html
RUN chmod +x /docker-entrypoint.d/40-generate-runtime-config.sh
EXPOSE 80

View File

@@ -10,7 +10,7 @@
"predev": "node scripts/fetch-imgly-assets.mjs",
"dev": "vite --host",
"prebuild": "node scripts/fetch-imgly-assets.mjs",
"build": "tsc -b && vite build",
"build": "node scripts/build.mjs",
"preview": "vite preview",
"test": "vitest",
"test:e2e": "playwright test",
@@ -46,4 +46,4 @@
"vite": "^8.0.12",
"vitest": "^4.1.6"
}
}
}

32
scripts/build.mjs Normal file
View File

@@ -0,0 +1,32 @@
import { spawn } from "node:child_process";
import path from "node:path";
import { fileURLToPath } from "node:url";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
function run(script, args) {
const child = spawn(process.execPath, [path.join(root, script), ...args], {
cwd: root,
stdio: "inherit",
});
return new Promise((resolve, reject) => {
child.once("error", reject);
child.once("exit", (code, signal) => {
if (signal) {
reject(new Error(`${script} terminated by ${signal}`));
return;
}
resolve(code ?? 1);
});
});
}
const [typecheckStatus, viteStatus] = await Promise.all([
run("node_modules/typescript/bin/tsc", ["-b"]),
run("node_modules/vite/bin/vite.js", ["build"]),
]);
if (typecheckStatus !== 0 || viteStatus !== 0) {
process.exitCode = 1;
}