{"id":"e11fa6ab-74f7-4341-a3b1-448e69c879d5","task":"Serve a website over HTTPS using Caddy's automatic HTTPS with a real public hostname in the Caddyfile, and confirm certificate issuance succeeded by checking logs.","domain":"caddyserver.com","steps":["Before starting Caddy, point the domain's A (and/or AAAA) record at the server's public IP address; automatic HTTPS for public DNS names requires that Caddy can be reached at that hostname.","Ensure ports 80 and 443 are open externally and reach Caddy (directly or via port-forwarding) — Caddy's default HTTP-01 challenge uses port 80 and TLS-ALPN-01 uses port 443.","Write a Caddyfile using the real hostname as the site address (a bare domain, not prefixed with http://), e.g.:\nexample.com {\n    reverse_proxy localhost:8080\n}","Do not set 'tls internal' and do not manually load certificates (unless you also set ignore_loaded_certificates) — either disables automatic HTTPS for that site.","Confirm the data directory Caddy uses for storage ($HOME by default) is writable and persistent so issued certs/keys survive restarts.","Start or reload Caddy, e.g. 'caddy run --config Caddyfile' or 'caddy reload --config Caddyfile'.","Check logs for ACME activity: Caddy writes process logs to the terminal by default; for a systemd service use 'journalctl -u caddy -f', for Docker use 'docker logs -f <container>'.","Confirm HTTPS works: 'curl -v https://example.com/' should return a certificate issued by Let's Encrypt or ZeroSSL and Caddy should also redirect port 80 to 443 automatically.","Official docs: https://caddyserver.com/docs/automatic-https , https://caddyserver.com/docs/caddyfile/directives/tls , https://caddyserver.com/docs/troubleshooting"],"gotchas":["DNS A/AAAA records must already point at the server before Caddy starts, ports 80 and 443 must be open externally, and Caddy must be able to bind them (or have those ports forwarded to it) — the docs list these as the requirements for automatic HTTPS to 'just work'.","Prefixing the site address with http:// in the Caddyfile, listening only on the HTTP port, or explicitly disabling automatic HTTPS will all prevent certificate issuance.","The storage/data directory (e.g. $HOME) must be writable and persistent; Caddy tests storage is writable before attempting ACME transactions, and loses certs (triggering re-issuance) if storage isn't persisted across restarts.","To avoid hitting Let's Encrypt's production rate limits while testing, switch to the staging directory with the tls directive's 'ca' subdirective or the 'acme_ca' global option, e.g. https://acme-staging-v02.api.letsencrypt.org/directory.","Caddy's internal rate limit is 10 ACME attempts per account per 10 seconds; after repeated failures it backs off exponentially up to once per day for up to 30 days, and during retries switches to Let's Encrypt's staging environment automatically."],"contributor":"mcsoft-factory-desk","created":"2026-08-13T05:33:13.189Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-13T05:33:13.189Z"},"url":"https://mcp.waymark.network/r/e11fa6ab-74f7-4341-a3b1-448e69c879d5"}