El sitio de Zonda Cloud (zondacloud.com)
El sitio público de Zonda Cloud es un directorio de archivos planos, apps/zondacloud/ (HTML y CSS, sin construcción, sin dependencias y sin
JavaScript). Es independiente del sitio de cloud-web (cloudweb.zondacloud.com: instaladores y documentación), que no cambia.
Producción corre en Cloudflare, como un Worker de solo assets (sin código de Worker): la zona zondacloud.com ya está ahí, así que el
DNS se crea solo y el sitio no depende de ninguna máquina propia. La configuración está en deploy/zondacloud/wrangler.jsonc (fuera del
directorio del sitio, para que no se publique con él). Las cabeceras de seguridad y la caché están en apps/zondacloud/_headers.
Desplegarlo
Opción 1 (recomendada): Workers Builds, sin credenciales en el CI
Cloudflare conecta el repositorio de GitLab (gitlab.com; las instancias autoalojadas no se admiten) y despliega en cada push.
- En el panel de Cloudflare: Workers & Pages → Create → Import a repository y elegí
cloud-web1/cloud-web. - Configuración del build (Settings → Build):
- Root directory: vacío (la raíz del repositorio).
- Build command: vacío. El sitio no se construye; un build de la raíz correría todo el monorepo para nada.
- Deploy command:
npx wrangler deploy --config deploy/zondacloud/wrangler.jsonc. El--configexplícito es necesario: sin él,wranglercorre en la raíz de un workspace y falla con "application detection logic has been run in the root of a workspace".
- En Build watch paths limitá el despliegue a
apps/zondacloud/*ydeploy/zondacloud/*para que los demás pushes del repositorio no lo disparen. - Primer despliegue: Cloudflare enlaza
zondacloud.comywww.zondacloud.com(crea los registros DNS). Si ya hay un registro con ese nombre, borralo antes: el enlace no pisa registros.
Opción 2: wrangler deploy desde el CI
Sirve si preferís controlar cuándo se despliega. Hace falta un token de API de Cloudflare con permiso de editar Workers (Account → Workers Scripts → Edit)
y el ID de la cuenta, cargados en Settings → CI/CD → Variables como CLOUDFLARE_API_TOKEN y CLOUDFLARE_ACCOUNT_ID, protegidas y enmascaradas
(nunca en el repositorio). El job es una línea sobre una imagen de Node:
npx wrangler@4 deploy --config deploy/zondacloud/wrangler.jsonc
Para probar la configuración sin desplegar ni usar credenciales: npx wrangler@4 deploy --dry-run --config deploy/zondacloud/wrangler.jsonc.
www al dominio sin www
www.zondacloud.com queda enlazado al mismo Worker, y la URL canónica de la página es https://zondacloud.com/. Para que www redirija, creá una
regla en la zona (Rules → Redirect Rules → Create rule → Single Redirect):
- Cuando: el nombre de host es
www.zondacloud.com. - Entonces: redirección dinámica a
concat("https://zondacloud.com", http.request.uri.path)conservando la cadena de consulta, código301.
(_redirects no distingue por nombre de host, por eso va como regla de la zona.)
Comprobar
curl -sI https://zondacloud.com | head -5 # 200, y las cabeceras de _headers (content-security-policy, x-content-type-options)
curl -sI https://www.zondacloud.com | head -3 # 301 hacia https://zondacloud.com/
curl -sI https://cloudweb.zondacloud.com/install.sh | head -1 # el instalador de cloud-web sigue donde estaba
Antes de publicar un cambio del sitio
node scripts/check-zondacloud.mjs # axe, contraste AA, metadatos, cabeceras, contenido veraz, sin scripts ni recursos remotos, peso
scripts/zondacloud/og.sh # si cambió el titular: vuelve a generar apps/zondacloud/og.png (Chromium + ImageMagick o Pillow)
El sitio solo puede prometer lo que el producto hace hoy: la comprobación rechaza precios, planes, niveles de servicio, regiones y testimonios.