# Déploiement — gong.gp (SvelteKit statique) Site **100 % statique** (SvelteKit + `adapter-static`, tout pré-rendu). Aucun serveur Node n'est requis en production. Doctrine : **souveraineté** — zéro service tiers, tout auto-hébergé. ## Build ```bash npm install npm run build # → dossier build/ npm run preview # prévisualisation locale ``` Le dossier `build/` contient le site complet (HTML pré-rendu, `_app/`, `fonts/`, `images/`, `sitemap.xml`, `sw.js`, `manifest.webmanifest`, `.htaccess`, `_headers`, `404.html`). ## Hébergement ### Option A — o2switch / Apache (mutualisé) Copier le contenu de `build/` à la racine web. Le `.htaccess` fourni gère : HTTPS forcé, en-têtes de sécurité, cache immuable, `ErrorDocument 404 /404.html`. Vérifier que `mod_headers`, `mod_rewrite`, `mod_expires`, `mod_deflate` sont actifs. ### Option B — Cloudflare Pages Build command : `npm run build` · Output directory : `build`. Le fichier `_headers` applique les en-têtes de sécurité et le CSP d'en-tête. Dans les deux cas, le CSP `script-src`/`style-src` est porté par la balise `` **hachée** générée par SvelteKit (`kit.csp`) ; les `_headers`/`.htaccess` n'ajoutent que les directives d'en-tête (`frame-ancestors`, HSTS…). ## Administration des actualités — Sveltia CMS L'admin est servie à `/admin/` (bundle Sveltia **auto-hébergé**, `static/admin/sveltia-cms.js`). Elle édite les fichiers `content/actualites/*.md` directement dans le dépôt Git (backend Gitea). **Configuration unique (à faire côté forge Gitea `labola.o-k-i.net`) :** 1. Créer une application OAuth2 : *Paramètres → Applications → Nouvelle application OAuth2*. - URL de redirection : `https://gong.gp/admin/` 2. Reporter le *Client ID* dans `static/admin/config.yml` → `backend.app_id`. 3. Vérifier `backend.branch` = branche déployée en production. Chaque publication depuis l'admin crée un commit ; un nouveau build/déploiement régénère le site. Le bundle Sveltia a été vendorisé depuis le paquet npm `@sveltia/cms` (mise à jour : recopier `node_modules/@sveltia/cms/dist/sveltia-cms.js` dans `static/admin/`). ## Retrait de Strapi (api.gong.gp) Le back-office Strapi (serveur Node + SQLite) **n'est plus utilisé** : les actualités passent par Sveltia (git-based) et le contenu historique est figé dans le dépôt (`src/lib/data/gong.ts`). Le dépôt `api.gong.gp` peut être archivé. Les éventuels articles Strapi existants sont à ré-exporter manuellement en `content/actualites/*.md` (front-matter : `titre`, `date`, `chapeau`, `couverture`, `couvertureAlt`, `top` + corps markdown). ## Push sur la forge (labola.o-k-i.net) Voir le mémo `GITEA.md` de l'écosystème OKI. En résumé : ```bash git push origin svelte # branche de travail # après validation, fusionner dans la branche de production ``` ## Vérifications avant mise en ligne (DoD) - `npm run build && npm run check` : 0 erreur, 0 warning. - Aucun domaine tiers dans `build/` (`grep -rE 'cdnjs|jsdelivr|plausible|googleapis|api.gong'`). - `sitemap.xml` et `robots.txt` accessibles ; JSON-LD présents (Rich Results Test). - Lighthouse mobile ≥ 90/95/95/95.