58 lines
2.1 KiB
JavaScript
58 lines
2.1 KiB
JavaScript
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const requiredEnv = ["ADMIN_EMAIL", "ADMIN_PASSWORD", "ADMIN_SESSION_SECRET"];
|
|
const requiredDirs = [
|
|
path.join(process.cwd(), "data"),
|
|
path.join(process.cwd(), "storage", "config"),
|
|
path.join(process.cwd(), "storage", "uploads", "images"),
|
|
path.join(process.cwd(), ".next", "cache"),
|
|
];
|
|
|
|
function fail(message) {
|
|
process.stderr.write(`[funktechnik-website] ${message}\n`);
|
|
process.exit(1);
|
|
}
|
|
|
|
function ensureWritableDirectory(directory) {
|
|
fs.mkdirSync(directory, { recursive: true });
|
|
const probe = path.join(directory, `.write-check-${Date.now()}`);
|
|
fs.writeFileSync(probe, "ok", "utf8");
|
|
fs.rmSync(probe, { force: true });
|
|
}
|
|
|
|
function migrateLegacyUploads() {
|
|
const legacyDirectory = path.join(process.cwd(), "public", "uploads", "images");
|
|
const storageDirectory = path.join(process.cwd(), "storage", "uploads", "images");
|
|
|
|
if (!fs.existsSync(legacyDirectory)) return;
|
|
|
|
fs.mkdirSync(storageDirectory, { recursive: true });
|
|
for (const fileName of fs.readdirSync(legacyDirectory)) {
|
|
if (fileName.startsWith(".")) continue;
|
|
|
|
const source = path.join(legacyDirectory, fileName);
|
|
const target = path.join(storageDirectory, fileName);
|
|
const sourceStat = fs.statSync(source);
|
|
|
|
if (sourceStat.isFile() && !fs.existsSync(target)) {
|
|
fs.copyFileSync(source, target);
|
|
}
|
|
}
|
|
}
|
|
|
|
const missingEnv = requiredEnv.filter((name) => !process.env[name]);
|
|
if (missingEnv.length > 0) {
|
|
fail(`Start abgebrochen: fehlende Umgebungsvariablen: ${missingEnv.join(", ")}. Bitte .env anhand von .env.example konfigurieren.`);
|
|
}
|
|
|
|
try {
|
|
for (const directory of requiredDirs) ensureWritableDirectory(directory);
|
|
migrateLegacyUploads();
|
|
} catch (error) {
|
|
fail(`Start abgebrochen: Runtime-Verzeichnis ist nicht beschreibbar. Details: ${error instanceof Error ? error.message : "unbekannter Fehler"}`);
|
|
}
|
|
|
|
process.stdout.write(`[funktechnik-website] Runtime checks ok. Starting version ${process.env.NEXT_PUBLIC_APP_VERSION ?? "0.3.0"}.\n`);
|
|
require("./server.js");
|