← back to Dw Domain Fleet

scripts/gen-nginx.js

41 lines

#!/usr/bin/env node
/**
 * gen-nginx.js — generate one nginx vhost per fleet domain → data/nginx/<domain>.conf
 * HTTP-only initially (port 80); certbot --nginx adds the 443 block + redirect.
 */
const fs = require('fs');
const path = require('path');

const manifest = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'data', 'manifest.json'), 'utf8'));
const OUT = path.join(__dirname, '..', 'data', 'nginx');
fs.mkdirSync(OUT, { recursive: true });

const SEC = `
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options SAMEORIGIN always;
    add_header X-Content-Type-Options nosniff always;
    add_header Referrer-Policy strict-origin-when-cross-origin always;
    add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
    add_header Cross-Origin-Opener-Policy same-origin always;`;

manifest.forEach(m => {
  const conf = `# ${m.domain} — dwf-${m.slug} :${m.port}
server {
    listen 80;
    listen [::]:80;
    server_name ${m.domain} www.${m.domain};
${SEC}
    location / {
        proxy_pass http://127.0.0.1:${m.port};
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
`;
  fs.writeFileSync(path.join(OUT, m.domain + '.conf'), conf);
});
console.log(`Wrote ${manifest.length} nginx vhosts → data/nginx/`);