Premiers pas

Configurer un serveur GPU

Déployez le cradle-server headless sur une VM Linux GPU, bootstrap-le et connectez un client Cradle.

Pour tout ce qui dépasse un seul ordinateur portable, vous exécutez Cradle Server — le daemon cradle-server headless. Il contient les données, les connecteurs et l'inférence, tandis que des clients légers (l'application de bureau ou le CLI cradle) le pilotent via une API HTTP authentifiée. Ce guide l'installe sur une VM Linux GPU.

Prérequis

  • Linux x86_64 (les builds sont linux-x64).
  • Node 22 et pnpm (corepack enable, ou npm install -g pnpm@9).
  • Accès root pour l'installateur et le bootstrap.
  • Pour l'inférence GPU : pilotes NVIDIA + CUDA toolkit. Le CPU-only fonctionne sans dépendance supplémentaire.

Installer depuis S3 (flux curl)

Le bundle serveur/CLI est publié dans le même bucket de téléchargements que l'application de bureau, sous le préfixe cradle-cli. L'installateur en une ligne gère le reste :

curl -fsSL \
  https://download.opencradle.ai/cradle-cli/latest/cradle-cli-install.sh \
  | sudo sh

Remplacez les valeurs par défaut avec des variables d'environnement :

curl -fsSL -o cradle-cli-install.sh \
  https://download.opencradle.ai/cradle-cli/latest/cradle-cli-install.sh

sudo CRADLE_PORT=31416 CRADLE_DATA_DIR=/var/lib/cradle \
  sh cradle-cli-install.sh

L'installateur vérifie Node 22 + pnpm, télécharge le zip, extrait dans /opt/cradle, installe les dépendances de production, reconstruit les modules natifs pour la plateforme cible, et bootstrap le serveur.

Installation sans root

Si vous n'avez pas les droits root (VM sur un hébergement tiers, compte partagé), lancez le même installateur sans sudo. Il détecte l'absence de privilèges et bascule en mode rootless : tout va sous ~/.local/share/cradle, aucune unité systemd n'est installée, et le CLI est lié dans ~/.local/bin.

curl -fsSL \
  https://download.opencradle.ai/cradle-cli/latest/cradle-cli-install.sh \
  | sh

Démarrez le serveur vous-même :

~/.local/share/cradle/dist/server/index.js \
  --data-dir ~/.local/share/cradle/data --port 31416 --bind 0.0.0.0

Pour survivre à la déconnexion, ajoutez une unité utilisateur dans ~/.config/systemd/user/cradle-server.service et activez le lingering :

systemctl --user enable --now cradle-server
loginctl enable-linger $USER   # si la politique de l'hôte l'autorise

Limites du mode rootless : le port doit être supérieur à 1024 (31416 convient), le démarrage automatique au boot ne fonctionne qu'avec le lingering, et --user cradle ne s'applique pas — le service tourne sous votre compte.

Installation manuelle (depuis le zip)

Si vous préférez voir chaque étape, ou si vous êtes sur un hôte verrouillé, faites-le à la main :

# 1. Résolvez la version courante et téléchargez le bundle
VERSION=$(curl -fsSL https://download.opencradle.ai/cradle-cli/latest/manifest.json \
  | grep -o '"version": *"[^"]*"' | cut -d'"' -f4)

curl -fsSL -o cradle-cli-${VERSION}-linux-x64.zip \
  https://download.opencradle.ai/cradle-cli/${VERSION}/cradle-cli-${VERSION}-linux-x64.zip

# 2. Extrayez dans /opt/cradle
sudo mkdir -p /opt/cradle
sudo unzip -o cradle-cli-${VERSION}-linux-x64.zip -d /opt/cradle

# 3. Exécutez install.sh (crée l'utilisateur `cradle`, installe les deps prod,
#    reconstruit les modules natifs, installe l'unité systemd)
cd /opt/cradle
sudo ./install.sh

Bootstrap du serveur

Le bootstrap crée le répertoire de données, initialise la base SQLite, et génère la première clé API admin. C'est piloté par l'opérateur — vous l'exécutez sur l'hôte cible ; rien n'est poussé par SSH depuis un client.

sudo /opt/cradle/dist/cli/index.js server init \
  --data-dir /var/lib/cradle \
  --port 31416 \
  --bind 0.0.0.0 \
  --install-systemd

Ce que cela fait :

  1. Crée --data-dir et corrige les permissions.
  2. Lance le serveur en mode bootstrap pour initialiser la DB et générer une clé admin:*.
  3. Écrit une unité systemd et exécute systemctl enable --now.
  4. Attend /admin/health, puis émet une clé client scopée.
  5. Écrit client-credentials.json (mode 0600) dans le répertoire de données.

Relancer server init sur le même répertoire de données est idempotent : il détecte la DB initialisée et sort au lieu de créer une nouvelle clé admin.

Où se trouve quoi

Tous les chemins ci-dessous dépendent du mode d'installation :

installation rootinstallation rootless
Répertoire d'installation/opt/cradle~/.local/share/cradle
Données et clés/var/lib/cradle~/.local/share/cradle/data
Servicesystemd systèmesystemctl --user
sudorequisjamais nécessaire

Gérer le service

Installation root — systemd système :

sudo systemctl start cradle-server
sudo systemctl enable cradle-server
sudo systemctl status cradle-server
sudo journalctl -u cradle-server -f

Installation rootless — service utilisateur. Le drapeau --user est obligatoire dans chaque commande, et sudo ne sert jamais :

systemctl --user start cradle-server
systemctl --user enable cradle-server
systemctl --user status cradle-server
journalctl --user -u cradle-server -f

Connecter un client

Récupérez les credentials dans client-credentials.json du répertoire de données — sudo cat /var/lib/cradle/client-credentials.json après une installation root, simplement cat ~/.local/share/cradle/data/client-credentials.json en rootless. Transférez-les vers le client Cradle via votre canal sécurisé, puis connectez-vous :

cradle login --url http://SERVEUR:31416 --key ck_live_...

Le CLI sonde /admin/health pour vérifier la connexion et stocke le profil dans ~/.cradle/cli-config.json.

Exécuter le daemon directement

En dehors de systemd, vous pouvez lancer le serveur vous-même :

cradle-server --port 31416 --data-dir ~/.cradle
cradle-server --bind 0.0.0.0            # écoute sur toutes les interfaces
cradle-server --no-api-autostart        # désactive le démarrage auto du canal API

L'arrêt gracieux sur SIGINT/SIGTERM arrête les canaux, libère les runners de modèles, et ferme la base de données.

Nœuds GPU distants

Pour décharger l'inférence lourde vers une machine GPU séparée, configurez un nœud distant. Le CLI stocke uniquement la configuration — il ne pousse jamais de commandes SSH ; l'opérateur les exécute sur la jump host de l'organisation :

cradle remote set \
  --host gpu-1.local --user cradle \
  --ssh-key-path /root/.ssh/gpu-1 \
  --remote-port 8080 --model-path /models/qwen3-8b.gguf

cradle remote show

Le nœud est ensuite utilisé en créant un modèle avec provider=remote-gpu. Pour plusieurs nœuds, cradle remote pool probe vérifie leur santé et cradle remote pool plan affiche un plan d'autoscaling — il n'exécute jamais lui-même de SSH ou d'appels cloud.

Voir la référence CLI pour le catalogue complet de commandes et le déploiement serveur distant pour le flux réseau fermé.