Fix harness crash: load standalone config to skip webpack in production
All checks were successful
CI / lint-and-test (push) Successful in 38s
Deploy Production / deploy (push) Successful in 1m26s
CI / build (push) Successful in 1m52s

The standalone next package is trimmed and doesn't include webpack.
The custom server.js was using next() which triggers config loading
that requires webpack. Fix by extracting the standalone config at
build time and setting __NEXT_PRIVATE_STANDALONE_CONFIG before
requiring next, matching what the generated standalone server does.
This commit is contained in:
Julia McGhee
2026-03-21 21:44:07 +00:00
parent c135a15306
commit 548b0fde98
2 changed files with 21 additions and 3 deletions

View File

@@ -25,6 +25,11 @@ COPY --from=deps /app ./
COPY packages/db ./packages/db
COPY apps/harness ./apps/harness
RUN pnpm --filter @homelab/harness build
# Extract standalone next config so the custom server can skip webpack loading
RUN node -e "\
const s = require('fs').readFileSync('apps/harness/.next/standalone/apps/harness/server.js','utf8');\
const m = s.match(/const nextConfig = (\\{.+\\})\n/);\
require('fs').writeFileSync('apps/harness/.next/standalone/apps/harness/next-config.json', m[1]);"
FROM base AS runner
WORKDIR /app

View File

@@ -1,13 +1,26 @@
const { createServer } = require("http");
const path = require("path");
const { parse } = require("url");
const next = require("next");
const { attachPtyWebSocket } = require("./pty-server");
const dev = process.env.NODE_ENV !== "production";
const hostname = process.env.HOSTNAME || "0.0.0.0";
const port = parseInt(process.env.PORT || "3100", 10);
const app = next({ dev, hostname, port });
// In production, load the standalone config to avoid webpack dependency
if (!dev) {
try {
const configPath = path.join(__dirname, "next-config.json");
const nextConfig = JSON.parse(require("fs").readFileSync(configPath, "utf8"));
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig);
} catch {
// Config not found (local dev) — next() will load config normally
}
}
const next = require("next");
const { attachPtyWebSocket } = require("./pty-server");
const app = next({ dev, hostname, port, dir: __dirname });
const handle = app.getRequestHandler();
app.prepare().then(() => {