Tutoriel

Synchroniser son historique shell avec Atuin sur VPS

Automatisation7 min de lecture6 étapes

Atuin remplace le fichier `.zsh_history` par une base SQLite locale et synchronise cet historique entre vos machines via un serveur que vous hébergez vous-même. Toutes les commandes sont chiffrées avant d'être envoyées : le serveur ne voit jamais leur contenu. Résultat : un historique consultable en une fraction de seconde, partagé entre laptops, serveurs et VM, sans confier vos données à un tiers.

Sommaire· Pourquoi synchroniser son historique shell1/9
  1. 01Pourquoi synchroniser son historique shell
  2. 02Bénéfices concrets d'Atuin auto-hébergé
  3. 03Prérequis
  4. 04Installer le serveur Atuin sur le VPS
  5. 05Installer et configurer le client Atuin
  6. 06Sécurisation : pare-feu, inscriptions et reverse proxy
  7. 07Dépannage — erreurs courantes
  8. 08Atuin vs les alternatives : quelle solution choisir
  9. 09Atuin, un outil qui grandit avec vous

Pourquoi synchroniser son historique shell

Travailler sur plusieurs machines devrait être transparent. En pratique, la commande kubectl rollout undo deployment/api tapée sur le laptop n'est jamais dans le terminal du serveur de CI, et le docker compose exec d'il y a trois semaines est introuvable dans ~/.zsh_history parce que la rotation a écrasé les entrées anciennes.

Atuin résout les deux problèmes à la racine : il stocke chaque commande dans SQLite avec son contexte (heure, durée, code de sortie, répertoire), et il synchronise cette base entre vos machines via un serveur que vous contrôlez. La recherche s'exécute localement — aucune latence réseau au moment de rappeler une commande — et la synchronisation se fait en arrière-plan. L'interface de recherche (Ctrl+R) devient un index exhaustif de tout ce que vous avez tapé, sur n'importe quel poste, depuis le premier jour.

Bénéfices concrets d'Atuin auto-hébergé

  • Retrouvez n'importe quelle commande tapée sur n'importe quelle machine en moins d'une seconde via Ctrl+R.
  • Chiffrement côté client (AES-256) : le serveur ne voit jamais le contenu de votre historique.
  • Contexte riche par entrée : code de sortie, durée d'exécution, répertoire courant, hostname.
  • Aucune donnée envoyée à un tiers — vous hébergez, vous maîtrisez.
  • Binaire Rust sans dépendances lourdes : tourne sur le VPS Start à partir de 99 DH/mois.
  • Supports zsh, bash, fish, nushell et PowerShell — un seul serveur pour toute votre flotte.
  • Statistiques d'usage intégrées (atuin stats) : vos commandes les plus fréquentes, vos pics d'activité.

Prérequis

VPS : le serveur Atuin est un binaire Rust compilé avec une base SQLite embarquée. Il consomme moins de 50 Mo de RAM au repos, ce qui le rend compatible avec le VPS Start. Comptez 512 Mo de RAM disponibles pour l'ensemble (système + processus Atuin), 5 Go de stockage SSD pour la base d'historique à long terme. Un noyau Linux récent (Debian 12 ou Ubuntu 22.04+) convient parfaitement.

Docker et Docker Compose doivent être installés sur le VPS — c'est le mode de déploiement recommandé par le projet. Si votre VPS est neuf, installez Docker via le script officiel ou le template Docker du Marketplace ServOrbit.

Un nom de domaine pointant vers le VPS est recommandé (atuin.votre-domaine.com, enregistrement A) pour pouvoir générer un certificat TLS automatique. Le certificat est indispensable : le client Atuin refuse de synchroniser en clair par défaut.

Installer le serveur Atuin sur le VPS

  1. Se connecter au VPS et créer un répertoire de travail

    Connectez-vous en SSH à votre VPS :

    ssh root@<ip-du-vps>

    Créez un répertoire dédié :

    mkdir -p /opt/atuin && cd /opt/atuin
  2. Rédiger le fichier docker-compose.yml

    Créez le fichier de composition :

    cat > docker-compose.yml << 'EOF'
    services:
      atuin:
        image: ghcr.io/atuinsh/atuin:v18.23.0
        command: server start
        volumes:
          - ./config:/config
        ports:
          - "8888:8888"
        environment:
          ATUIN_HOST: "0.0.0.0"
          ATUIN_PORT: "8888"
          ATUIN_OPEN_REGISTRATION: "true"
          ATUIN_DB_URI: "sqlite:///config/history.db"
        restart: unless-stopped
    EOF

    Cette configuration utilise SQLite (embarqué, aucune dépendance externe) et ouvre les inscriptions pour que vous puissiez créer votre compte à la première connexion.

  3. Créer le répertoire de configuration et démarrer le conteneur

    Atuin a besoin d'un répertoire de config accessible en écriture :

    mkdir -p config && chown 1000:1000 config

    Démarrez le serveur :

    docker compose up -d

    Vérifiez que le conteneur est bien lancé :

    docker compose ps
    # NAME      STATUS          PORTS
    # atuin     Up 2 minutes    0.0.0.0:8888->8888/tcp
  4. Ouvrir le port 8888 dans le pare-feu UFW

    Le port 8888 doit être accessible depuis vos machines clientes. Sur Ubuntu/Debian avec UFW :

    sudo ufw allow 8888/tcp
    sudo ufw status

    ⚠️ Si vous oubliez cette étape, le client atuin affichera Connection refused ou Failed to sync history au moment de la synchronisation — c'est l'erreur la plus fréquente dans les déploiements self-hosted.

  5. Mettre un reverse proxy HTTPS devant le serveur

    Le client Atuin exige HTTPS par défaut. Placez Caddy devant le serveur :

    apt-get install -y caddy

    Créez /etc/caddy/Caddyfile :

    atuin.votre-domaine.com {
        reverse_proxy localhost:8888
    }

    Redémarrez Caddy (il obtient le certificat Let's Encrypt automatiquement) :

    systemctl restart caddy

    Vérifiez que le serveur répond :

    curl https://atuin.votre-domaine.com
    # {"msg":"Atuin server v18.23.0"}
  6. Fermer les inscriptions une fois votre compte créé

    Une fois vos comptes créés (voir étape suivante), désactivez les inscriptions publiques pour éviter tout compte indésirable. Éditez docker-compose.yml :

    ATUIN_OPEN_REGISTRATION: "false"

    Redémarrez le conteneur :

    docker compose up -d

    Alternativement, créez un fichier /opt/atuin/config/server.toml pour une configuration plus fine :

    [server]
    host = "0.0.0.0"
    port = 8888
    open_registration = false
    
    [server.db]
    db_uri = "sqlite:///config/history.db"

Installer et configurer le client Atuin

Sur chacune de vos machines (laptop, serveur de dev, etc.), installez Atuin avec le script officiel :

curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh

Le script installe le binaire dans ~/.atuin/bin et détecte votre shell.

Intégration au shell — ajoutez la ligne correspondante à votre fichier de configuration :

# Pour zsh (~/.zshrc)
eval "$(atuin init zsh)"

# Pour bash (~/.bashrc)
eval "$(atuin init bash)"

# Pour fish (~/.config/fish/config.fish)
atuin init fish | source

Rechargez votre shell : source ~/.zshrc (ou équivalent).

Enregistrer un compte sur votre serveur :

atuin register \
  --server https://atuin.votre-domaine.com \
  -u votre-username \
  -e [email protected] \
  -p votre-mot-de-passe

Atuin génère une clé de chiffrement locale — elle s'affiche à l'écran. Notez-la immédiatement : elle est indispensable pour connecter d'autres machines et ne peut pas être régénérée.

Première synchronisation :

atuin sync
# Syncing history...
# History synced!

Se connecter depuis une deuxième machine :

atuin login \
  --server https://atuin.votre-domaine.com \
  -u votre-username \
  -p votre-mot-de-passe \
  -k "<votre-clé-de-chiffrement>"

atuin sync

Sécurisation : pare-feu, inscriptions et reverse proxy

Trois réglages à vérifier après le premier déploiement :

1. open_registration: false dès que vos comptes sont créés. Laissé à true, n'importe qui connaissant l'URL peut créer un compte et utiliser votre stockage.

2. Ne jamais exposer le port 8888 directement — le trafic doit toujours transiter par le reverse proxy HTTPS. Restreignez UFW :

# Bloquer l'accès direct au port 8888 depuis l'extérieur
sudo ufw delete allow 8888/tcp
# Autoriser uniquement le reverse proxy local à le joindre (Caddy tourne en local)

3. Sauvegardez la base SQLite régulièrement :

docker compose exec atuin sh -c "sqlite3 /config/history.db ".backup /config/history.backup.db""

La base grossit lentement — quelques dizaines de Mo même après plusieurs années d'usage intensif.

Dépannage — erreurs courantes

Quelques erreurs rencontrées lors d'un déploiement self-hosted et leur résolution.

Connection refused au premier atuin sync
Le port 8888 n'est pas ouvert dans UFW, ou le conteneur n'est pas démarré. Vérifiez avec :

sudo ufw status | grep 8888
docker compose ps

SSL certificate problem: unable to get local issuer certificate
Le certificat TLS n'a pas encore été émis par Caddy. Attendez 30 à 60 secondes après le redémarrage de Caddy et relancez atuin sync. Vérifiez que le DNS de atuin.votre-domaine.com pointe bien vers l'IP du VPS.

Invalid credentials à atuin login
La clé de chiffrement est incorrecte ou tronquée. Récupérez-la depuis la machine d'origine :

atuin key

Collez la valeur complète (longue chaîne base64) après -k.

open_registration is disabled
Vous avez fermé les inscriptions avant de créer tous vos comptes. Remettez temporairement ATUIN_OPEN_REGISTRATION: "true" dans docker-compose.yml, redémarrez, créez le compte, puis repassez à false.

L'historique ne se synchronise pas après atuin sync
Vérifiez que le serveur est bien la cible configurée côté client :

cat ~/.config/atuin/config.toml | grep sync_address
# sync_address = "https://atuin.votre-domaine.com"

Si la clé est absente, ajoutez-la manuellement dans ~/.config/atuin/config.toml.

Atuin vs les alternatives : quelle solution choisir

Faites défiler le tableau

OutilChiffrement E2ESync multi-machinesSelf-hostedRecherche avancée
**Atuin**Oui (AES-256, clé locale)Oui (serveur optionnel)Oui (Docker, SQLite)Oui (contexte, code de sortie, durée)
McFlyNonNonN/A (local uniquement)Oui (réseau de neurones, répertoire courant)
HistdbNonNonN/A (local uniquement)Partielle (SQLite local, plugin zsh)
zsh_history natifNonNon (rsync manuel possible)N/AMinimale (grep, fzf en option)

Atuin, un outil qui grandit avec vous

Atuin v18.23.0 est la solution la plus complète pour un développeur qui travaille sur plusieurs machines et tient à la confidentialité de ses données. La configuration initiale prend moins de 30 minutes sur un VPS Start, et le résultat est un historique exhaustif, chiffré, consultable instantanément depuis n'importe quel terminal.

Une fois le serveur en place, vous pouvez aller plus loin : configurer la synchronisation automatique (atuin daemon), utiliser les statistiques hebdomadaires (atuin stats), ou explorer l'interface de recherche avancée avec filtrage par code de sortie ou par hostname. La commande que vous cherchez est toujours là — peu importe la machine sur laquelle vous l'avez tapée.

Déployez Atuin sur un VPS ServOrbit

Un VPS Start suffit pour faire tourner le serveur Atuin en continu. Accès root, IPv4 dédiée, SSD NVMe — tout ce qu'il faut pour un historique shell privé et disponible.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet