# Déploiement — Site vitrine NowYouSea Ce document décrit comment publier le site vitrine NowYouSea sur la VM `192.168.0.82`, exposé via Caddy à l'URL **https://laboratoire.freeboxos.fr/nowyousea/**. ## 1. Prérequis - `node` ≥ 20 et `npm` installés en local - Accès SSH à `floppyrj45@192.168.0.82` - Le dossier **`/docker/caddy/www/nowyousea/`** existe sur la VM cible et appartient à `floppyrj45`. **⚠ Piège :** le container caddy bind-mount le chemin host `/docker/caddy/www` sur `/srv/www` (chemin interne). La config Caddy dit donc `root * /srv/www/nowyousea` (chemin container) mais le rsync réel se fait vers `/docker/caddy/www/nowyousea/` sur l'hôte. Ne pas confondre avec `/srv/www/` directement (existe sur l'hôte mais n'est PAS servi par Caddy). ```bash ssh floppyrj45@192.168.0.82 'sudo mkdir -p /docker/caddy/www/nowyousea && sudo chown -R floppyrj45:floppyrj45 /docker/caddy/www/nowyousea' ``` - Caddy tourne sur la VM `.82` et expose déjà le domaine `laboratoire.freeboxos.fr`. ## 2. Build local Depuis la racine du projet : ```bash npm install # à ne faire qu'une fois npm run build # génère dist/ ``` Le build est statique : toute la sortie tient dans `dist/`. La configuration `base: '/nowyousea/'` est appliquée dans `astro.config.mjs`, donc tous les liens internes et assets sont préfixés automatiquement. Vérification rapide en local : ```bash npm run preview # Ouvre http://localhost:4321/nowyousea/ ``` ## 3. Déploiement via rsync Commande à copier-coller (dry-run d'abord, puis réel) : ```bash # Dry-run — affiche ce qui serait copié, ne touche à rien rsync -avz --delete --dry-run \ ./dist/ \ floppyrj45@192.168.0.82:/docker/caddy/www/nowyousea/ # Réel rsync -avz --delete \ ./dist/ \ floppyrj45@192.168.0.82:/docker/caddy/www/nowyousea/ ``` Notes : - Le **slash final** sur `./dist/` est essentiel : il indique à rsync de copier *le contenu* de `dist/`, pas le dossier `dist/` lui-même. - `--delete` supprime sur la cible les fichiers qui n'existent plus dans le build (assets hashés obsolètes). C'est voulu. - Ajouter `-n` ou `--dry-run` avant tout déploiement douteux. Script one-liner pratique (build + push) : ```bash npm run build && \ rsync -avz --delete ./dist/ floppyrj45@192.168.0.82:/docker/caddy/www/nowyousea/ ``` ## 4. Configuration Caddy Snippet à ajouter au `Caddyfile` de la VM `.82`, sous le bloc du site `laboratoire.freeboxos.fr` : ```caddyfile # NowYouSea — Site vitrine handle /nowyousea { redir /nowyousea/ 307 } handle_path /nowyousea/* { root * /docker/caddy/www/nowyousea file_server { index index.html } } ``` Explications : - `handle /nowyousea` : si un visiteur arrive sans slash final, il est redirigé vers `/nowyousea/` pour que les liens relatifs fonctionnent. - `handle_path /nowyousea/*` : retire le préfixe `/nowyousea/` avant de servir les fichiers depuis `/docker/caddy/www/nowyousea/`. Cela s'aligne exactement avec le `base: '/nowyousea/'` de la config Astro : les assets sont produits avec `href="/nowyousea/_astro/..."` et servis depuis `/docker/caddy/www/nowyousea/_astro/`. - `file_server { index index.html }` : sert `index.html` par défaut à la racine. Après modification du Caddyfile : ```bash ssh floppyrj45@192.168.0.82 'sudo caddy validate --config /etc/caddy/Caddyfile && sudo systemctl reload caddy' ``` ## 5. Vérifications post-déploiement ```bash # Réponse HTTP attendue : 200 OK curl -sIL https://laboratoire.freeboxos.fr/nowyousea/ | head -n 10 # Vérifier que les assets CSS/JS sont servis (pas de 404) curl -sI https://laboratoire.freeboxos.fr/nowyousea/_astro/ 2>&1 | head -n 2 ``` Puis dans un navigateur : ## 6. Rollback rapide Avant un déploiement risqué, faire un snapshot : ```bash ssh floppyrj45@192.168.0.82 \ 'cp -a /docker/caddy/www/nowyousea /docker/caddy/www/nowyousea.bak.$(date +%Y%m%d-%H%M%S)' ``` Pour restaurer : ```bash ssh floppyrj45@192.168.0.82 \ 'rsync -a --delete /docker/caddy/www/nowyousea.bak.YYYYMMDD-HHMMSS/ /docker/caddy/www/nowyousea/' ``` --- *Documentation de déploiement — Site vitrine NowYouSea*