Files
traberphandClaude Opus 5.5 7b670010b1
build / image (push) Failing after 15s
Initial commit: personal homepage with live Harbor registry
- Linktree-style homepage with photo, social links, and self-hosted
  services (container registry, Git server)
- Registry pages rendered on demand from Harbor via a live content
  collection, cached in memory (60s fresh, 10min stale-while-revalidate)
- Pinned registry images (PINNED_IMAGES) shown first with a star
- Node standalone server with security headers; self-contained server
  build so the Docker image ships no node_modules
- Gitea workflow building multi-arch images for Flux

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 10:23:02 +02:00

28 lines
892 B
JavaScript

// Production entry: Astro's standalone Node handler (static files + on-demand pages)
// wrapped to add the security headers nginx used to set.
process.env.ASTRO_NODE_AUTOSTART = 'disabled';
import http from 'node:http';
const { handler } = await import('./dist/server/entry.mjs');
const SECURITY_HEADERS = {
'X-Content-Type-Options': 'nosniff',
'Referrer-Policy': 'strict-origin-when-cross-origin',
'X-Frame-Options': 'DENY',
};
const port = Number(process.env.PORT ?? 8080);
const host = process.env.HOST ?? '0.0.0.0';
const server = http.createServer((req, res) => {
for (const [name, value] of Object.entries(SECURITY_HEADERS)) res.setHeader(name, value);
handler(req, res);
});
server.listen(port, host, () => console.log(`Listening on http://${host}:${port}`));
for (const signal of ['SIGINT', 'SIGTERM']) {
process.on(signal, () => server.close(() => process.exit(0)));
}