Files
annu-kute-ced/docs/DEPLOIEMENT-SVELTEKIT.md
T
sucupira 28c2334927 Complète le portage des fonctionnalités du README
- Bloc « À propos » configurable (titre, 2 paragraphes, image légendée)
  + aside hashtags, masqué tant que non défini (ex-MOVEMENT_*)
- JSON-LD CollectionPage (catégories) et BreadcrumbList (vidéo, catégorie)
- Indicateur visuel de perte de connexion (online/offline)
- Verrou maintenance par compte à rebours multi-fuseaux (ex-COUNTDOWN_*) :
  build-time, titre kréyòl, redirection automatique à l'échéance
- browserconfig.xml (tuiles Windows)
2026-07-23 01:05:01 -04:00

3.6 KiB

Déploiement — ANNU KUTE CED (SvelteKit)

Branche svelte : le hub est un site 100 % statique (SvelteKit + adapter-static, prerender intégral). Les données PeerTube / Castopod / Mastodon sont récupérées au build : pour rafraîchir le contenu, on rebuild (cron, webhook ou CI).

Build

npm ci
npm run build        # génère build/ + injecte la CSP par page (scripts/postbuild-csp.mjs)
npm run preview      # vérification locale

Le dossier build/ est le site complet, déposable tel quel sur n'importe quel hébergement statique.

o2switch (Apache, mutualisé)

  1. Déposer le contenu de build/ à la racine web du domaine (public_html/ ou équivalent).
  2. Le .htaccess fourni dans build/ gère : redirection HTTPS, redirections des anciennes URLs PHP (index.php, video.php?uuid=…, categories.php?id=…, recherche.php?q=…, direct.php, dons.php, mentions-legales.php), ErrorDocument 404 /404.html, headers de sécurité, cache immutable pour /_app/ et /fonts/.
  3. Rafraîchissement du contenu : rebuild en local ou en CI puis rsync -av --delete build/ user@host:public_html/.

Exemple de cron quotidien (sur une machine de build) :

0 5 * * * cd /chemin/annu-kute-ced && git pull && npm ci --prefer-offline && npm run build && rsync -az --delete build/ user@o2switch:public_html/

Cloudflare Pages

  • Build command : npm run build
  • Build output directory : build
  • Le fichier _headers (dans build/) applique CSP, HSTS, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy et le cache immutable.
  • Les anciennes URLs PHP peuvent être redirigées via _redirects si besoin (le .htaccess ne s'applique pas chez Cloudflare).

Sécurité — modèle CSP

  • En-tête global (_headers / .htaccess) : style-src, img-src, font-src, connect-src 'self', media-src, frame-src https://gade.o-k-i.net, frame-ancestors 'none', base-uri, form-action, object-src 'none'.
  • script-src est délivré par page via une balise <meta http-equiv="Content-Security-Policy"> injectée par scripts/postbuild-csp.mjs : chaque page ne déclare que les empreintes SHA-256 de ses scripts inline (script de démarrage SvelteKit + JSON-LD). Aucun 'unsafe-inline' pour les scripts.
  • Seules exceptions sortantes (chargement de ressources) : les instances de l'écosystème first-party gade.o-k-i.net (vignettes, embeds, flux), kute.o-k-i.net (audio, pochettes), bokante.o-k-i.net (médias Mastodon). Aucun autre domaine tiers.

PWA

  • manifest.webmanifest + service worker Workbox (vite-plugin-pwa, generateSW) : précache du shell, navigateFallback: /offline/index.html.
  • Enregistrement par static/registerSW.js (chemins absolus), jamais par injection du plugin.

Configuration

Toute la configuration d'instance vit dans src/lib/config.ts (équivalent des anciennes constantes PHP) : instances agrégées, catégories prioritaires, hashtags, hero, dons, bloc « À propos » (about), annonce du prochain live (nextLive) et verrou maintenance (countdown). Quand countdown.enabled vaut true, le build rend la page de compte à rebours multi-fuseaux (titre kréyòl, redirection automatique à l'échéance) à la place de tout le site — l'équivalent statique de l'ancien COUNTDOWN_ENABLED.

Vérifications avant mise en production

npm run check   # 0 erreur, 0 warning
npm run build   # fetch des données + prerender + CSP

Puis, sur le build : zéro requête tierce au chargement hors instances de l'écosystème (onglet réseau), toutes les routes historiques redirigées, sitemap.xml et robots.txt servis.