# Simonneau Assistance : installation chez o2switch (lot 1, étape 1 : le socle)

Tout se fait dans cPanel et par FTP, sans SSH. Remplacez `compte` par le nom de votre compte cPanel.

## 1. Une fois pour toutes

1. **Sous-domaine** `depannage.itsimonneau.fr` (Domaines), puis son certificat (Sécurité, Let's Encrypt, « Générer »).
   Son dossier public reste **vide** : l'appli va dans `~/depannage-app`.
2. **Base MySQL** (Bases de données MySQL) : une base `compte_depannage`, un utilisateur `compte_depannage`
   avec un mot de passe long, et **tous les privilèges sur cette seule base**.
3. **Trois dossiers** à la racine du compte, avec le Gestionnaire de fichiers :
   - `depannage-app` : le code (le zip livré, extrait ici) ;
   - `depannage-config` : le fichier `app.env` (copie de `config/app.env.exemple`, complétée), **droits 600** ;
   - `depannage-data`, avec dedans un dossier `logs` : l'appli y range ses archives et ses journaux.
4. **Setup Node.js App**, « Create Application » :
   - Node.js version : **24** ;
   - Application mode : **Production** ;
   - Application root : `depannage-app` ;
   - Application URL : `depannage.itsimonneau.fr` ;
   - Application startup file : `app.js` ;
   - Passenger log file : `/home/compte/depannage-data/logs/passenger.log`.
   Cliquez sur « Create », puis « Run NPM Install », puis « Restart ».
5. **Premier démarrage** : ouvrez https://depannage.itsimonneau.fr. Le premier administrateur (`BOOTSTRAP_ADMIN_EMAIL`)
   reçoit un lien pour choisir son mot de passe ; en recette, ce lien arrive dans la boîte `MAIL_RECETTE_TO`.
   Connectez-vous : le mot de passe, puis le code reçu par e-mail.
   Ce premier compte n'est créé qu'une fois : videz ensuite `BOOTSTRAP_ADMIN_EMAIL` et `BOOTSTRAP_ADMIN_NAME` dans `app.env`.
   Si le lien n'arrive pas, corrigez les réglages `SMTP_…`, « Restart », puis « Mot de passe oublié » avec cette adresse.
6. **Clé des sauvegardes** : Administration, Sauvegardes, « Créer la clé et télécharger la clé privée ».
   Rangez le fichier téléchargé dans le coffre-fort de mots de passe du groupe, puis supprimez-le de Téléchargements.
7. **Codes de secours** : Mon compte, « Générer 10 nouveaux codes », puis imprimez-les.
8. **Tâches cron** (Avancé, Tâches Cron), trois lignes :

   ```
   15 2 * * * /opt/alt/alt-nodejs24/root/usr/bin/node /home/compte/depannage-app/jobs/run.js archive >/dev/null 2>&1
   40 3 * * * /opt/alt/alt-nodejs24/root/usr/bin/node /home/compte/depannage-app/jobs/run.js purge >/dev/null 2>&1
   5 * * * * /opt/alt/alt-nodejs24/root/usr/bin/node /home/compte/depannage-app/jobs/run.js watchdog >/dev/null 2>&1
   ```

   Elles écrivent dans `~/depannage-data/logs/jobs.log`, jamais deux fois à la fois. Une tâche en échec,
   ou aucune archive depuis plus d'un jour, alerte les administrateurs. Si la version de Node.js change,
   changez `alt-nodejs24` dans les trois lignes.
9. **Sécurité du compte** : double authentification sur cPanel, FTPS seulement (l'adresse IP du poste s'autorise
   dans le pare-feu d'o2switch), comptes FTP limités à un dossier.
10. **Recette** : Surveillance, Réglages, « Vérifier l'adresse IP vue par l'appli ». L'adresse affichée doit être
    celle de votre poste ; sinon, prévenez-moi avant d'aller plus loin (les blocages par adresse en dépendent).

## 2. Mettre en ligne une nouvelle version

1. Déposez le zip de la version par FTP ou avec le Gestionnaire de fichiers, puis extrayez-le dans `~/depannage-app`
   avec le Gestionnaire de fichiers (il remplace les fichiers existants).
2. « Run NPM Install », seulement si la version le signale (liste des modules changée).
3. « Restart », puis ouvrez l'appli : elle met sa base à jour (après une archive) et affiche son numéro de version
   en bas de page.

**Retour arrière** : mêmes étapes avec le zip précédent. Si la mise à jour de la base a échoué, restaurez d'abord
l'archive faite juste avant (Sauvegardes).

## 3. Restaurer une archive

1. Téléchargez l'archive voulue (Sauvegardes).
2. Sur un poste qui a Node.js : `node tools/decrypt-archive.js archive.sa cle-privee.pem restaure.sql`.
3. Importez `restaure.sql` dans phpMyAdmin, sur une base vide.

## 4. En cas de problème

- L'appli ne démarre pas : lisez `~/depannage-data/logs/passenger.log` (message « démarrage impossible »).
  En production, elle refuse de démarrer si `APP_URL` n'est pas en `https://` ou si `COOKIE_SECURE` vaut `false`.
- Une tâche échoue : lisez `~/depannage-data/logs/jobs.log`.
- État de l'appli : https://depannage.itsimonneau.fr/api/health répond `{"ok":true,...}`.
- Plus aucun administrateur ne peut se connecter : dans phpMyAdmin, table `sa_people`, corrigez l'adresse `email`
  d'un administrateur vers une boîte qui fonctionne, puis « Mot de passe oublié » avec cette adresse.

## 5. Règles de sécurité à connaître

- **Blocage des comptes** : 2 minutes après 5 mots de passe faux de suite, 10 minutes après 8 (alerte), 30 minutes après 12.
  Les essais envoyés en même temps comptent comme des essais tapés l'un après l'autre.
  Un identifiant qui n'existe pas se bloque de la même façon : la réponse ne dit jamais quels comptes existent.
- **Code des administrateurs** : les codes faux se comptent par compte, toutes connexions confondues, jusqu'au prochain
  code juste. Au 5e, accès bloqué 15 minutes, connexions en cours fermées, alerte critique à tous les administrateurs :
  le mot de passe de ce compte est connu de quelqu'un d'autre, faites-le changer.
- **Blocage volontaire** : quelqu'un qui connaît un identifiant peut le faire bloquer en tapant de faux mots de passe.
  Dans Surveillance, repérez son adresse IP, bloquez-la, puis débloquez le compte.
- **Responsables** : ils gèrent les comptes de leurs entités. Pour une personne qui a aussi un rôle dans une autre
  entité, ils ne changent que ses rôles chez eux : nom, e-mail, activation et liens de mot de passe restent aux
  administrateurs. Un compte désactivé par un administrateur ne se réactive que par un administrateur.
  Quand un responsable crée un compte, change une adresse e-mail, désactive ou réactive un compte, les administrateurs
  sont prévenus ; quand une adresse e-mail change, l'ancienne adresse reçoit un avis.
- **Serveur très sollicité** : au-delà de 20 connexions en attente, l'appli répond « réessayez dans quelques secondes »
  plutôt que de saturer l'hébergement. Les personnes déjà connectées ne sont pas gênées.
- **Mot de passe oublié** : au plus 3 liens par heure et par compte, pour qu'on ne puisse pas inonder une boîte.
