Penso di aver trovato il problema. Se eseguo una ricostruzione, non riavvio mai Caddy. D’ora in poi, farò così:
./launcher rebuild app && systemctl reload caddy
Sospetto che Caddy utilizzi la cache del socket o qualcosa di simile dopo una ricostruzione. Ma di solito non accade immediatamente dopo una ricostruzione. Vedremo.