- 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
- Vérifier les prérequis
- Installer OpenShell (runtime de sécurité)
- Installer NemoClaw : piège npm
- Clé API NVIDIA
- Patcher le port 8080 avant le onboard
- Libérer le port 18789
- Lancer le wizard onboard
- Vérifier l'installation
- Résoudre le problème d'authentification
- Configurer la recherche web (Gemini)
- Bridge Telegram
- Récapitulatif des 10 problèmes
- Commandes de référence
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
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
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
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
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
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.
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
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)