# Dépôt Git et accès SSH OVH (MG-153)

---

## 1. Créer le dépôt GitHub

<https://github.com/new>

| Réglage | Valeur |
|---|---|
| Nom | `gaquere` |
| Visibilité | **Privé** ⚠️ |
| README, .gitignore, licence | ne rien ajouter — le projet en a déjà |

> **Privé impérativement.** Le dépôt ne contient pas de secrets (`.env.local`
> et `.env.prod.local` sont exclus), mais il contient la structure complète du
> site, les gabarits et les textes d'une professionnelle de santé.

### Premier envoi

```bash
cd ~/projets/gaquere
git init
git add .
git status          # vérifier qu'aucun .env.local n'apparaît
git commit -m "Site de Maud Gaquère — version initiale"
git branch -M main
git remote add origin git@github.com:VOTRE-COMPTE/gaquere.git
git push -u origin main
```

### Vérifier ce qui est exclu

```bash
git check-ignore -v .env.local .env.prod.local var/cache vendor node_modules
```

Chaque ligne doit renvoyer une règle de `.gitignore`. Si `.env.local`
n'apparaît pas, **ne pas pousser** : ajouter la règle d'abord.

> Un secret poussé une fois reste dans l'historique, même supprimé ensuite.
> Si cela arrive : changer tous les mots de passe concernés, puis réécrire
> l'historique.

### Faut-il versionner `public/build/` ?

Le serveur mutualisé OVH n'a pas Node : impossible d'y lancer `npm run build`.
Deux options :

1. **Committer `public/build/`** — le déploiement est autonome, au prix de
   diffs illisibles à chaque build
2. **Téléverser après chaque build** — dépôt propre, mais une étape manuelle
   facile à oublier

Pour ce projet, où les assets changent rarement, **l'option 1 est plus sûre** :
un déploiement qui oublie les CSS produit un site sans aucun style.

Si ce choix est retenu, retirer `/public/build` de `.gitignore`.

---

## 2. Clé SSH pour OVH

### Générer la clé

Sur le poste de Maxime :

```bash
ssh-keygen -t ed25519 -C "maxime@salam-gp.com" -f ~/.ssh/id_ed25519_ovh
```

Renseigner une phrase de passe.

> `ed25519` plutôt que RSA : plus court, plus rapide, au moins aussi sûr.

### Déposer la clé sur OVH

```bash
ssh-copy-id -i ~/.ssh/id_ed25519_ovh.pub monlogin@ftp.clusterXXX.hosting.ovh.net
```

Si `ssh-copy-id` n'est pas disponible :

```bash
cat ~/.ssh/id_ed25519_ovh.pub | ssh monlogin@ftp.clusterXXX.hosting.ovh.net \
    'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'
```

### Raccourci de connexion

Dans `~/.ssh/config` :

```
Host gaquere-prod
    HostName ftp.clusterXXX.hosting.ovh.net
    User monlogin
    IdentityFile ~/.ssh/id_ed25519_ovh
    ServerAliveInterval 60
```

Puis simplement :

```bash
ssh gaquere-prod
```

---

## 3. Clé de déploiement GitHub → serveur

Le serveur doit pouvoir faire `git pull`. Il lui faut sa propre clé, **en
lecture seule** : si le serveur est compromis, le dépôt ne doit pas pouvoir
être modifié.

### Sur le serveur OVH

```bash
ssh gaquere-prod
ssh-keygen -t ed25519 -C "deploy-gaquere-ovh" -f ~/.ssh/id_ed25519_deploy -N ""
cat ~/.ssh/id_ed25519_deploy.pub
```

> Pas de phrase de passe ici (`-N ""`) : le déploiement doit être automatisable.
> C'est acceptable parce que la clé est limitée à la lecture d'un seul dépôt.

### Sur GitHub

Dépôt → *Settings* → **Deploy keys** → *Add deploy key*

- Titre : `OVH production`
- Clé : coller le contenu affiché
- **Ne pas** cocher *Allow write access*

### Configurer l'hôte côté serveur

Dans `~/.ssh/config` sur le serveur :

```
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_deploy
    IdentitiesOnly yes
```

Tester :

```bash
ssh -T git@github.com
# attendu : "Hi VOTRE-COMPTE/gaquere! You've successfully authenticated,
#            but GitHub does not provide shell access."
```

---

## 4. Cloner en production

```bash
ssh gaquere-prod
cd ~
git clone git@github.com:VOTRE-COMPTE/gaquere.git
cd gaquere
```

Suivre ensuite `deploy/DEPLOYMENT_GUIDE.md`.

---

## 5. Convention de travail

Projet à un seul développeur : inutile de s'imposer un modèle de branches
élaboré.

```
main          ← ce qui est en production
```

Pour un changement important, une branche courte puis fusion :

```bash
git checkout -b refonte-page-ateliers
# … travail …
git checkout main
git merge refonte-page-ateliers
git push
```

### Messages de commit

En français, à l'impératif, expliquant **pourquoi** :

```
Corrige l'import de TemplatedEmail

Le mauvais namespace faisait planter le formulaire de contact en 500.
```

### Marquer les mises en production

```bash
git tag -a v1.0.0 -m "Mise en ligne initiale"
git push --tags
```

Un tag permet de revenir à une version connue sans chercher dans l'historique.

---

## 6. Accès à conserver

| Accès | Détenteur | Où le stocker |
|---|---|---|
| Compte OVH | **Maud** | son gestionnaire de mots de passe |
| Domaine | **Maud** (propriétaire) | idem |
| GitHub | Maxime | son gestionnaire |
| Clé SSH OVH | Maxime | `~/.ssh/` + sauvegarde |
| Clé de déploiement | serveur | régénérable |
| Doctolib | **Maud** | son gestionnaire |
| Google Business / Search Console | **Maud** | son gestionnaire |
| Back-office du site | **Maud** | son gestionnaire |
| `.env.prod.local` | Maxime | gestionnaire de mots de passe ⚠️ |

> La colonne « détenteur » n'est pas indicative : les accès marqués **Maud**
> doivent être à son nom. Si elle change de prestataire, elle doit pouvoir
> reprendre son site sans dépendre de qui que ce soit.
