Héberger ses propres services d'intelligence artificielle sur un VPS, c'est reprendre le contrôle total sur ses données, ses coûts et son infrastructure. Fini la dépendance aux plateformes SaaS qui changent leurs prix du jour au lendemain — avec un serveur privé virtuel, vous êtes le patron.
Dans ce guide complet, on va monter ensemble un setup VPS optimisé pour l'IA : du choix du serveur à la mise en production, en passant par la sécurité et le reverse proxy. Que vous vouliez faire tourner OpenClaw, une API FastAPI, ou simplement garder vos données chez vous, ce tutoriel est fait pour vous.
🤔 Pourquoi auto-héberger ses services IA ?
Avant de plonger dans la technique, posons la question fondamentale : pourquoi se donner cette peine ?
Vie privée et souveraineté des données
Quand vous utilisez un service cloud classique, vos données transitent par des serveurs tiers. Vos prompts, vos fichiers, vos conversations — tout est potentiellement accessible au fournisseur.
Avec le self-hosting :
- Vos données restent sur VOTRE serveur
- Aucun tiers n'a accès à vos prompts ou résultats
- Conformité RGPD simplifiée (vous savez exactement où sont les données)
- Pas de revente de vos données pour entraîner des modèles
Contrôle total sur l'infrastructure
| Aspect | Cloud/SaaS | Self-hosted |
|---|---|---|
| Uptime | Dépend du fournisseur | Vous décidez |
| Mises à jour | Imposées | À votre rythme |
| Configuration | Limitée | Totale |
| Personnalisation | Selon l'offre | Infinie |
| Données | Chez eux | Chez vous |
Coûts maîtrisés
Un VPS à 5-15€/mois remplace facilement plusieurs abonnements SaaS qui coûteraient 50-100€/mois combinés. On détaille les coûts réels plus bas.
Apprentissage et compétences
Self-héberger, c'est aussi monter en compétence sur Linux, le réseau, la sécurité, le déploiement. Des skills qui valent de l'or sur le marché du travail.
🖥️ Choisir son VPS : les specs minimales
Tous les VPS ne se valent pas. Voici ce qu'il faut pour faire tourner confortablement un setup IA.
Spécifications minimales recommandées
| Composant | Minimum | Recommandé | Pourquoi |
|---|---|---|---|
| vCPU | 2 cores | 4 cores | Les appels API et le traitement parallèle demandent du CPU |
| RAM | 4 GB | 8 GB | Python + Node.js + base de données = gourmand |
| Stockage | 80 GB SSD | 160 GB NVMe | Les logs et données IA grossissent vite |
| Bande passante | 1 TB/mois | Illimitée | Les appels API consomment de la bande passante |
| OS | Ubuntu 22.04+ | Ubuntu 24.04 LTS | Support long terme, communauté massive |
Quel fournisseur choisir ?
Après avoir testé plusieurs hébergeurs, voici notre recommandation :
Hostinger VPS est notre choix #1 pour le rapport qualité/prix. Avec 20% de remise via notre lien, vous obtenez un VPS performant pour le prix d'un café par mois.
| Fournisseur | Prix/mois | vCPU | RAM | Stockage | Notre avis |
|---|---|---|---|---|---|
| Hostinger 🏆 | ~5-10€ | 2-4 | 4-8 GB | 80-200 GB NVMe | Meilleur rapport qualité/prix, -20% avec notre lien |
| Hetzner | ~5-15€ | 2-4 | 4-8 GB | 40-160 GB | Excellent, datacenters EU |
| OVH | ~6-12€ | 2-4 | 4-8 GB | 80-160 GB | Français, bonne perf |
| DigitalOcean | ~12-24$ | 2-4 | 4-8 GB | 50-160 GB | Simple mais plus cher |
| Contabo | ~5-10€ | 4-6 | 8-16 GB | 200-400 GB | Specs généreuses, support moyen |
💡 Conseil : commencez avec un plan à 2 vCPU / 4 GB RAM. Vous pourrez toujours upgrader plus tard. Avec Hostinger et les 20% de remise, ça revient à moins de 6€/mois.
🔧 Setup initial Ubuntu : les fondations
Vous avez votre VPS ? Parfait. Voici comment le configurer proprement dès le départ.
Étape 1 : Première connexion SSH
# Connexion avec le mot de passe root fourni par l'hébergeur
ssh root@VOTRE_IP_VPS
# Première chose : mettre à jour le système
apt update && apt upgrade -y
Étape 2 : Créer un utilisateur non-root
Ne travaillez JAMAIS en root au quotidien. C'est la règle numéro 1 de la sécurité serveur.
# Créer un utilisateur avec des droits sudo
adduser deploy
usermod -aG sudo deploy
# Copier les clés SSH vers le nouvel utilisateur
mkdir -p /home/deploy/.ssh
cp ~/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
Étape 3 : Sécuriser SSH
# Éditer la config SSH
nano /etc/ssh/sshd_config
Modifiez ces lignes :
# Désactiver la connexion root
PermitRootLogin no
# Désactiver l'authentification par mot de passe
PasswordAuthentication no
# Changer le port (optionnel mais recommandé)
Port 2222
# Limiter les utilisateurs autorisés
AllowUsers deploy
# Redémarrer SSH
systemctl restart sshd
⚠️ Important : avant de fermer votre session root, ouvrez un NOUVEAU terminal et testez la connexion avec l'utilisateur
deploy. Si ça ne marche pas, vous avez encore la session root pour corriger.
Étape 4 : Firewall UFW
UFW (Uncomplicated Firewall) est votre première ligne de défense.
# Installer et configurer UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Autoriser SSH (sur le port que vous avez choisi)
sudo ufw allow 2222/tcp comment 'SSH'
# Autoriser HTTP et HTTPS (pour le reverse proxy)
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Activer le firewall
sudo ufw enable
# Vérifier le statut
sudo ufw status verbose
Résultat attendu :
Status: active
To Action From
-- ------ ----
2222/tcp ALLOW IN Anywhere # SSH
80/tcp ALLOW IN Anywhere # HTTP
443/tcp ALLOW IN Anywhere # HTTPS
Étape 5 : Fail2ban contre le brute-force
Fail2ban surveille les logs et bannit les IP qui tentent des connexions répétées.
# Installer fail2ban
sudo apt install fail2ban -y
# Créer la config locale
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Configuration recommandée :
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
# Démarrer fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Vérifier le statut
sudo fail2ban-client status sshd
Étape 6 : Mises à jour automatiques
Les failles de sécurité n'attendent pas. Activez les mises à jour automatiques pour les patchs critiques.
# Installer unattended-upgrades
sudo apt install unattended-upgrades -y
# Configurer
sudo dpkg-reconfigure -plow unattended-upgrades
# Vérifier la config
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Assurez-vous que ces lignes sont décommentées :
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}:${distro_codename}-updates";
};
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
🏗️ Les services à héberger
Maintenant que le serveur est sécurisé, installons les services. Voici l'architecture cible :
Internet
│
▼
┌─────────────┐
│ Caddy/Nginx│ ← Reverse proxy + SSL auto
│ (port 443) │
└──────┬──────┘
│
├──► OpenClaw (port 3000) ← Agent IA
├──► FastAPI (port 8000) ← API custom
└──► SQLite Web (port 8080) ← Interface DB
OpenClaw : votre agent IA central
OpenClaw est le cerveau de l'opération. C'est l'agent IA qui orchestre tout.
Pour aller plus loin sur ce sujet, consultez notre guide APIs IA : OpenRouter vs appels directs.
# Installer Node.js 20+
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Pour aller plus loin sur ce sujet, consultez notre guide [Docker + IA : conteneuriser ses services intelligents](/article/docker-ia-conteneuriser-services).
# Installer OpenClaw
sudo npm install -g openclaw
# Vérifier l'installation
openclaw --version
Pour la configuration complète, suivez notre guide Installer OpenClaw sur un VPS et Configurer OpenClaw.
FastAPI : votre API personnalisée
FastAPI est parfait pour créer des endpoints custom qui complètent votre setup IA.
# Installer Python 3.11+
sudo apt install python3.11 python3.11-venv python3-pip -y
# Créer un environnement virtuel
python3.11 -m venv /home/deploy/api-env
source /home/deploy/api-env/bin/activate
# Installer FastAPI et ses dépendances
pip install fastapi uvicorn python-dotenv httpx
Exemple de service FastAPI minimal :
# /home/deploy/api/main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import os
app = FastAPI(title="Mon API IA", version="1.0")
app.add_middleware(
CORSMiddleware,
allow_origins=["https://mondomaine.com"],
allow_methods=["GET", "POST"],
allow_headers=["*"],
)
@app.get("/health")
async def health():
return {"status": "ok", "service": "api-ia"}
@app.get("/api/stats")
async def stats():
# Vos métriques custom
return {
"uptime": "99.9%",
"requests_today": 1337,
"models_active": 3
}
# Créer un service systemd
sudo tee /etc/systemd/system/fastapi.service << EOF
[Unit]
Description=FastAPI IA Service
After=network.target
[Service]
User=deploy
WorkingDirectory=/home/deploy/api
ExecStart=/home/deploy/api-env/bin/uvicorn main:app --host 127.0.0.1 --port 8000
Restart=always
RestartSec=5
EnvironmentFile=/home/deploy/api/.env
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable fastapi
sudo systemctl start fastapi
SQLite : votre base de données légère
SQLite est parfait pour le self-hosting : zéro config, zéro serveur de BDD, fichier unique.
# SQLite est déjà installé sur Ubuntu, mais installons les outils
sudo apt install sqlite3 -y
# Créer votre base de données
mkdir -p /home/deploy/data
sqlite3 /home/deploy/data/app.db << 'SQL'
CREATE TABLE IF NOT EXISTS logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
level TEXT NOT NULL,
message TEXT NOT NULL,
metadata JSON
);
CREATE TABLE IF NOT EXISTS cache (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
expires_at DATETIME
);
CREATE INDEX idx_logs_timestamp ON logs(timestamp);
CREATE INDEX idx_cache_expires ON cache(expires_at);
SQL
💡 Pourquoi SQLite plutôt que PostgreSQL ? Pour un setup perso/petit projet, SQLite gère facilement des millions de lignes, ne consomme quasi pas de RAM, et les backups se font en copiant un fichier. PostgreSQL devient pertinent quand vous avez besoin d'accès concurrent massif ou de fonctionnalités avancées (JSON avancé, full-text search poussé, etc.).
Reverse proxy : Caddy (recommandé) ou Nginx
Le reverse proxy est la porte d'entrée de votre serveur. Il gère le SSL, le routage et la sécurité.
Option A : Caddy (recommandé pour la simplicité)
Caddy gère automatiquement les certificats SSL via Let''s Encrypt. Zéro config SSL.
# Installer Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy -y
Configuration Caddy (/etc/caddy/Caddyfile) :
mondomaine.com {
# OpenClaw
handle /api/claw/* {
reverse_proxy localhost:3000
}
# FastAPI
handle /api/* {
reverse_proxy localhost:8000
}
# Site statique (optionnel)
handle {
root * /home/deploy/www
file_server
}
# Headers de sécurité
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
Referrer-Policy strict-origin-when-cross-origin
}
}
# Recharger Caddy
sudo systemctl reload caddy
Option B : Nginx
sudo apt install nginx certbot python3-certbot-nginx -y
# /etc/nginx/sites-available/mondomaine.com
server {
listen 80;
server_name mondomaine.com;
location /api/claw/ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /api/ {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
root /home/deploy/www;
index index.html;
}
}
# Activer le site et obtenir le SSL
sudo ln -s /etc/nginx/sites-available/mondomaine.com /etc/nginx/sites-enabled/
sudo certbot --nginx -d mondomaine.com
sudo systemctl reload nginx
💰 Coûts réels mensuels
Parlons argent. Combien coûte réellement ce setup ?
| Poste | Coût mensuel | Notes |
|---|---|---|
| VPS Hostinger | 5-10€ | Avec 20% de remise via notre lien |
| Domaine | ~1€ | ~12€/an réparti |
| APIs IA (OpenRouter) | 2-15€ | Selon utilisation, modèles gratuits dispo |
| Backups externes | 0-2€ | S3-compatible ou rsync |
| Total | 8-28€/mois |
Comparaison avec les alternatives SaaS
| Service | SaaS | Self-hosted | Économie |
|---|---|---|---|
| Agent IA (ChatGPT Pro) | 20€/mois | 0€ (OpenClaw gratuit) | 20€/mois |
| API Gateway | 15-50€/mois | 0€ (Caddy gratuit) | 15-50€/mois |
| Base de données | 10-30€/mois | 0€ (SQLite gratuit) | 10-30€/mois |
| Monitoring | 10-25€/mois | 0€ (scripts custom) | 10-25€/mois |
| Total | 55-125€/mois | 8-28€/mois | 47-97€/mois |
💡 Sur un an, le self-hosting peut vous faire économiser 500 à 1 100€. L''investissement en temps (quelques heures de setup) est largement rentabilisé.
📋 Checklist de déploiement
Avant de considérer votre setup comme "production-ready", vérifiez chaque point :
✅ Utilisateur non-root créé
✅ SSH par clé uniquement (mot de passe désactivé)
✅ Port SSH changé
✅ UFW activé (seuls 80, 443, SSH ouverts)
✅ Fail2ban configuré et actif
✅ Mises à jour automatiques activées
✅ Reverse proxy avec SSL (certificat valide)
✅ Services en systemd (redémarrage auto)
✅ Backups configurés (au minimum quotidiens)
✅ Monitoring basique en place
Script de backup automatique
#!/bin/bash
# /home/deploy/scripts/backup.sh
BACKUP_DIR="/home/deploy/backups"
DATE=$(date +%Y-%m-%d_%H-%M)
mkdir -p "$BACKUP_DIR"
# Backup SQLite (copie atomique)
sqlite3 /home/deploy/data/app.db ".backup $BACKUP_DIR/app_$DATE.db"
# Backup configs
tar czf "$BACKUP_DIR/configs_$DATE.tar.gz" \
/etc/caddy/Caddyfile \
/home/deploy/api/.env \
/etc/fail2ban/jail.local
# Rotation : garder les 7 derniers jours
find "$BACKUP_DIR" -name "*.db" -mtime +7 -delete
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
echo "[$(date)] Backup terminé : $BACKUP_DIR"
# Ajouter au cron (tous les jours à 3h)
crontab -e
# Ajouter : 0 3 * * * /home/deploy/scripts/backup.sh >> /home/deploy/logs/backup.log 2>&1
🔒 Aller plus loin en sécurité
Ce guide couvre les bases, mais la sécurité est un processus continu. Pour approfondir :
- Monitoring avancé : installez Netdata ou Prometheus + Grafana pour surveiller les performances
- Alertes : configurez des notifications Telegram quand quelque chose tourne mal
- Audit : lancez
lynis audit systemrégulièrement pour détecter les faiblesses - Docker : isolez chaque service dans son conteneur pour limiter la surface d''attaque
Pour un guide complet sur la sécurisation, consultez notre article Sécuriser OpenClaw.
🎯 Résumé : votre setup en 30 minutes
- Commander un VPS sur Hostinger (profitez des 20% de remise)
- Sécuriser : utilisateur non-root, SSH par clé, UFW, fail2ban
- Installer : Node.js, Python, SQLite
- Déployer : OpenClaw, FastAPI, reverse proxy Caddy
- Automatiser : backups, mises à jour, monitoring
- Profiter : un setup complet pour 8-15€/mois
Le self-hosting n''est pas réservé aux experts. Avec ce guide, vous avez tout ce qu''il faut pour monter un serveur IA solide, sécurisé et économique. Et le meilleur ? Vous gardez le contrôle total sur vos données et vos outils.
📚 Articles liés
- Qu''est-ce qu''OpenClaw ? — Comprendre l''agent IA que vous allez héberger
- Installer OpenClaw sur un VPS — Guide d''installation pas à pas
- Configurer OpenClaw — Personnaliser votre agent
- Sécuriser OpenClaw — Aller plus loin en sécurité
- APIs IA : OpenRouter vs appels directs — Choisir comment connecter vos modèles IA
- Automatiser sa vie avec l''IA — Ce que vous pourrez faire avec votre setup