diff --git a/src/commands/site.ts b/src/commands/site.ts index 3201010..383ba09 100644 --- a/src/commands/site.ts +++ b/src/commands/site.ts @@ -338,9 +338,25 @@ export async function runSiteAddInteractive(): Promise { // 10. Next steps console.log('\n' + pc.green('✓ ') + pc.bold(`Site "${slug}" ready.`) + '\n'); + const atUri = updatedSite.publication_at_uri ?? ''; console.log(pc.bold(pc.cyan(' ① .well-known file'))); console.log(pc.dim(` Serve this exact content at ${pc.bold(wellKnownPath)} :\n`)); - console.log(' ' + pc.green(updatedSite.publication_at_uri ?? '')); + console.log(' ' + pc.green(atUri)); + console.log(pc.dim('\n Drop one of these into the reverse proxy that fronts Ghost, before')); + console.log(pc.dim(' any catch-all directive that proxies to the Ghost container:\n')); + console.log(pc.dim(' Caddy (e.g. the bundled Caddy in the official Ghost docker-compose):')); + console.log(pc.dim(' ') + pc.cyan('handle /.well-known/site.standard.publication {')); + console.log(pc.dim(' ') + pc.cyan('header Content-Type text/plain')); + console.log(pc.dim(' ') + pc.cyan(`respond "${atUri}"`)); + console.log(pc.dim(' ') + pc.cyan('}')); + console.log(''); + console.log(pc.dim(' nginx:')); + console.log(pc.dim(' ') + pc.cyan('location = /.well-known/site.standard.publication {')); + console.log(pc.dim(' ') + pc.cyan('default_type text/plain;')); + console.log(pc.dim(' ') + pc.cyan(`return 200 "${atUri}";`)); + console.log(pc.dim(' ') + pc.cyan('}')); + console.log(pc.dim('\n Reload after editing — `docker compose exec caddy caddy reload`')); + console.log(pc.dim(' for bundled Caddy, `sudo nginx -s reload` (or systemctl) for nginx.')); console.log(''); if (!webhooksAuto) {