mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 00:36:31 +02:00
feat: add Docker configuration files and installation script for SurfSense
This commit is contained in:
parent
0fb6caa01f
commit
ce1f8c872f
11 changed files with 762 additions and 98 deletions
100
surfsense_web/docker-entrypoint.js
Normal file
100
surfsense_web/docker-entrypoint.js
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
/**
|
||||
* 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}.`
|
||||
);
|
||||
Loading…
Add table
Add a link
Reference in a new issue