01 / Arquitectura
Primer separa les quatre responsabilitats
Build
Una web estàtica pot generar HTML/CSS/JS en una carpeta de sortida; una app Node necessita codi, dependències i un entrypoint que es manté en execució.
Servei local
Els fitxers estàtics necessiten un file server. Una app Node ha d'escoltar en una adreça i port controlats, preferiblement loopback si Caddy és l'única entrada pública.
Frontera pública
Caddy rep el domini, termina HTTPS i decideix si serveix fitxers o envia la petició al procés Node. El panell d'administració no ha de compartir aquesta superfície per defecte.
Actualització
GitHub pot ser la font de codi i un runner self-hosted pot executar build, proves i desplegament, però l'actualització és una operació distinta de mantenir el servei viu.
02 / Caddy
Caddy: fitxers estàtics i reverse proxy són dos casos diferents
Per a una web estàtica, Caddy pot servir directament una arrel de fitxers amb file_server. Per a Node, la pràctica habitual és deixar l'aplicació en un port local i posar Caddy davant amb reverse_proxy. Quan la configuració utilitza un domini públic i DNS/ports estan preparats, Caddy pot gestionar HTTPS automàticament.
- En estàtic, publica només la carpeta de sortida del build; no exposis el repositori, .git, fitxers .env ni directoris de treball.
- En Node, escolta en loopback quan només Caddy hagi de parlar amb l'aplicació. No cal obrir el port intern al router.
- El domini públic ha d'apuntar a la IP correcta i TCP 80/443 ha d'arribar a Caddy si vols certificats públics automàtics.
- Valida la configuració abans de recarregar-la i comprova el domini real després del canvi.
- Un 200 del backend local i un 200 del domini públic són proves diferents: totes dues importen.
03 / GitHub
GitHub és la font de revisió, no el supervisor del procés
Un workflow amb runner self-hosted pot fer checkout, instal·lar dependències, executar tests, generar un build i preparar una revisió nova al mateix servidor. Això no converteix GitHub Actions en un gestor de processos. El servei estàtic o Node necessita el seu propi mecanisme d'execució, reinici o substitució controlada, i el desplegament ha de saber quina revisió queda activa.
Flux que convé poder auditar
- Commit o SHA que es vol desplegar i branca d'origen.
- Resultat de build i proves abans de tocar el servei actiu.
- Directori o revisió preparada fora de la publicació actual.
- Canvi atòmic o pas explícit d'activació i reinici del procés Node.
- Smoke local i després smoke HTTPS del domini públic.
- Revisió anterior disponible per fer rollback si el canvi falla.
04 / Cas real
Cas real: NRS Home Server
NRS Home Server aplica aquesta separació en Windows. Els desplegaments conserven procedència GitHub i historial; StaticHost i AppHost mantenen serveis independents del panell; i la publicació Caddy és opt-in per domini. Caddy continua sent extern: NRS Home Server no l'instal·la ni modifica DNS, router, firewall o certificats del sistema.
- Les webs estàtiques es registren i es serveixen mitjançant un StaticHost independent; les apps Node utilitzen ports loopback reservats.
- La publicació d'un domini apunta només a serveis registrats. El panell, Drive, backups i administració de Minecraft no es converteixen en destins públics.
- Abans de recarregar Caddy, la configuració generada es valida. Un gateway preparat no es presenta com a accessible des d'Internet si DNS o la xarxa externa no s'han comprovat.
- Els projectes GitHub conserven revisió desplegada, comprovació manual de frescor i una revisió anterior compatible per a recuperació.
- El model lleuger de persistència arrenca després d'iniciar sessió a Windows; no equival a hosting 24/7 abans del login.
05 / Checklist
Checklist de publicació
- 01
Decideix si el projecte és estàtic o necessita un procés Node persistent.
- 02
Mantén l'app Node en loopback i publica només Caddy a Internet.
- 03
Comprova DNS, ports 80/443 i firewall abans d'esperar HTTPS públic.
- 04
Executa build i QA sobre la revisió exacta que vols desplegar.
- 05
Prepara el canvi fora del servei actiu i conserva una via de rollback.
- 06
Verifica primer el servei local i després el domini HTTPS real.
- 07
No permetis que un workflow no fiable executi codi amb permisos del servidor.
06 / Límits
El que aquesta arquitectura no resol sola
Caddy no substitueix backups, monitorització, gestió de processos, actualitzacions del sistema ni una política de seguretat. Un runner self-hosted tampoc és una caixa de sorra: executa workflows dins d'una màquina que controles i pot conservar estat entre jobs. Si el servidor és crític, necessita més disciplina operativa que un PC domèstic encès puntualment.