Serve the frontend on the bare domain instead of app.<domain>
Build & Deploy / Build & push images (push) Successful in 4m4s
Build & Deploy / Deploy to VM (push) Failing after 2m11s

Only drb.cusano.net and api.drb.cusano.net have public A records, so the
app.<domain> vhost had no cert to present and the bare domain — the record
that actually exists — matched no site at all, producing
ERR_SSL_PROTOCOL_ERROR in the browser.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Logan Cusano
2026-08-09 22:35:47 -04:00
parent 12c9ad73bb
commit 1f5f1fede8
@@ -1,4 +1,4 @@
# Managed by Ansible — do not edit manually on the server. # Managed by Ansible — do not edit manually.
api.{{ domain }} { api.{{ domain }} {
reverse_proxy localhost:8888 { reverse_proxy localhost:8888 {
@@ -6,7 +6,12 @@ api.{{ domain }} {
} }
} }
app.{{ domain }} { # Frontend is served on the bare domain, not app.{{ domain }}: only drb and api
# have public DNS records. A vhost for a name with no A record still starts,
# but Caddy retries ACME against it forever and logs a failure each time.
# To move it to app.{{ domain }}, create the A record first, then change this
# line — the reverse_proxy target stays the same either way.
{{ domain }} {
reverse_proxy localhost:3000 { reverse_proxy localhost:3000 {
header_up X-Forwarded-For {remote_host} header_up X-Forwarded-For {remote_host}
} }