Files
site-nowyousea/DEPLOY.md

140 lines
4.1 KiB
Markdown

# 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 : <https://laboratoire.freeboxos.fr/nowyousea/>
## 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*