---
tags: [Infra]
description: "Guide pour GRK : architecture du site Astro et procédure de mise à jour du contenu via Git."
nature: documentation
projects:
  - [[03_PROJETS/VPS-IA]]
type: note
---
# Site Shizen — Architecture et mise à jour du contenu

#site #astro #aide #guide

**Pour Guillaume** : comment fonctionne le site et comment le modifier.

## Le principe en une phrase

Le site est un **dossier de fichiers statiques** (HTML) publié sur `/var/www/my_webapp/www`.
Tu modifies du **source** (Astro) → il est **construit** en HTML → il est **copié** automatiquement
sur le serveur dès que tu **pousse** sur le dépôt.

## Architecture

```
[ton ordinateur / cet agent]
        │ édite les fichiers
        ▼
/var/lib/opencode/projects/site-shizendo     ← SOURCE (projet Astro, git)
        │ git push  (branche main)
        ▼
Forgejo  shizendo/shizendo-site              ← Dépôt de référence
        │ webhook (POST 127.0.0.1:8787)
        ▼
webhook-listener.mjs → deploy-site.sh        ← Construction (npm run build)
        │                                      → dist/ (HTML)
        ▼
sftp-mirror.sh  ───────────────────────────►  /var/www/my_webapp/www/   ← SITE EN LIGNE
        (copie via SFTP, pas de rsync)
```

| Élément | Endroit | Rôle |
|---|---|---|
| Source du site | `/var/lib/opencode/projects/site-shizendo` | les fichiers que tu édites |
| Dossier `src/pages/` | idem | **une page = un fichier** `.astro` |
| `src/layouts/Layout.astro` | idem | en-tête, menu, pied de page, style commun |
| `public/` | idem | fichiers copiés tels quels (favicon, `error/`, `robots.txt`) |
| Construction | `npm run build` | génère `dist/` (HTML final) |
| Publication | `~/.opencode/bin/sftp-mirror.sh` | copie `dist/` → `/www` |
| Journal | `~/.local/state/site-deploy/` | `deploy.log` et `webhook.log` |

## Mettre à jour une page — 3 méthodes

### Méthode 1 — me le demander (la plus simple)

Dis-moi simplement : *« change la page contact, ajoute mon e-mail… »*. Je modifie le fichier,
je commit, je push — le site se met à jour tout seul en ~30 secondes.

### Méthode 2 — éditeur de code (VS Code / code-server)

1. Ouvre le dossier `/var/lib/opencode/projects/site-shizendo`.
2. Modifie le fichier dans `src/pages/` (ou `public/` pour une image).
3. Prévisualise : `npm run dev` puis ouvre `http://localhost:4321`.
4. Quand c'est bon :
   ```bash
   cd /var/lib/opencode/projects/site-shizendo
   git add -A
   git commit -m "message"
   git push
   ```
5. Le déploiement part tout seul (≤ 60 s pour que le build finisse).

### Méthode 3 — à la main, en terminal

Identique à la méthode 2, depuis un terminal à la racine du projet.

## Où sont les pages

| Page | Fichier source | URL publiée |
|---|---|---|
| Accueil | `src/pages/index.astro` | `/` |
| À propos | `src/pages/a-propos.astro` | `/a-propos/` |
| Contact | `src/pages/contact.astro` | `/contact/` |
| Erreur 404 (site) | `src/pages/404.astro` | page perdue affichée par Astro |
| Erreurs 403/404 (YunoHost) | `public/error/{403,404}.html` | servies par nginx |

**Pour créer une page** : copie un fichier existant dans `src/pages/` (ex. `blog/mon-article.astro`),
adapte le contenu, push. L'URL sera automatiquement `/blog/mon-article/`.

## Ce qu'il ne faut pas faire

- **Ne pas éditer `/var/www/my_webapp/www/`** : c'est la sortie, la prochaine publication
  l'écrasera. Édite toujours dans `projects/site-shizendo`.
- **Ne pas `git push --force`** sans m'en parler (le déploiement fait un fast-forward strict).
- **Ne pas supprimer `dist/` ou `node_modules/`** de la racine : `npm run build` les régénère.
- **Ne pas toucher à** `~/.opencode/bin/{deploy-site,sftp-mirror,webhook-listener}.*`
  sans m'en parler : ce sont les scripts de publication.

## Vérifier que c'est en ligne

```bash
curl -I https://site.shizendo.ovh/                  # 200 = OK
tail -20 ~/.local/state/site-deploy/deploy.log      # dernière publication
curl -s http://127.0.0.1:8787/health                # listener: ok ou busy
```

## En cas de pépin

| Symptôme | Cause probable | Action |
|---|---|---|
| Push effectué, site pas à jour | Listener arrêté | `crontab -l | grep listener` (relance < 60 s) |
| `deploy.log` : « branche divergée » | Commits locaux non poussés | `git status` puis `git push` (ne pas forcer) |
| `Permission denied` sur SFTP | Docroot pas owned `my_webapp` | cf. note d'intervention |
| Rien dans `webhook.log` | Mauvais dépôt / webhook | vérifier le webhook Forgejo sur `shizendo-site` |

Détails techniques complets : [[04_NOTES/VPS-IA_Site-Astro-Deploiement-Auto-2026-11-07]]
