mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 08:46:22 +02:00
100 lines
2.7 KiB
JavaScript
100 lines
2.7 KiB
JavaScript
/**
|
|
* Runtime environment variable substitution for Next.js Docker images.
|
|
*
|
|
* Next.js inlines NEXT_PUBLIC_* values at build time. The Docker image is built
|
|
* with unique placeholder strings (e.g. __NEXT_PUBLIC_FASTAPI_BACKEND_URL__).
|
|
* This script replaces those placeholders with real values from the container's
|
|
* environment variables before the server starts.
|
|
*
|
|
* Runs once at container startup via docker-entrypoint.sh.
|
|
*/
|
|
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const replacements = [
|
|
[
|
|
"__NEXT_PUBLIC_FASTAPI_BACKEND_URL__",
|
|
process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL || "http://localhost:8000",
|
|
],
|
|
[
|
|
"__NEXT_PUBLIC_ELECTRIC_URL__",
|
|
process.env.NEXT_PUBLIC_ELECTRIC_URL || "http://localhost:5133",
|
|
],
|
|
[
|
|
"__NEXT_PUBLIC_FASTAPI_BACKEND_AUTH_TYPE__",
|
|
process.env.NEXT_PUBLIC_FASTAPI_BACKEND_AUTH_TYPE || "LOCAL",
|
|
],
|
|
[
|
|
"__NEXT_PUBLIC_ETL_SERVICE__",
|
|
process.env.NEXT_PUBLIC_ETL_SERVICE || "DOCLING",
|
|
],
|
|
[
|
|
"__NEXT_PUBLIC_DEPLOYMENT_MODE__",
|
|
process.env.NEXT_PUBLIC_DEPLOYMENT_MODE || "self-hosted",
|
|
],
|
|
[
|
|
"__NEXT_PUBLIC_ELECTRIC_AUTH_MODE__",
|
|
process.env.NEXT_PUBLIC_ELECTRIC_AUTH_MODE || "insecure",
|
|
],
|
|
];
|
|
|
|
let filesProcessed = 0;
|
|
let filesModified = 0;
|
|
|
|
function walk(dir) {
|
|
let entries;
|
|
try {
|
|
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
} catch {
|
|
return;
|
|
}
|
|
for (const entry of entries) {
|
|
const full = path.join(dir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
walk(full);
|
|
} else if (entry.name.endsWith(".js")) {
|
|
filesProcessed++;
|
|
let content = fs.readFileSync(full, "utf8");
|
|
let changed = false;
|
|
for (const [placeholder, value] of replacements) {
|
|
if (content.includes(placeholder)) {
|
|
content = content.replaceAll(placeholder, value);
|
|
changed = true;
|
|
}
|
|
}
|
|
if (changed) {
|
|
fs.writeFileSync(full, content);
|
|
filesModified++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log("[entrypoint] Replacing environment variable placeholders...");
|
|
for (const [placeholder, value] of replacements) {
|
|
console.log(` ${placeholder} -> ${value}`);
|
|
}
|
|
|
|
walk(path.join(__dirname, ".next"));
|
|
|
|
const serverJs = path.join(__dirname, "server.js");
|
|
if (fs.existsSync(serverJs)) {
|
|
let content = fs.readFileSync(serverJs, "utf8");
|
|
let changed = false;
|
|
filesProcessed++;
|
|
for (const [placeholder, value] of replacements) {
|
|
if (content.includes(placeholder)) {
|
|
content = content.replaceAll(placeholder, value);
|
|
changed = true;
|
|
}
|
|
}
|
|
if (changed) {
|
|
fs.writeFileSync(serverJs, content);
|
|
filesModified++;
|
|
}
|
|
}
|
|
|
|
console.log(
|
|
`[entrypoint] Done. Scanned ${filesProcessed} files, modified ${filesModified}.`
|
|
);
|