feat(docker): prepare portable images with runtime hotel configuration
This commit is contained in:
1 parent
745d0b7247
commit
c4496e710b
28 files changed
+622
-104
No files matched your search
@@ -0,0 +1,47 @@
|
||||
// Fail before listening if an installation has no valid runtime configuration.
|
||||
import { spawn } from "node:child_process";
|
||||
import { pathToFileURL } from "node:url";
|
||||
|
||||
export function validateRuntime(settings) {
|
||||
const invalid = [];
|
||||
if (!settings.HOTEL_NAME?.trim() || settings.HOTEL_NAME === "Build fixture")
|
||||
invalid.push("HOTEL_NAME");
|
||||
if (
|
||||
!settings.AUTH_SECRET ||
|
||||
settings.AUTH_SECRET.length < 32 ||
|
||||
settings.AUTH_SECRET.startsWith("build-fixture-")
|
||||
)
|
||||
invalid.push("AUTH_SECRET");
|
||||
for (const [key, protocols] of [
|
||||
["DATABASE_URL", ["mysql:"]],
|
||||
["APP_URL", ["http:", "https:"]],
|
||||
]) {
|
||||
try {
|
||||
if (!protocols.includes(new URL(settings[key]).protocol))
|
||||
invalid.push(key);
|
||||
} catch {
|
||||
invalid.push(key);
|
||||
}
|
||||
}
|
||||
if (invalid.length)
|
||||
throw new Error(`Invalid runtime configuration: ${invalid.join(", ")}`);
|
||||
}
|
||||
|
||||
if (import.meta.url === pathToFileURL(process.argv[1]).href) {
|
||||
try {
|
||||
validateRuntime(process.env);
|
||||
const child = spawn(process.execPath, ["server.js"], { stdio: "inherit" });
|
||||
for (const signal of ["SIGTERM", "SIGINT"])
|
||||
process.on(signal, () => child.kill(signal));
|
||||
child.on("error", () => {
|
||||
console.error("CMS process could not start");
|
||||
process.exitCode = 1;
|
||||
});
|
||||
child.on("exit", (code) => {
|
||||
process.exitCode = code ?? 1;
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error.message);
|
||||
process.exitCode = 1;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user