• VPS : Hostinger Ubuntu 24.04, 4 vCPU, 16 Go RAM, 193 Go disque
  • Docker : 29.3.0 · Node : v22.22.1
  • GPU : aucun, inférence cloud NVIDIA (Nemotron 3 Super 120B)
  • Durée totale : ~4 heures, 10 problèmes résolus

1. Vérifier les prérequis

Avant de commencer, s'assurer que le VPS dispose de tout le nécessaire. NemoClaw requiert Docker, Node.js et suffisamment de RAM (8 Go minimum, 16 Go recommandés).

uname -a
# Linux vps 6.8.0-xx-generic ... Ubuntu 24.04 x86_64

docker --version
# Docker version 29.3.0, build ...

node --version
# v22.22.1

free -h
# total: 16Gi  available: 13Gi

df -h /
# Size: 193G  Used: 21G  Available: 172G

Tout est bon. 16 Go de RAM, 172 Go de disque libre, Docker et Node en versions récentes.

2. Installer OpenShell (runtime de sécurité)

OpenShell est le runtime sandbox de NVIDIA. Il isole l'exécution d'OpenClaw dans un conteneur sécurisé. Sans lui, NemoClaw refuse de démarrer.

ARCH=$(uname -m)
curl -sL -o /tmp/openshell.tar.gz \
  "https://github.com/NVIDIA/OpenShell/releases/latest/download/openshell-${ARCH}-unknown-linux-musl.tar.gz"

cd /tmp && tar xzf openshell.tar.gz

file openshell
# ELF 64-bit LSB pie executable, x86-64, static-pie linked

install -m 755 openshell /usr/local/bin/openshell

openshell --version
# openshell 0.0.10

rm /tmp/openshell /tmp/openshell.tar.gz

Le binaire est statiquement lié, aucune dépendance système. Un simple install dans /usr/local/bin suffit.

3. Installer NemoClaw : piège npm

Attention : Faux paquet npm

npm install -g nemoclaw installe un faux paquet squatté : vide, version 0.1.0, aucun auteur, aucun binaire. Quelqu'un a réservé le nom avant la GTC.

Si ce paquet avait contenu du code malveillant, vos clés API auraient été volées. Ne faites jamais confiance à un npm install -g pour un projet aussi récent sans vérifier le contenu.

La bonne méthode : cloner depuis le dépôt officiel NVIDIA et installer localement.

cd /opt
git clone https://github.com/NVIDIA/NemoClaw.git
cd NemoClaw
npm install -g .
nemoclaw --help
# Usage: nemoclaw [options] [command]
# ...
# Commands:
#   onboard     Set up NemoClaw sandbox
#   status      Show status
#   connect     Connect to sandbox
#   destroy     Remove sandbox

Vérifier le package.json : description « NemoClaw — run OpenClaw inside OpenShell with NVIDIA inference », licence Apache-2.0, entrée bin présente. Si un de ces champs manque, ce n'est pas le bon paquet.

4. Clé API NVIDIA

NemoClaw utilise l'inférence cloud NVIDIA pour les VPS sans GPU. Il faut créer un compte sur build.nvidia.com (gratuit, sans carte bancaire) et générer une clé API au format nvapi-....

mkdir -p ~/.nemoclaw && chmod 700 ~/.nemoclaw

echo '{"nvidia_api_key":"nvapi-VOTRE_CLE"}' > ~/.nemoclaw/credentials.json

chmod 600 ~/.nemoclaw/credentials.json

Permissions 600 obligatoires. NemoClaw vérifie et refuse de démarrer si le fichier est lisible par d'autres utilisateurs.

5. Patcher le port 8080 avant le onboard

Erreur rencontrée

failed to bind host port 0.0.0.0:8080/tcp: address already in use

Le port 8080 est utilisé par un autre service (proxy, panel d'administration, etc.). NemoClaw ne propose pas d'option CLI pour changer le port, il faut patcher le code source.

# Vérifier ce qui utilise le port 8080
lsof -i :8080

# Patcher onboard.js pour utiliser le port 8180
sed -i 's/const gwArgs = \["--name", "nemoclaw"\];/const gwArgs = ["--name", "nemoclaw", "--port", "8180"];/' \
  /opt/NemoClaw/bin/lib/onboard.js

# Vérifier le patch
grep 'gwArgs' /opt/NemoClaw/bin/lib/onboard.js
# const gwArgs = ["--name", "nemoclaw", "--port", "8180"];

Bonus sécurité : un port non standard (8180 au lieu de 8080) est moins ciblé par les scanners automatiques.

6. Libérer le port 18789

Erreur rencontrée

Port 18789 is already in use

Si une instance OpenClaw existante tourne déjà (par exemple via Docker Compose), elle occupe le port 18789. Il faut l'arrêter temporairement.

# Identifier le processus
lsof -i :18789

# Arrêter les conteneurs OpenClaw existants
docker stop openclaw-openclaw-gateway-1 openclaw-searxng-1

# Pour restaurer plus tard :
# docker start openclaw-openclaw-gateway-1 openclaw-searxng-1

7. Lancer le wizard onboard

Le onboard est un assistant interactif qui configure tout : gateway, sandbox, inférence, politiques de sécurité.

export NVIDIA_API_KEY='nvapi-VOTRE_CLE'
nemoclaw onboard

Le wizard exécute 7 étapes automatiquement :

  • Étape 1. Preflight : Docker OK, OpenShell OK, No GPU → cloud inference
  • Étape 2. Gateway : démarre sur le port 8180 (patché)
  • Étape 3. Sandbox : nom « nemoclaw-test », télécharge ~2 Go d'image Docker
  • Étape 4. Inference : NVIDIA Cloud API, Nemotron 3 Super 120B
  • Étape 5. Provider : nvidia-nim créé
  • Étape 6. OpenClaw : lancé à l'intérieur du sandbox
  • Étape 7. Policies : pypi, npm appliquées
Note

L'option --from openclaw résout vers un Dockerfile local et échoue. Ne pas l'utiliser, laisser le wizard télécharger l'image officielle.

8. Vérifier l'installation

nemoclaw status
# Gateway: running on :8180
# Sandboxes: 1

nemoclaw nemoclaw-test status
# Phase: Ready

openshell status
# Status: Connected

openshell sandbox list
# NAME            PHASE    AGE
# nemoclaw-test   Ready    2m

Test de connexion au sandbox :

printf 'whoami && openclaw --version\nexit\n' | \
  timeout 15 openshell sandbox connect nemoclaw-test

# sandbox
# OpenClaw 2026.3.11

Deux choses à noter : l'utilisateur est sandbox (pas root, c'est voulu, c'est le modèle de sécurité) et la version d'OpenClaw est 2026.3.11.

9. Résoudre le problème d'authentification

Erreur rencontrée

No API key found for provider anthropic

OpenClaw vérifie la présence d'une clé Anthropic avant d'envoyer la requête, même si OpenShell redirige tout vers Nemotron. C'est un faux positif, mais il bloque l'exécution.

La solution : exporter une clé Anthropic factice (jamais utilisée, elle satisfait juste la validation) et les vraies coordonnées NVIDIA.

printf 'export ANTHROPIC_API_KEY=dummy-rerouted-by-nemoclaw
export OPENAI_API_KEY=nvapi-VOTRE_CLE
export OPENAI_BASE_URL=https://integrate.api.nvidia.com/v1
openclaw agent --session-id test -m "Bonjour" --json 2>&1
exit
' | timeout 90 nemoclaw nemoclaw-test connect

Résultat attendu :

# {
#   "status": "ok",
#   "provider": "nvidia",
#   "model": "nemotron-3-super-120b-a12b",
#   "response_time": "9.4s",
#   "message": "Bonjour ! Comment puis-je vous aider ?"
# }

Le modèle répond en 9,4 secondes. L'inférence passe bien par le cloud NVIDIA, pas par Anthropic.

10. Configurer la recherche web (Gemini)

OpenClaw 2026.3.11 ne supporte pas SearxNG pour la recherche web. Les fournisseurs autorisés sont : brave, perplexity, grok, gemini.

Brave a supprimé son tier gratuit (4 $/mois minimum). Gemini reste gratuit via Google AI Studio.

Bug connu : openshell sandbox upload

La commande openshell sandbox upload crée un répertoire au lieu d'un fichier. Il faut utiliser un heredoc injecté via connect pour contourner le problème.

Supprimer l'ancienne configuration

printf 'rm -f /sandbox/.openclaw/openclaw.json\nexit\n' | \
  timeout 10 openshell sandbox connect nemoclaw-test

Écrire la nouvelle configuration via heredoc

# Adapter VOTRE_CLE_GEMINI avec la clé obtenue sur aistudio.google.com
printf 'cat > /sandbox/.openclaw/openclaw.json << "ENDCFG"
{
  "tools": {
    "web": {
      "search": {
        "enabled": true,
        "provider": "gemini",
        "gemini": {
          "apiKey": "VOTRE_CLE_GEMINI"
        }
      }
    }
  }
}
ENDCFG
echo DONE && wc -c /sandbox/.openclaw/openclaw.json
exit
' | timeout 15 openshell sandbox connect nemoclaw-test
# DONE
# 2108 /sandbox/.openclaw/openclaw.json

Le format JSON doit respecter exactement la structure tools.web.search d'OpenClaw. Toute autre structure sera rejetée avec l'erreur Invalid config.

Créer et appliquer la politique réseau Gemini

cat > /opt/NemoClaw/nemoclaw-blueprint/policies/presets/gemini-search.yaml << 'YAML'
preset:
  name: gemini-search
  description: "Google Gemini API access for web search"

network_policies:
  gemini_api:
    name: gemini_api
    endpoints:
      - host: generativelanguage.googleapis.com
        port: 443
        protocol: rest
        enforcement: enforce
        rules:
          - allow: { method: GET, path: "/**" }
          - allow: { method: POST, path: "/**" }
      - host: www.googleapis.com
        port: 443
        protocol: rest
        enforcement: enforce
        rules:
          - allow: { method: GET, path: "/**" }
          - allow: { method: POST, path: "/**" }
    binaries:
      - path: /usr/local/bin/openclaw
      - path: /usr/bin/node
YAML
cd /opt/NemoClaw
node -e 'require("./bin/lib/policies").applyPreset("nemoclaw-test", "gemini-search")'
# Policy "gemini-search" applied to sandbox "nemoclaw-test"

11. Bridge Telegram

NemoClaw inclut un bridge Telegram dans /opt/NemoClaw/scripts/telegram-bridge.js. Deux problèmes à résoudre avant de l'utiliser.

Problème 1 : nom du sandbox

Le bridge utilise process.env.SANDBOX_NAME || "nemoclaw" par défaut. Si votre sandbox s'appelle autrement (ex: nemoclaw-test), il ne le trouvera pas et affichera sandbox not found. Il faut passer la variable SANDBOX_NAME au lancement.

Problème 2 : variables d'authentification manquantes (patch obligatoire)

Le bridge passe NVIDIA_API_KEY à l'agent mais pas les variables nécessaires pour contourner le check auth Anthropic. Résultat : l'agent reçoit les messages mais ne répond jamais (No reply from agent).

Ouvrir /opt/NemoClaw/scripts/telegram-bridge.js et trouver la ligne 95 :

# AVANT (ligne 95) :
const cmd = `export NVIDIA_API_KEY='${API_KEY}' && nemoclaw-start openclaw agent...`

# APRÈS (ligne 95 modifiée) :
const cmd = `export NVIDIA_API_KEY='${API_KEY}' ANTHROPIC_API_KEY=dummy OPENAI_API_KEY='${API_KEY}' OPENAI_BASE_URL=https://integrate.api.nvidia.com/v1 && nemoclaw-start openclaw agent...`

En une commande sed :

sed -i "s|export NVIDIA_API_KEY='\${API_KEY}' \&\& nemoclaw-start|export NVIDIA_API_KEY='\${API_KEY}' ANTHROPIC_API_KEY=dummy OPENAI_API_KEY='\${API_KEY}' OPENAI_BASE_URL=https://integrate.api.nvidia.com/v1 \&\& nemoclaw-start|" \
  /opt/NemoClaw/scripts/telegram-bridge.js

Script de démarrage

Créer un script pour ne pas retaper les variables à chaque fois :

cat > /opt/NemoClaw/start-bridge.sh << 'SH'
#!/bin/bash
export NVIDIA_API_KEY='nvapi-VOTRE_CLE'
export TELEGRAM_BOT_TOKEN='VOTRE_TOKEN_BOTFATHER'
export SANDBOX_NAME='nemoclaw-test'
export ALLOWED_CHAT_IDS='VOTRE_CHAT_ID_TELEGRAM'
pkill -f telegram-bridge 2>/dev/null
sleep 1
nohup node /opt/NemoClaw/scripts/telegram-bridge.js > /tmp/nemoclaw-telegram.log 2>&1 &
echo "Bridge demarre PID=$!"
sleep 3
tail -15 /tmp/nemoclaw-telegram.log
SH
chmod +x /opt/NemoClaw/start-bridge.sh
bash /opt/NemoClaw/start-bridge.sh
# STARTED PID=128781
#
# ┌─────────────────────────────────────────────────────┐
# │  NemoClaw Telegram Bridge                          │
# │  Bot:      @VotreBotName                           │
# │  Sandbox:  nemoclaw-test                           │
# │  Model:    nvidia/nemotron-3-super-120b-a12b       │
# └─────────────────────────────────────────────────────┘

# Surveiller les logs :
tail -f /tmp/nemoclaw-telegram.log

Récapitulatif : 10 problèmes, 10 solutions

# Problème Solution
1 Faux paquet nemoclaw sur npm (squatting) Cloner depuis GitHub + npm install -g .
2 Port 8080 déjà utilisé Patcher onboard.js → port 8180
3 Port 18789 occupé par OpenClaw existant docker stop des conteneurs concernés
4 --from openclaw échoue (Dockerfile local) Ne pas utiliser cette option, laisser le wizard
5 No API key found for provider anthropic Exporter une clé Anthropic factice (dummy-rerouted-by-nemoclaw)
6 SearxNG non supporté dans OpenClaw 2026.3.11 Utiliser Gemini (gratuit via Google AI Studio)
7 openshell sandbox upload crée un répertoire Utiliser un heredoc via connect
8 Politique réseau manquante pour Gemini Créer et appliquer le preset gemini-search.yaml
9 Bridge Telegram : nom de sandbox en dur Variable d'environnement SANDBOX_NAME
10 Bridge Telegram : variables d'auth non transmises Patch ligne 95 pour injecter les exports

Commandes de référence

# Statut général
nemoclaw status

# Statut d'un sandbox
nemoclaw nemoclaw-test status

# Se connecter au sandbox
nemoclaw nemoclaw-test connect

# Lister les politiques appliquées
openshell sandbox policies nemoclaw-test

# Appliquer une politique
cd /opt/NemoClaw
node -e 'require("./bin/lib/policies").applyPreset("nemoclaw-test", "PRESET_NAME")'

# Détruire le sandbox (tout supprimer)
nemoclaw nemoclaw-test destroy

# Restaurer les conteneurs OpenClaw précédents
docker start openclaw-openclaw-gateway-1 openclaw-searxng-1
Sources et références :
github.com/NVIDIA/NemoClaw : Dépôt officiel
github.com/NVIDIA/OpenShell : Runtime sandbox
build.nvidia.com : Clés API NVIDIA (gratuit)
aistudio.google.com : Clés API Gemini (gratuit)
NemoClaw NVIDIA OpenShell OpenClaw VPS Ubuntu Docker sans GPU Nemotron Telegram Gemini
← Retour aux Scripts & Outils