Hecho con Chinaski

Static Hosting con Caddy

Caddy sirve el árbol estático construido con TLS automático. El repositorio trae un ejemplo de Caddyfile (deploy/chinaski.Caddyfile.example) que copias y editas por despliegue. Caddy no tiene templating de instancias, así que el site de cada instancia necesita su propio dominio, dirección upstream del CMS, rutas de salida y cualquier subdominio de idioma.

Lo esencial en el ejemplo incluido

  • Instancias de site y puertos: instancia "1" → 3001, "2" → 3002 … siempre coincidiendo con la LISTEN_URL de /etc/chinaski<N>/env (loopback, así los clientes nunca hablan directamente con el daemon del CMS).
  • Rutas requeridas incluso en un site estático: proxy inverso de /forms/ y /documents/ al daemon del CMS (si no, las submissions de formularios dan 404 y las URLs de documentos dan 404).
  • Rutas honeypot (/.env, /.git/config, sondas wp-login etc.): enrutadas al CMS para que los hits se registren y se tarpitten en lugar de responderse con un 404 estático genérico.
  • Cabeceras explícitas X-Forwarded-For/Proto/Host en los bloques de proxy: la checklist de producción las señala para que la app vea las IPs reales de los clientes; el proxy por loopback se confía por defecto, así que no se necesita CHINASKI_TRUSTED_PROXIES salvo que tu salto sea por un bridge de contenedores.
  • Cabeceras de caché (igual que el ejemplo de nginx): HTML revalidar-5-min; sw.js no-cache; fuentes woff2 inmutables 1 año; otros assets 86400.
  • Cabeceras de seguridad de cinturón y tirantes en la configuración del proxy (la app establece las suyas también).

Múltiples instancias

Copia el ejemplo por instancia y ajusta: la lista de dominios de cada bloque de site (admin + vhosts de idioma), el puerto upstream (3001 para la instancia 1, 3002 para la instancia 2, etc.) y las rutas de document root por idioma (/var/www/chinaski1/output/en para inglés, …/es para español, etc.).

TLS

Caddy obtiene y renueva el TLS automáticamente cuando el DNS apunta al host y los puertos 80/443 son alcanzables. Verifica con un curl -I https://<admin-host> una vez que el Caddyfile esté en vivo.

Lee este sitio en