Hecho con Chinaski

Variables de Entorno

Chinaski se configura mediante un puñado de variables de entorno, la ubicación de la base de datos, el directorio de output estático, el security secret y algunas overrides opcionales. El instalador las escribe por ti; esta página es la referencia completa para cuando necesites cambiarlas a mano.

Dónde establecerlas

  • Instalaciones de instancia única: /etc/chinaski<N>/env (el archivo que la unidad systemd chinaski@<N> carga). Mantén el archivo en modo 0600.
  • El servidor MCP: /etc/chinaski<N>/mcp-env, leído por chinaski-mcp@<N>.
  • Script de backup y script de deploy: en el entorno al momento de la invocación.
  • El archivo creado viene con CHINASKI_SECRET establecida y CHINASKI_AIRGAP=1 activo.

Requeridas

Variable Qué hace Default
CHINASKI_SECRET Key de firma de sesiones, y la key usada para cifrar los secrets almacenados (contraseña SMTP) en la base de datos. El CMS se niega a arrancar sin ella. El instalador genera una con openssl rand -hex 32. none
CHINASKI_DB Ruta del archivo de base de datos SQLite. <app root>/chinaski.db
CHINASKI_OUTPUT Directorio en el que escribe el builder estático. <app root>/output
LISTEN_URL Dirección a la que se enlaza el daemon del CMS (usada por la unidad systemd). Debe ser loopback (p. ej. http://127.0.0.1:3001) en producción. En combinación con CHINASKI_SECRET, esto vive en /etc/chinaski<N>/env. none

Cambiar CHINASKI_SECRET invalida las sesiones de admin (todos quedan deslogueados) y vuelve indescifrables los valores almacenados previamente cifrados (como la contraseña SMTP), re-guarda esas settings después de rotar la key.

Enlaza LISTEN_URL a loopback, no a una interfaz pública. El CMS solo confía en X-Forwarded-For de peers de loopback; un bind público permitiría a cualquier cliente falsificar headers que alimentan el rate limiting por IP y los bloqueos de login.

Escucha

  • CHINASKI_LISTEN, dirección de escucha al correr bajo hypnotoad. Default http://127.0.0.1:8080.
  • CHINASKI_WORKERS, conteo de workers de hypnotoad. Default 2.
  • MOJO_MODE, modo estándar de Mojolicious. Las unidades de producción establecen production.

Los valores actuales de CHINASKI_DB, CHINASKI_OUTPUT, CHINASKI_URL_BASE, CHINASKI_LISTEN y si CHINASKI_SECRET está establecida son visibles en la página de settings de admin.

Modo air-gap (CHINASKI_AIRGAP=1)

Deshabilita cada llamada saliente e integración externa en un solo interruptor. Con el modo air-gap activado:

  • Los webhooks de build, form, post y publish nunca se entregan.
  • rsync y el deploy a S3 no corren, y los reintentos de webhook se detienen.
  • Cloudflare Turnstile se omite por completo: la verificación auto-pasa y el widget se retira de las páginas de login y form, sin importar las keys almacenadas en settings.
  • Las notificaciones por correo de admin se omiten.
  • La verificación del manifest de actualizaciones de versión no se realiza.
  • El builder estático elimina los analytics externos (GA4/GTM) y elimina el código de snippets que referencia URLs externas, así que ninguna página pública jala nada de un CDN.

El instalador habilita esto por defecto.

Build estático

  • CHINASKI_INCREMENTAL=1, pide un build incremental. El builder puede aún elegir un build completo si decide que se requiere uno.
  • CHINASKI_FORCE_FULL=1, fuerza un rebuild completo (usada por bin/force-full-build.pl y el control de rebuild de admin).
  • CHINASKI_FORCE_PROMOTE=1, promueve el build incluso cuando el quality guard lo retendría porque los conteos de páginas u otras métricas cayeron.
  • CHINASKI_JOBS, paralelismo de build. Debe ser un número simple; sobrescribe la setting build_jobs; por defecto al conteo de CPU; sujeta a 1–16.
  • CHINASKI_BLOCK_TEMPLATES, directorio de block templates. Default builder/block_templates en el repo.
  • CHINASKI_MANIFEST_OPTIONAL=1, un fallo al producir el build manifest firmado normalmente aborta el build; establecer esto lo convierte en advertencia. Déjalo apagado en producción: un build "verde" sin un manifest firmado utilizable es peor que un build fallido.

Firma, keys y actualizaciones

  • CHINASKI_PRIVATE, directorio que contiene el build manifest firmado (build-manifest.json y su .sig). Default <repo root>/private.
  • CHINASKI_KEYS, directorio que contiene el keypair de firma Ed25519 del manifest. Default <repo root>/keys.
  • CHINASKI_URL_BASE, sobrescribe la setting de site chinaski_url_base para las URLs construidas y el sitemap.
  • CHINASKI_CMS_URL, sobrescribe la setting cms_base_url.
  • CHINASKI_UPDATE_MANIFEST_URL, si está establecida, el dashboard de admin revisa esta URL de manifest por releases más nuevas (se omite en modo air-gap). Obtiene con timeouts cortos de 3/5 segundos.
  • CHINASKI_RELEASE_PUBKEY, archivo alterno de public key de verificación de releases; default keys/chinaski_release.pub en el directorio de la app.

Runtime y operaciones

  • CHINASKI_TRUSTED_PROXIES, lista separada por comas de IPs de proxy o rangos CIDR IPv4 cuyos headers X-Forwarded-For son confiables. Loopback siempre es confiable; las entradas extra importan cuando tu reverse proxy de otro modo es visible para la app en una red de contenedor/bridge. Default: solo loopback.
  • CHINASKI_SMTP_INSECURE_NOVERIFY=1, deshabilita la verificación de certificados TLS para SMTP saliente. Solo para pruebas o setups de correo deliberadamente inseguros.
  • CHINASKI_SKIP_PERF_INDEXES=1, omite aplicar los índices de rendimiento automáticos; para tooling de migración, no uso normal.
  • CHINASKI_DOCS_DIR, directorio de documentos. Default: documents junto al archivo de base de datos.
  • CHINASKI_MEDIA_DIR, directorio de media (usado por el script de backup y la purga automática de archivos de media trashed). Default public/media en el árbol de la app (/var/www/chinaski<N>/public/media en instalaciones systemd).
  • CHINASKI_ADMIN_PASSWORD, contraseña para corridas no interactivas de bin/chinaski-setup.pl (alternativa a --password).

Webhooks

  • WEBHOOK_MAX_CONCURRENT, máximo de peticiones de webhook salientes simultáneas. Default 8.

Servidor MCP

chinaski-mcp requiere CHINASKI_API_URL (URL base del CMS) y CHINASKI_API_KEY; se niega a arrancar sin ellas. Afinado opcional:

  • CHINASKI_MCP_SESSION_TTL, vida útil de la sesión en segundos (default 86400).
  • CHINASKI_MCP_SESSION_DB, ruta de la base de datos de sesiones (default chinaski-mcp/sessions.db).
  • CHINASKI_MCP_LOG_DIR / CHINASKI_MCP_LOG_FILE, ubicación del log (defaults logs/ y logs/mcp-server.log).
  • CHINASKI_MCP_MAX_RETRIES, default 3.
  • CHINASKI_MCP_CONTEXT_TTL, vida de la cache de site-context en segundos (default 300).

Backups y deploys

Usadas por deploy/backup.sh:

  • CHINASKI_BACKUP_DIR, destino de backup; default /var/backups/chinaski<N>.
  • CHINASKI_BACKUP_RETENTION_DAYS, cuánto se conservan los snapshots de base de datos; default 14.

Usadas por deploy/deploy.sh:

  • CHINASKI_ALLOW_BUILD_FAIL=1, normalmente un build fallido aborta el deploy para que el servicio nunca se reinicie sobre output rancio o parcial; esta bandera continúa de todos modos en una emergencia.

Advertencias

  • Mantén /etc/chinaski<N>/env en modo 0600. Los backups contienen la base de datos completa (hashes de contraseñas, secrets cifrados); el script de backup ajusta el directorio de backups a 0700 en cada corrida, asegúrate de que nada más lo ensanche.
  • CHINASKI_AIRGAP=1 silencia el tráfico saliente por completo; establécela antes del primer arranque si tu despliegue nunca toca internet.
  • Rotar CHINASKI_SECRET es un evento deliberado, no mantenimiento de rutina: las sesiones mueren y las settings cifradas necesitan re-guardarse.
Lee este sitio en