# Playbook — Bootstrap d’un projet Docker sur le NUC

Ce document décrit la procédure standard pour **initialiser un nouveau projet Docker** sur l’environnement NUC (`docker-dev`).

Objectifs :

- garantir une structure cohérente entre les projets
- centraliser les volumes persistants
- préparer le projet pour le développement via VSCode Remote / SSH

---

# Architecture standard du NUC

Tous les projets suivent la structure suivante :

```
/srv/
  projects/        # code source des projets
  docker-data/     # volumes persistants Docker
  backups/         # sauvegardes
```

Exemple pour un projet `portfolio` :

```
/srv/projects/portfolio
/srv/docker-data/portfolio/
```

---

# Étape 1 — Cloner le projet

Depuis la VM `docker-dev` :

```
cd /srv/projects
git clone <repo>
cd <repo>
```

Exemple :

```
git clone git@github.com:xxx/portfolio.git
```

---

# Étape 2 — Préparer les volumes persistants

Créer le dossier dédié au projet :

```
mkdir -p /srv/docker-data/<nom-projet>
```

Exemples :

```
/srv/docker-data/portfolio/postgres
/srv/docker-data/portfolio/uploads
```

Principe :

- **aucune donnée persistante ne doit vivre dans le repo Git**
- tous les volumes doivent être externalisés dans `/srv/docker-data`

---

# Étape 3 — Adapter le docker-compose

Les services doivent utiliser les volumes du NUC.

Exemple :

```yaml
services:
  postgres:
    image: postgres:17
    volumes:
      - /srv/docker-data/portfolio/postgres:/var/lib/postgresql/data
```

Bonnes pratiques :

- éviter les volumes anonymes
- préférer les chemins absolus

---

# Étape 4 — Préparer la base de données (si nécessaire)

Si le projet utilise la base partagée :

```
psql -U postgres_su
```

Créer :

```
CREATE USER <user> WITH PASSWORD '<password>';
CREATE DATABASE <db> OWNER <user>;
```

---

# Étape 5 — Initialiser la mémoire projet

Dans le repo :

Depuis la racine du projet :

```
gen-claude
```

Cette commande :

- génère `CLAUDE.md` depuis le template projet
- crée `AGENTS.md -> CLAUDE.md`
- utilise le nom du dossier courant comme nom de projet par défaut

Mode explicite possible :

```
gen-claude <nom_du_projet>
```

Ce fichier servira de **mémoire active du projet**.

---

# Étape 6 — Lancer l’environnement

Depuis le dossier du projet :

```
docker compose up -d
```

Vérifier :

```
docker ps
```

---

# Étape 7 — Vérification

Contrôler :

- que les conteneurs démarrent correctement
- que les volumes sont bien montés
- que la base de données est accessible

Commandes utiles :

```
docker compose logs -f
docker logs <container>
```

---

# Bonnes pratiques

- garder les volumes hors du repo
- documenter la stack dans `CLAUDE.md`
- vérifier les ports exposés

---

# Quand utiliser ce playbook

Ce playbook doit être utilisé lorsque :

- un **nouveau projet Docker** est créé
- un projet est **installé pour la première fois sur le NUC**
- un environnement doit être **reproduit sur une nouvelle machine**

---

# Outils associés

- `scripts/generate_project_claude.sh` — bootstrap de la mémoire projet
