Installer Vaultwarden sur un VPS KVM avec Docker

VPS6 min de lectureMis à jour le

Sommaire 14 sections
  1. Ce qu'il vous faut
  2. Le HTTPS est indispensable
  3. 1. Générer le jeton d'administration
  4. 2. Le fichier .env
  5. 3. Le fichier compose.yaml
  6. 4. Premier lancement et création de votre compte
  7. 5. La page d'administration
  8. 6. Envoyer les e-mails
  9. 7. Configurer les applications Bitwarden
  10. 8. Mettre à jour
  11. 9. Sauvegarder
  12. Plusieurs applications sur le VPS
  13. Problèmes fréquents
  14. Besoin d'aide ?

Vaultwarden est un serveur de gestionnaire de mots de passe compatible avec les applications Bitwarden : extensions de navigateur, applications mobiles et de bureau. Léger (une base SQLite, très peu de mémoire), il convient bien à un VPS. Ce guide installe Vaultwarden 1.37.5 avec Docker Compose, publié en HTTPS sur https://nom.vps.heberghub.app, avec un jeton d'administration haché et des inscriptions fermées.

Ce qu'il vous faut

Dans notre essai, Vaultwarden occupait environ 12 Mo de mémoire au repos.

Le HTTPS est indispensable

Le coffre web chiffre et déchiffre vos données dans le navigateur, et les navigateurs n'autorisent ces fonctions que sur une page sécurisée. Votre VPS est publié en HTTPS sur nom.vps.heberghub.app : le certificat est géré par le frontal, et le VPS reçoit le trafic en HTTP sur son port 80, avec l'en-tête X-Forwarded-Proto: https. N'installez pas de certificat dans le VPS pour ce nom, et ouvrez toujours le coffre par son adresse https://.

1. Générer le jeton d'administration

La page /admin se protège par un mot de passe que Vaultwarden ne garde que sous forme hachée (argon2) :

bash
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
docker run --rm -it vaultwarden/server:1.37.5 /vaultwarden hash

Saisissez deux fois le mot de passe choisi pour l'administration. La commande affiche une ligne ADMIN_TOKEN='$argon2id$…' : copiez-la telle quelle, apostrophes comprises.

2. Le fichier .env

Créez /opt/vaultwarden/.env :

ini
# Adresse publique complète, en https
DOMAIN=https://nom.vps.heberghub.app
# true le temps de créer votre compte, puis false
SIGNUPS_ALLOWED=true
# Ligne affichée par la commande hash, apostrophes comprises
ADMIN_TOKEN='$argon2id$v=19$…'
# Envoi des e-mails : retirez les # et remplissez (section 6)
#SMTP_HOST=smtp.votre-messagerie.fr
#SMTP_PORT=465
#SMTP_SECURITY=force_tls
#[email protected]
#SMTP_PASSWORD=mot-de-passe-smtp
#[email protected]
bash
chmod 600 .env

Les apostrophes empêchent Docker Compose d'interpréter les $ du jeton.

3. Le fichier compose.yaml

yaml
services:
  vaultwarden:
    image: vaultwarden/server:1.37.5
    restart: unless-stopped
    env_file: .env             # DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, SMTP_…
    ports:
      - "80:80"                # le seul port publié : le frontal HTTPS arrive ici
    volumes:
      - data:/data             # base SQLite, pièces jointes, clés, config.json

volumes:
  data:

Vaultwarden écoute sur le port 80 du conteneur. Les notifications en temps réel (synchronisation immédiate entre vos appareils) passent par WebSocket sur ce même port, et le frontal accepte les WebSocket : rien à ajouter.

4. Premier lancement et création de votre compte

bash
docker compose up -d
docker compose logs vaultwarden | tail -n 3

La dernière ligne doit indiquer Rocket has launched from http://0.0.0.0:80. Ouvrez https://nom.vps.heberghub.app, cliquez sur Créez un compte et choisissez un mot de passe principal long. Personne ne peut le récupérer, ni vous, ni l'administrateur, ni HebergHub : vos données sont chiffrées avec lui.

Fermez ensuite les inscriptions : passez SIGNUPS_ALLOWED=false dans .env, puis relancez :

bash
docker compose up -d

Une nouvelle inscription est alors refusée (« Registration not allowed or user already exists »). Sans serveur d'envoi configuré, le lien Créez un compte reste affiché pour les personnes invitées, mais seule une adresse invitée peut s'inscrire.

5. La page d'administration

Ouvrez https://nom.vps.heberghub.app/admin et saisissez le mot de passe tapé à l'étape 1 (pas le hachage). La page permet notamment d'inviter un utilisateur (menu Users, formulaire Invite User) ; sans e-mail, la personne crée son compte depuis le coffre web avec l'adresse invitée.

Attention : un réglage enregistré depuis /admin est écrit dans config.json, dans le volume, et l'emporte sur .env. Choisissez un seul endroit pour chaque réglage.

6. Envoyer les e-mails

Vaultwarden envoie des e-mails pour les invitations, la vérification d'adresse, l'accès d'urgence, l'alerte de connexion depuis un nouvel appareil, l'indice du mot de passe principal et la connexion en deux étapes par code e-mail. Sur votre VPS, le port 25 est fermé en sortie (anti-spam) ; les ports 465 et 587 sont ouverts, avec un nombre de connexions par minute limité, ce qui suffit pour ces messages.

Retirez les # des lignes SMTP_ de .env et renseignez le serveur SMTP authentifié de votre messagerie ou d'un service d'envoi :

  • port 465 : SMTP_PORT=465 et SMTP_SECURITY=force_tls ;
  • port 587 : SMTP_PORT=587 et SMTP_SECURITY=starttls.

SMTP_HOST et SMTP_FROM vont ensemble : l'un sans l'autre empêche Vaultwarden de démarrer. Après docker compose up -d, le bouton Send test email de la section SMTP de /admin vérifie l'envoi.

7. Configurer les applications Bitwarden

Dans l'extension, l'application mobile ou de bureau, choisissez un serveur auto-hébergé avant de vous connecter, et saisissez https://nom.vps.heberghub.app.

Votre propre domaine : ajoutez-le dans l'espace client (TXT _heberghub-verify et CNAME vers nom.vps.heberghub.app, voir Relier un nom de domaine). Il arrive lui aussi en HTTP sur le port 80. Mettez-le dans DOMAIN, relancez docker compose up -d, puis changez l'adresse du serveur dans vos applications.

8. Mettre à jour

Lisez les notes de version sur la page du projet, sauvegardez (section suivante), remplacez 1.37.5 par la nouvelle version dans compose.yaml, puis :

bash
docker compose pull && docker compose up -d

9. Sauvegarder

Les VPS ne sont pas sauvegardés automatiquement, et un coffre de mots de passe perdu ne se reconstitue pas. Le volume contient la base db.sqlite3, les pièces jointes (attachments), les clés rsa_key* et config.json. Vaultwarden copie sa base proprement avec sa propre commande :

bash
cd /opt/vaultwarden
docker compose exec vaultwarden /vaultwarden backup
tar -czf vaultwarden-$(date +%F).tar.gz -C /var/lib/docker/volumes/vaultwarden_data/_data .

Le chemin vaut pour le dossier /opt/vaultwarden (docker volume ls donne le nom du volume). La première commande écrit db_AAAAMMJJ_HHMMSS.sqlite3 dans le volume ; l'archive l'emporte avec le reste. Pour restaurer : arrêtez Vaultwarden, remettez les fichiers, renommez cette copie en db.sqlite3 et supprimez db.sqlite3-wal. Copiez l'archive et .env hors du VPS, dans un endroit protégé : config.json et .env peuvent contenir le mot de passe SMTP. Supprimez de temps en temps les anciennes copies db_*.sqlite3 du volume.

Plusieurs applications sur le VPS

Si une autre application doit répondre sur le port 80, placez un relais (Caddy, nginx ou Traefik) sur ce port : il répartit par nom de domaine, et Vaultwarden ne publie plus de port. Le relais doit transmettre les en-têtes Upgrade et Connection des WebSocket. Voir Installer Docker sur un VPS KVM.

Problèmes fréquents

Symptôme Cause probable
Le coffre web ne s'ouvre pas ou reste en erreur Ouvert en http:// ou par une adresse sans HTTPS : passez par https://nom.vps.heberghub.app.
The "argon2id" variable is not set au lancement, /admin refuse le mot de passe Apostrophes absentes autour de ADMIN_TOKEN dans .env.
SIGNUPS_ALLOWED modifié sans effet Réglage déjà enregistré depuis /admin (config.json) : changez-le là.
Le conteneur redémarre en boucle après l'ajout du SMTP SMTP_HOST sans SMTP_FROM (ou l'inverse) : docker compose logs vaultwarden.
E-mail de test en échec Port 25 utilisé : passez par 465 ou 587 avec authentification.
Les modifications n'apparaissent pas tout de suite sur les autres appareils WebSocket bloqué par un relais qui ne transmet pas Upgrade et Connection.

Besoin d'aide ?

Ouvrez un ticket depuis votre espace client avec le nom du VPS et les dernières lignes de docker compose logs vaultwarden. Ne transmettez jamais votre mot de passe principal, le contenu de .env ni votre jeton d'administration.

Retour à la documentation