> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.hodi.host/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Comment déployer depuis mon terminal avec le CLI Hodifly ?

La ligne de commande Hodifly déploie vos sites depuis votre propre terminal, depuis un script ou depuis votre CI. Elle fait tout ce que fait la page Hodifly dans cPanel : créer un projet, déployer, revenir en arrière, lire les journaux de compilation.

C'est un fichier unique, sans dépendances. Il vous faut Node 18 ou plus récent ; cela fonctionne sur macOS, Linux et Windows.

## Installation

Avec le gestionnaire de paquets que vous utilisez déjà :

- `pnpm add -g hodifly`
- `npm i -g hodifly`
- `yarn global add hodifly`

## Connexion

Dans cPanel, ouvrez **Hodifly** puis cliquez sur **API**. Cliquez sur **Créer un jeton d'API** : une commande complète vous est proposée, à coller telle quelle :

```
hodifly login --host serveur.example.com --user moncompte --token ...
```

Vos identifiants sont enregistrés dans `~/.hodifly/config.json`, lisible par vous seul. Cette étape n'est à faire qu'une fois par compte d'hébergement.

Le jeton est un jeton d'API cPanel ordinaire. cPanel ne délivre que des jetons à accès complet : il donne donc accès à tout ce que vous pouvez faire dans cPanel. Gardez-le pour vous et supprimez-le dans **Gérer les jetons d'API** quand il n'est plus utile.

Si vous préférez ne pas coller un jeton dans la ligne de commande, lancez `hodifly login` sans options : les trois valeurs vous seront demandées, sans que le jeton s'affiche à la saisie.

## Les commandes du quotidien

| Commande | Rôle |
| ---- |
| `hodifly projects` | Vos projets, et le résultat de la dernière compilation |
| `hodifly deploy mon-site` | Compiler et publier la tête de la branche |
| `hodifly ls mon-site --prod` | Les déploiements vers lesquels revenir |
| `hodifly rollback mon-site <déploiement>` | Repointer le site sur une compilation antérieure |
| `hodifly logs mon-site` | Sortie de compilation, dernier déploiement par défaut |
| `hodifly remove mon-site` | Supprimer le projet (les fichiers sur le disque sont conservés) |

Un déploiement correspond à une compilation. `hodifly ls` en donne les identifiants, et un retour arrière en prend un :

```
hodifly ls mon-site --prod
hodifly rollback mon-site 812308420affa006
```

Le retour arrière est immédiat : la version est déjà sur le serveur, rien n'est recompilé.

## Créer un projet

```
hodifly projects add \
  --repo mon-orga/mon-site \
  --domain example.com \
  --build-command "npm run build" \
  --output-directory dist
```

Le dépôt doit être un dépôt que vous avez déjà connecté via **Gérer GitHub** dans la page Hodifly. Lancez `hodifly --help` pour voir toutes les options.

Si `--domain` désigne un sous-domaine de votre domaine principal qui n'existe pas encore, il est créé pour vous avant la première compilation : inutile de l'ajouter d'abord dans cPanel.

```
hodifly projects add --repo mon-orga/blog --domain blog.example.com
```

Cela ne vaut que pour les sous-domaines de votre domaine principal. Tout autre domaine doit être enregistré et pointé vers le serveur : ajoutez-le d'abord dans cPanel > Domaines, puis lancez la commande.

## Modifier un réglage d'un projet

`projects set` modifie un projet existant, sans passer par cPanel :

```
hodifly projects set mon-api --startup dist/main.js
hodifly projects set mon-site --build-command "npm run build"
hodifly projects set mon-site --branch production
```

C'est un correctif ciblé : seul ce que vous nommez change, le reste reste tel quel. Donnez une valeur à un interrupteur pour l'éteindre (`--previews 0`), et une valeur vide pour vider un champ (`--build-command ""`). Rien n'est recompilé : enchaînez avec `hodifly deploy mon-site` si le changement doit s'appliquer tout de suite.

La commande accepte les mêmes options que `projects add`, plus `--autodeploy`, `--notify-success`, `--notify-failed`, `--notify-email` et `--persist`. Ce qu'elle ne change pas, c'est ce qui appartient au compte d'hébergement plutôt qu'au projet : le domaine, le dossier sur le compte et le dépôt lui-même. Pour publier sur un autre domaine, créez un second projet.

Nécessite la version 1.1 ou plus récente : `npm i -g hodifly` pour mettre à jour, `hodifly --version` pour vérifier.

## Si vous avez des sites sur plusieurs serveurs

Chaque compte d'hébergement vit sur son propre serveur : connectez-vous donc à chacun. Hodifly retient quels projets et quels domaines appartiennent à quel compte, et déduit le reste du nom que vous saisissez :

```
hodifly deploy blog.example.com
```

Cela retrouve le compte, le serveur et le projet publié sur ce domaine. Si un nom existe sur deux de vos comptes, Hodifly vous le dit au lieu de deviner, et vous ajoutez `--profile` :

```
hodifly deploy mon-site --profile travail
```

| Commande | Rôle |
| ---- |
| `hodifly profiles` | Les comptes auxquels vous êtes connecté |
| `hodifly use travail` | Choisir le compte par défaut |
| `hodifly refresh` | Relire ce que contient chaque compte |
| `hodifly logout travail` | Oublier un compte sur cette machine |

## Dans un script ou en CI

Ajoutez `--json` à n'importe quelle commande pour obtenir la réponse brute au lieu d'un tableau. Les identifiants peuvent venir de l'environnement plutôt que du fichier enregistré, ce qui est le bon choix sur un serveur de compilation :

```
export HODIFLY_HOST=serveur.example.com
export HODIFLY_USER=moncompte
export HODIFLY_TOKEN=...
hodifly deploy mon-site --json
```

Conservez le jeton dans le coffre à secrets de votre CI, jamais dans le dépôt.

## En cas de problème

| Message | Que faire |
| ---- |
| `could not reach ...` | L'API écoute sur le port 2083. Certains réseaux d'entreprise ou d'aéroport le bloquent. |
| `the server rejected your credentials` | Le jeton a été supprimé, ou le nom d'utilisateur est incorrect. Créez-en un nouveau depuis la page API et relancez `hodifly login`. |
| `exists on more than one of your accounts` | Ajoutez `--profile` suivi du nom du compte, comme ci-dessus. |
