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
- Un VPS KVM : Docker ne s'installe correctement que sur une machine virtuelle, pas sur un VPS LXC.
- Docker et Docker Compose installés : voir Installer Docker sur un VPS KVM.
- Un accès SSH par clé (Première connexion SSH) et un VPS sécurisé (Sécuriser un VPS Debian).
- Le port 80 libre.
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) :
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
docker run --rm -it vaultwarden/server:1.37.5 /vaultwarden hashSaisissez 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 :
# 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]chmod 600 .envLes apostrophes empêchent Docker Compose d'interpréter les $ du jeton.
3. Le fichier compose.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
docker compose up -d
docker compose logs vaultwarden | tail -n 3La 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 :
docker compose up -dUne 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=465etSMTP_SECURITY=force_tls; - port 587 :
SMTP_PORT=587etSMTP_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 :
docker compose pull && docker compose up -d9. 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 :
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.