Files
Webklar-Kundenbereich/runner/src/index.js
T

27 lines
1.5 KiB
JavaScript

import { loadConfig } from './config.js';
import { createApiServer } from './server.js';
import { createDocker } from './docker.js';
import { createJobs } from './jobs.js';
import { createDev } from './dev.js';
import { createProxy } from './proxy.js';
import os from 'node:os';
import { listenAddresses } from './listen.js';
const config = loadConfig(process.env);
const docker = createDocker();
const realJobs = createJobs({ config, docker });
// Die API antwortet auf POST /jobs/build mit { runId }.
const jobs = { submit: (job) => ({ runId: realJobs.submit(job) }), get: realJobs.get, queueLength: realJobs.queueLength };
setInterval(() => realJobs.pruneCache().catch((e) => console.error('pruneCache', e)), 24 * 3600e3).unref();
const dev = createDev({ config, docker, jobs: realJobs });
// Zustand der Dev-Server liegt nur im Speicher: Überbleibsel entfernen, dann jede Minute Leerlauf prüfen.
dev.cleanupOrphans().catch((e) => console.error('cleanupOrphans', e));
setInterval(() => dev.sweep().catch((e) => console.error('sweep', e)), 60e3).unref();
// R13: nur auf Adressen außerhalb des Sandbox-Netzes lauschen (kein Zugriff aus Dev-Containern am Traefik-Auth vorbei).
const addrs = listenAddresses(os.networkInterfaces(), config.sandboxSubnet);
for (const addr of addrs) {
createApiServer({ config, jobs, dev }).listen(config.apiPort, addr, () => console.log(`Preview-Runner API auf ${addr}:${config.apiPort}`));
createProxy({ config, dev }).listen(config.proxyPort, addr, () => console.log(`Preview-Runner Proxy auf ${addr}:${config.proxyPort}`));
}