Offre Durée limitée : -10% sur tout le site* avec le code WELCOME10

Installer Vaultwarden sur un VPS Linux avec Docker : mots de passe auto-hébergés

Mis à jour le 24 octobre 2026 8 min de lecture 11 sections

Vaultwarden : un gestionnaire de mots de passe auto-hébergé

Vaultwarden est une implémentation alternative et légère du serveur Bitwarden, écrite en Rust. Compatible avec tous les clients officiels Bitwarden (extensions navigateur, applications mobiles, application de bureau), Vaultwarden permet d'auto-héberger son propre gestionnaire de mots de passe sur un VPS Linux. Le projet est open source, publié sous licence AGPL-3.0.

Contrairement au serveur officiel Bitwarden, qui nécessite plusieurs conteneurs Docker et une base Microsoft SQL Server, Vaultwarden tourne dans un seul conteneur avec une base SQLite embarquée. Un VPS avec 512 Mo de RAM suffit pour une instance personnelle ou familiale. C'est cette légèreté qui rend Vaultwarden particulièrement adapté à un déploiement sur un VPS modeste.

Ce guide couvre le déploiement de Vaultwarden avec Docker Compose sur un VPS Linux Ubuntu ou Debian, la mise en HTTPS via un reverse proxy Nginx, la création du premier compte, la configuration du panneau d'administration, les notifications SMTP, la sauvegarde de la base SQLite et le durcissement de l'instance.

Prérequis

Déployer Vaultwarden avec Docker Compose

Créez un répertoire dédié et un fichier compose.yaml pour définir le service Vaultwarden. L'image officielle vaultwarden/server est publiée sur Docker Hub et sur le GitHub Container Registry :

mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
nano compose.yaml

Contenu du fichier compose.yaml :

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.exemple.fr"
      SIGNUPS_ALLOWED: "false"
    volumes:
      - ./vw-data:/data
    ports:
      - "127.0.0.1:8080:80"

Points importants dans cette configuration Docker Compose :

  • DOMAIN : l'URL complète (avec https://) de votre instance Vaultwarden. Cette variable est indispensable : sans elle, les invitations, les pièces jointes et le web vault ne fonctionnent pas correctement ;
  • SIGNUPS_ALLOWED : désactivé dès le départ pour empêcher les inscriptions publiques. Vous activerez les inscriptions le temps de créer votre compte, puis les désactiverez à nouveau ;
  • Ports : le conteneur écoute sur 127.0.0.1:8080 uniquement (interface locale). Le reverse proxy Nginx exposera le service en HTTPS sur le port 443. Ne publiez jamais le conteneur directement sur une interface publique ;
  • Volume : le répertoire ./vw-data stocke la base SQLite, les pièces jointes, les clés RSA et la configuration. C'est le répertoire à sauvegarder.

Démarrez le conteneur :

docker compose up -d
docker compose logs -f

Le log affiche Rocket has launched from http://0.0.0.0:80 quand le serveur Vaultwarden est prêt. Pour approfondir la syntaxe Docker Compose et la gestion des volumes : guide Docker Compose sur VPS Linux.

Configurer le reverse proxy Nginx avec HTTPS

Vaultwarden exige une connexion HTTPS : les clients Bitwarden refusent de se connecter à une instance servie en HTTP non chiffré. Un reverse proxy Nginx avec un certificat Let's Encrypt répond à cette exigence.

Installez Nginx et Certbot :

sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx

Créez le fichier de configuration Nginx pour Vaultwarden :

sudo nano /etc/nginx/sites-available/vaultwarden

Contenu :

server {
    listen 80;
    server_name vault.exemple.fr;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    client_max_body_size 128M;
}

La directive client_max_body_size autorise l'envoi de pièces jointes volumineuses vers le coffre-fort. Adaptez la valeur selon vos besoins.

Activez le site et obtenez le certificat TLS :

sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d vault.exemple.fr

Certbot modifie automatiquement la configuration Nginx pour écouter sur le port 443 avec le certificat obtenu et redirige le trafic HTTP vers HTTPS. Le renouvellement du certificat est automatique via un timer systemd. Pour la gestion des certificats : guide Certbot et Let's Encrypt sur VPS Linux.

Pour la configuration avancée du reverse proxy (en-têtes de sécurité, WebSocket, rate limiting) : guide Nginx reverse proxy sur VPS Linux.

Créer le premier compte utilisateur

Les inscriptions sont désactivées par défaut dans la configuration précédente. Activez-les temporairement pour créer votre compte :

cd /opt/vaultwarden
sed -i 's/SIGNUPS_ALLOWED: "false"/SIGNUPS_ALLOWED: "true"/' compose.yaml
docker compose up -d

Ouvrez https://vault.exemple.fr dans un navigateur, cliquez sur "Create account" et renseignez votre adresse e-mail et un mot de passe maître. Ce mot de passe maître est la seule clé qui déverrouille votre coffre-fort de mots de passe : choisissez-le long (au moins 14 caractères) et unique.

Une fois le compte créé, désactivez immédiatement les inscriptions :

sed -i 's/SIGNUPS_ALLOWED: "true"/SIGNUPS_ALLOWED: "false"/' compose.yaml
docker compose up -d

Activer le panneau d'administration

Vaultwarden propose un panneau d'administration web accessible à l'adresse /admin. Il permet de gérer les utilisateurs, d'envoyer des invitations, de consulter les journaux et de modifier la configuration de l'instance sans toucher au fichier compose.yaml.

Générez un jeton d'accès sécurisé :

openssl rand -base64 48

Ajoutez la variable ADMIN_TOKEN dans la section environment du fichier compose.yaml :

      ADMIN_TOKEN: "votre-jeton-genere-ici"

Redémarrez le conteneur avec docker compose up -d, puis accédez au panneau via https://vault.exemple.fr/admin. Le jeton sert de mot de passe d'accès. Ne le partagez pas et conservez-le dans un endroit sûr.

Configurer les notifications SMTP

Sans configuration SMTP, Vaultwarden ne peut pas envoyer d'e-mails de vérification de compte, d'invitations utilisateur ni d'alertes de connexion. Ajoutez les variables SMTP dans le fichier compose.yaml :

      SMTP_HOST: "smtp.exemple.fr"
      SMTP_FROM: "vaultwarden@exemple.fr"
      SMTP_PORT: "587"
      SMTP_SECURITY: "starttls"
      SMTP_USERNAME: "vaultwarden@exemple.fr"
      SMTP_PASSWORD: "mot-de-passe-smtp"

La variable SMTP_SECURITY accepte trois valeurs :

  • starttls (par défaut) : chiffrement STARTTLS, port 587 ;
  • force_tls : TLS implicite, port 465 ;
  • off : aucun chiffrement (déconseillé en production).

Redémarrez le conteneur et testez l'envoi d'un e-mail depuis le panneau d'administration (/admin, section "SMTP Email Settings", bouton "Send test email").

Sauvegarder la base de données SQLite

Vaultwarden stocke tous les mots de passe, notes sécurisées et identités dans un fichier SQLite (db.sqlite3) situé dans le volume de données (./vw-data). La sauvegarde de ce fichier est la mesure la plus importante de votre déploiement.

La documentation officielle de Vaultwarden recommande d'utiliser la commande .backup de SQLite, qui crée une copie cohérente même si le serveur est en cours d'exécution :

sqlite3 /opt/vaultwarden/vw-data/db.sqlite3 ".backup '/opt/vaultwarden/backups/db-$(date +%Y%m%d-%H%M).sqlite3'"

En complément de la base, sauvegardez aussi les fichiers suivants du répertoire vw-data :

  • attachments/ : les pièces jointes stockées dans le coffre-fort ;
  • config.json : la configuration définie depuis le panneau d'administration ;
  • rsa_key.pem, rsa_key.der, rsa_key.pub.der : les clés RSA utilisées pour signer les jetons d'authentification.

Automatisez la sauvegarde avec une tâche cron qui exécute la commande SQLite, puis synchronise le répertoire vers un stockage distant. Consultez notre guide planifier des tâches automatiques avec cron et systemd timers pour la mise en place, et notre guide sauvegarder un VPS avec rsync pour la réplication hors site.

Point important lors d'une restauration : si vous restaurez une sauvegarde créée avec .backup, supprimez tout fichier db.sqlite3-wal présent dans le répertoire de données avant de démarrer Vaultwarden. Restaurer un fichier .backup en présence d'un fichier WAL d'une session antérieure peut corrompre la base.

Récapitulatif du durcissement

Voici les mesures de sécurité couvertes dans ce guide et les variables d'environnement associées :

MesureVariable ou actionObjectif
Désactiver les inscriptions publiquesSIGNUPS_ALLOWED=falseEmpêcher la création de comptes non autorisés
Protéger le panneau d'administrationADMIN_TOKEN avec un jeton longRestreindre l'accès à la configuration du serveur
Configurer SMTPVariables SMTP_*Activer la vérification de compte et les alertes
Forcer HTTPSReverse proxy Nginx + certificat Let's EncryptChiffrer le trafic entre les clients et le serveur
Masquer les indices de mot de passeSHOW_PASSWORD_HINT=falseNe pas afficher d'indice sur la page de connexion
Écouter uniquement en localPort 127.0.0.1:8080:80Interdire l'accès direct au conteneur sans passer par le reverse proxy

Durcissez aussi le VPS lui-même : sécuriser SSH (désactiver l'accès root, imposer les clés publiques), configurer Fail2ban pour protéger SSH contre les attaques par force brute, et maintenir le système à jour.

Fichier compose.yaml complet

Voici le fichier compose.yaml complet avec l'ensemble des variables abordées dans ce guide :

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.exemple.fr"
      SIGNUPS_ALLOWED: "false"
      ADMIN_TOKEN: "votre-jeton-genere-ici"
      SHOW_PASSWORD_HINT: "false"
      SMTP_HOST: "smtp.exemple.fr"
      SMTP_FROM: "vaultwarden@exemple.fr"
      SMTP_PORT: "587"
      SMTP_SECURITY: "starttls"
      SMTP_USERNAME: "vaultwarden@exemple.fr"
      SMTP_PASSWORD: "mot-de-passe-smtp"
    volumes:
      - ./vw-data:/data
    ports:
      - "127.0.0.1:8080:80"

Remplacez les valeurs d'exemple (vault.exemple.fr, jeton admin, identifiants SMTP) par vos propres paramètres avant de démarrer le conteneur.

Aller plus loin

L'instance Vaultwarden est en place, sécurisée et sauvegardée. Pour compléter le déploiement :

  • Activez l'authentification à deux facteurs (TOTP, FIDO2/WebAuthn, YubiKey) dans les paramètres de sécurité de votre compte via l'interface web vault ;
  • Configurez les clients Bitwarden (extension navigateur, application mobile) en renseignant l'URL de votre instance dans "Self-hosted > Server URL" avant de vous connecter ;
  • Surveillez la consommation de ressources du conteneur avec htop et btop ;
  • Mettez à jour Vaultwarden régulièrement : docker compose pull && docker compose up -d tire la dernière image et relance le conteneur sans perte de données.

FAQ

Combien de RAM faut-il pour héberger Vaultwarden sur un VPS ?

Vaultwarden consomme environ 50 à 100 Mo de RAM au repos. Un VPS avec 512 Mo de RAM suffit pour une utilisation personnelle ou familiale. Si vous hébergez d'autres services sur le même VPS (reverse proxy Nginx, Fail2ban, autres conteneurs Docker), prévoyez au moins 1 Go de RAM pour disposer d'une marge confortable.

Vaultwarden est-il compatible avec tous les clients Bitwarden ?

Oui. Vaultwarden implémente l'API du serveur Bitwarden. Les extensions navigateur (Chrome, Firefox, Edge, Safari), les applications mobiles (iOS, Android), l'application de bureau (Windows, macOS, Linux) et l'interface web vault fonctionnent avec une instance Vaultwarden. Il suffit de renseigner l'URL de votre serveur dans les paramètres "Self-hosted" du client avant de se connecter.

Peut-on migrer ses mots de passe depuis Bitwarden Cloud vers Vaultwarden ?

Oui. Exportez votre coffre-fort depuis les paramètres de votre compte Bitwarden Cloud au format JSON chiffré, puis importez le fichier dans votre instance Vaultwarden via l'interface web vault. Le format d'export et d'import est identique puisque Vaultwarden est compatible avec l'API Bitwarden.

Comment mettre à jour Vaultwarden sans perdre ses mots de passe ?

Les mots de passe sont stockés dans le volume Docker (répertoire vw-data), pas dans le conteneur. La mise à jour consiste à tirer la nouvelle image avec docker compose pull puis à relancer le conteneur avec docker compose up -d. Le conteneur est remplacé, les données du volume persistent. Vérifiez les notes de version sur le dépôt GitHub avant chaque mise à jour.

SQLite est-il fiable pour un gestionnaire de mots de passe ?

Oui. SQLite est un moteur de base de données éprouvé, utilisé dans des milliards d'appareils. Pour un gestionnaire de mots de passe avec quelques dizaines d'utilisateurs, SQLite ne pose aucun problème de performance ni de fiabilité. L'essentiel est de sauvegarder régulièrement le fichier db.sqlite3 avec la commande .backup de SQLite, qui garantit une copie cohérente même en cours d'utilisation.

Vaultwarden supporte-t-il l'authentification à deux facteurs ?

Oui. Vaultwarden prend en charge plusieurs méthodes de double authentification : TOTP (applications type Authy ou Google Authenticator), FIDO2/WebAuthn (clés physiques comme YubiKey), Duo Security et la vérification par e-mail. L'activation se fait dans les paramètres de sécurité du compte via l'interface web vault.