# Connecter votre propre serveur ou VM

> Installez endue Computer sur un serveur ou une VM Linux que vous contrôlez, pour qu'un agent y conserve ses fichiers et y exécute ses programmes plutôt que sur le cloud endue.

Vous pouvez confier à un agent votre propre serveur ou VM Linux comme **endue Computer**. Vous exécutez une seule commande d'installation sur la machine, et dès lors les fichiers et les programmes de l'agent s'y trouvent.

## Quand l'utiliser

Utilisez votre propre serveur quand le travail a besoin de quelque chose que seule cette machine possède : l'accès à votre réseau interne, des outils et des données déjà installés, plus de CPU ou de disque que la configuration par défaut, ou une machine dans la région de votre choix. N'importe quelle machine Linux que vous contrôlez fait l'affaire, comme un VPS chez Vultr, une instance EC2 sur AWS ou un serveur sur site.

Si rien de tout cela ne vous concerne, vous n'avez pas besoin de cette page. Un agent reçoit automatiquement un endue Computer sur le cloud endue la première fois qu'il en a besoin. Voir [Appareils](/fr/docs/build/devices/).

## Ce qu'il vous faut

- Linux sur x86_64 ou aarch64. Le programme est un binaire statique unique, la distribution n'a donc pas d'importance.
- systemd.
- Un accès root via `sudo`.
- Un accès Internet sortant. endue Computer se connecte vers endue par un WebSocket sécurisé : vous n'avez aucun port entrant à ouvrir.

## Installer

<Steps>

1. **Ouvrez Ressources › Appareils** depuis la barre latérale gauche et sélectionnez **Installer sur mon appareil ou serveur** dans le groupe endue Computer.

   Depuis la page d'un agent dans [Agent Builder](/fr/docs/build/agent-builder/), **Ressources › Appareils › Connecter mon serveur** fait la même chose pour cet agent.

2. **Choisissez l'agent** et, si vous le souhaitez, un nom d'appareil pour la liste (par exemple `build-server-01`). Sélectionnez **Créer la commande d'installation**.

   Si l'agent dispose déjà d'un endue Computer sur le cloud endue, on vous demande d'abord s'il faut le supprimer, avec ses fichiers. Si vous annulez, rien ne change. Voir [Remplacer l'endue Computer d'un agent sur le cloud endue](/fr/docs/build/devices/#remplacer-lendue-computer-dun-agent-sur-le-cloud-endue-par-votre-propre-serveur).

3. **Copiez la commande et exécutez-la sur votre serveur.** Elle ressemble à ceci :

   ```sh
   curl -fsSL https://download.endue.ai/computer/install.sh | sudo sh -s -- \
     --endpoint <endpoint> --token <token> --instance <agent-id>
   ```

   La commande contient un jeton de connexion propre à cet agent. Elle ne s'affiche qu'une fois. Si vous fermez la fenêtre avant de la copier, créez une nouvelle commande.

4. **Attendez l'état Connecté.** La boîte de dialogue et la liste des appareils passent à **Connecté** quelques secondes après la fin de la commande.

</Steps>

<Aside type="caution" title="Les commandes s'exécutent sans demander">
  Sur votre serveur, l'agent écrit des fichiers et exécute des programmes sans demander
  d'approbation à chaque fois. Ce qui le limite, c'est ce que vous définissez à l'installation :
  l'utilisateur dédié, la liste des programmes qu'il peut exécuter, l'accès au réseau et le
  profil décrit plus bas. Utilisez un serveur ou une VM dédiés à l'agent, et limitez
  `--allow-exec` à ce dont il a besoin.
</Aside>

## Ce que fait le programme d'installation

1. Il détecte l'architecture, télécharge endue Computer et vérifie sa somme de contrôle SHA-256. Si la somme ne correspond pas, il n'installe rien.
2. Il vérifie quel [profil](#profils) votre noyau prend en charge.
3. Il crée un utilisateur système nommé `endue`, qui ne peut pas ouvrir de session.
4. Il crée, pour l'agent :

   | Chemin | Propriétaire et mode | Contenu |
   | --- | --- | --- |
   | `/etc/endue-computer/<agent-id>.env` | root, `0600` | L'adresse de connexion, le jeton et les paramètres que vous avez choisis |
   | `/var/lib/endue-computer/<agent-id>/workspace` | `endue` | L'[espace de travail](/fr/docs/build/workspace/) de l'agent : le dossier dans lequel il travaille |
   | `/var/lib/endue-computer/<agent-id>/state` | `endue` | Les points de contrôle et les fichiers enregistrés, hors de l'espace de travail |

5. Il active et démarre un service systemd pour l'agent, `endue-computer@<agent-id>`, puis indique si la connexion a réussi.

## Choisir ce que l'agent peut faire

Ajoutez des options à la fin de la commande d'installation :

```sh
curl -fsSL https://download.endue.ai/computer/install.sh | sudo sh -s -- \
  --endpoint <endpoint> --token <token> --instance <agent-id> \
  --allow-exec git,python3 --no-network
```

| Option | Valeur par défaut | Effet |
| --- | --- | --- |
| `--allow-exec <list>` | `git,node,npm,npx,python3,pip3,curl` | Les programmes que l'agent peut exécuter, séparés par des virgules, sans chemin. `--allow-exec ""` désactive entièrement l'exécution de programmes. |
| `--no-network` | Réseau autorisé | Les programmes que l'agent exécute ne peuvent pas utiliser le réseau. |
| `--no-delete` | Suppression autorisée | L'agent ne peut pas supprimer de fichiers dans son espace de travail. Des outils comme git et npm suppriment des fichiers de verrouillage et des fichiers temporaires : avec le profil `sandboxed`, ils échouent donc. |
| `--profile auto\|sandboxed\|managed` | `auto` | Le [profil](#profils) à utiliser. |

Un programme de la liste qui n'est pas installé sur le serveur est signalé lors de l'installation. Si l'agent tente de l'exécuter, il obtient « non installé ».

Autoriser un programme ne limite pas ce que fait ce programme. Autoriser `node` ou `python3` permet à l'agent d'exécuter n'importe quel code que ceux-ci peuvent exécuter, dans les limites du profil.

## Profils

| Profil | Prérequis | Ce que les programmes exécutés par l'agent ne peuvent pas faire |
| --- | --- | --- |
| `sandboxed` | Linux 6.12 ou ultérieur (Landlock ABI 6) | Lire ou écrire des fichiers en dehors du dossier de l'espace de travail. Toutes les restrictions de `managed` s'appliquent aussi. |
| `managed` | Tout autre noyau, comme Ubuntu 22.04 (5.15) ou le noyau GA d'Ubuntu 24.04 (6.8) | Devenir root ou obtenir des privilèges. systemd masque `/home`, `/root` et les dossiers des autres agents, et met le reste du système en lecture seule. Il n'y a pas de bac à sable au niveau du système de fichiers : les programmes peuvent lire tout fichier lisible par l'utilisateur `endue`. |

`auto` choisit `sandboxed` si le noyau le prend en charge, et se rabat sur `managed` en le signalant. Si vous demandez `sandboxed` sur un noyau qui ne le prend pas en charge, le programme d'installation s'arrête sans rien installer. N'utilisez `managed` que sur un serveur ou une VM dédiés à l'agent.

## Ajouter un autre agent sur le même serveur

Un même serveur peut servir plusieurs agents. Dans **Ressources › Appareils**, ouvrez le menu de la ligne du serveur, sélectionnez **Ajouter un agent**, choisissez l'agent, puis exécutez la nouvelle commande sur le même serveur.

Chaque agent dispose de son propre service, de son propre fichier de configuration et de ses propres dossiers. Le programme et l'utilisateur `endue` sont partagés. Avec le profil `managed`, c'est systemd qui empêche chaque agent d'accéder aux dossiers des autres.

## Démarrage, arrêt et journaux

Remplacez `<agent-id>` par la valeur qui suit `--instance` dans votre commande.

```sh
sudo systemctl status endue-computer@<agent-id>    # vérifier qu'il tourne
sudo systemctl start endue-computer@<agent-id>     # le démarrer
sudo systemctl stop endue-computer@<agent-id>      # l'arrêter
sudo journalctl -u endue-computer@<agent-id> -f    # suivre le journal
```

Tant que le service est arrêté, l'appareil affiche **Éteint** et l'agent vous demande de le démarrer. endue ne crée pas d'endue Computer dans le cloud pour le remplacer.

## Réinstaller

Réexécuter une commande d'installation avec le même `--instance` remplace les paramètres, jeton compris, et redémarre le service.

Vous ne pouvez pas créer de nouvelle commande tant que le serveur de l'agent est connecté. Arrêtez d'abord le service sur le serveur, puis recréez la commande.

## Désinstaller

```sh
curl -fsSL https://download.endue.ai/computer/install.sh | sudo sh -s -- \
  --uninstall --instance <agent-id>
```

Cette commande arrête et désactive le service de l'agent, et supprime son fichier de configuration. Les dossiers de l'espace de travail et d'état sont conservés, sauf si vous ajoutez `--purge`. Sans `--instance`, tous les agents du serveur sont retirés. Quand il ne reste plus aucun agent, le programme et la définition du service sont également supprimés.

Désinstaller sur le serveur ne retire pas l'appareil d'endue, et le retirer dans endue ne le désinstalle pas du serveur. Faites les deux : ici, puis **Retirer** sur l'agent dans le menu de la ligne de l'appareil. Voir [Retirer un appareil](/fr/docs/build/devices/#retirer-un-appareil).

## Limites

- Linux uniquement, sur x86_64 ou aarch64. Les versions macOS et Windows ne sont pas encore disponibles.
- Un endue Computer par agent. Un agent installé sur votre serveur ne peut pas en avoir un autre sur le cloud endue, et un agent déjà installé sur un autre serveur doit d'abord y être retiré.
- endue ne peut démarrer ni votre serveur ni le service. Si l'un des deux est arrêté, l'agent travaille sans lui.
- L'agent ne peut utiliser les outils du serveur que lorsque le service est connecté. Les programmes qu'il a lancés en arrière-plan s'arrêtent quand le service s'arrête.
- Sans systemd, par exemple dans certains conteneurs, ajoutez `--no-systemd`. Le programme d'installation met les fichiers en place et affiche la commande pour démarrer endue Computer vous-même. Les protections systemd décrites plus haut ne s'appliquent alors pas.
- Si le service ne démarre pas et renvoie `status=226/NAMESPACE`, la machine ne peut pas créer d'espaces de noms de montage, ce qui arrive dans certains conteneurs LXC et OpenVZ. Utilisez une VM complète, ou `--no-systemd`.

## Voir aussi

<CardGrid>
  <LinkCard
    title="Appareils"
    href="/fr/docs/build/devices/"
    description="Tous les produits d'appareils, les appareils utilisateur et d'agent, et comment en retirer un."
  />
  <LinkCard
    title="Espace de travail"
    href="/fr/docs/build/workspace/"
    description="Le dossier dans lequel travaille l'agent, et comment en consulter le contenu."
  />
  <LinkCard
    title="Sécurité et autorisations"
    href="/fr/docs/account/security/"
    description="Ce qu'un agent peut atteindre, et ce qu'il ne peut pas atteindre."
  />
</CardGrid>
