# Déploiement — o-k-i.net (SvelteKit statique) Le site est entièrement pré-rendu : `npm run build` produit un dossier `build/` de fichiers statiques servable par n'importe quel hébergement de fichiers, **sans serveur Node**. ```bash npm install npm run build # → build/ ``` Contenu notable de `build/` : pages HTML par route (`index.html`, `dons/index.html`, `en/…`), assets fingerprintés (`_app/`), polices (`fonts/`), PDF presse (`assets/press/`), PWA (`sw.js`, `registerSW.js`, `manifest.webmanifest`), `404.html`, `robots.txt`, `sitemap.xml`. --- ## Option A — o2switch (Apache, mutualisé) 1. Builder en local puis transférer **le contenu de `build/`** à la racine web du domaine (via FTP/SFTP ou le gestionnaire de fichiers cPanel), typiquement `public_html/`. 2. **Conserver le fichier `build/.htaccess`** (fichier caché — vérifier qu'il est bien transféré). Il contient : - redirection HTTP → HTTPS (compatible proxy), - `ErrorDocument 404 /404.html`, - headers de sécurité (HSTS, CSP `default-src 'self'`, `X-Frame-Options: DENY`, `nosniff`, `Referrer-Policy`, `Permissions-Policy`), - cache immutable pour `/_app/` et `/fonts/`. 3. HTTPS : activer le certificat Let's Encrypt dans cPanel (la redirection exempte `.well-known/acme-challenge/`). 4. Vérifications post-déploiement : - `curl -sI https://o-k-i.net/` → headers de sécurité présents, - `curl -s https://o-k-i.net/ | grep -c "b-cdn.net\|googleapis"` → `0`, - une URL inexistante → page 404 designée avec statut 404. > Le service worker (`sw.js`) est servi en `text/javascript` par défaut sous Apache — rien à configurer. ## Option B — Cloudflare Pages 1. Projet Pages connecté au dépôt, ou déploiement direct : `npx wrangler pages deploy build`. 2. Configuration du projet : - **Build command** : `npm run build` - **Build output directory** : `build` 3. **Le fichier `build/_headers` est pris en compte automatiquement** par Cloudflare Pages (headers de sécurité + cache immutable). Ne pas le supprimer. 4. La page 404 : Cloudflare Pages sert automatiquement `/404.html` avec le statut 404 pour les routes inconnues. 5. HTTPS/HSTS : gérés par Cloudflare ; le header HSTS est aussi dans `_headers`. ## Points communs - **Aucune variable d'environnement** n'est nécessaire au build. - Le site fonctionne sans JavaScript côté serveur ; les seuls scripts sont statiques (`theme.js`, `lang-redirect.js`, `registerSW.js`, bundles `_app/`). - CSP stricte : si vous ajoutez un jour une ressource externe, il faudra l'ajouter à la CSP (dans `.htaccess` ET `_headers`) — ou mieux, la self-héberger. - Les PDF de presse (~34 Mo dans `assets/press/`) font partie du déploiement.