Reduce background model deployment overhead
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
32
scripts/build.mjs
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user