Introduction
Bitwarden cloud, c'est bien. Mais payer 10 €/mois pour de la famille ou avoir vos secrets sur un serveur tiers ne vous tente pas. Vaultwarden est l'alternative self-hosted :
- API compatible Bitwarden à 100%
- Tourne en ~50 Mo de RAM
- Tous les clients Bitwarden officiels fonctionnent (web, mobile iOS/Android, extensions navigateur, CLI)
- Fonctions premium gratuites : TOTP intégré, partage, fichiers joints
- Famille / équipe (organizations) sans limite
Un VPS à 5 €/mois suffit pour 50 users.
Prérequis
- VPS Linux (Debian/Ubuntu recommandé) avec Docker installé
- Nom de domaine pointant vers le VPS (ex:
vault.votre-domaine.fr) - Reverse proxy (Nginx, Caddy ou Traefik) avec HTTPS
Étape 1 : Préparer le serveur
sudo mkdir -p /opt/vaultwarden/data
cd /opt/vaultwarden
Étape 2 : docker-compose.yml
sudo nano docker-compose.yml
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.votre-domaine.fr"
SIGNUPS_ALLOWED: "true"
INVITATIONS_ALLOWED: "true"
ADMIN_TOKEN: "VOTRE_TOKEN_ADMIN_GENERE"
WEBSOCKET_ENABLED: "true"
LOG_FILE: "/data/vaultwarden.log"
LOG_LEVEL: "warn"
SMTP_HOST: "smtp.example.com"
SMTP_FROM: "[email protected]"
SMTP_PORT: 587
SMTP_SECURITY: "starttls"
SMTP_USERNAME: "votre_smtp_user"
SMTP_PASSWORD: "votre_smtp_password"
volumes:
- ./data:/data
ports:
- "127.0.0.1:8080:80"
- "127.0.0.1:3012:3012"
Générez un admin token :
openssl rand -base64 48
Collez-le dans ADMIN_TOKEN.
⚠️ Une fois vos comptes créés, mettez SIGNUPS_ALLOWED: "false".
Étape 3 : Démarrer
sudo docker compose up -d
sudo docker compose logs -f
Vous devez voir :
Rocket has launched from http://0.0.0.0:80
Étape 4 : Reverse proxy Nginx + Let's Encrypt
sudo nano /etc/nginx/sites-available/vaultwarden
server {
listen 80;
listen [::]:80;
server_name vault.votre-domaine.fr;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name vault.votre-domaine.fr;
ssl_certificate /etc/letsencrypt/live/vault.votre-domaine.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vault.votre-domaine.fr/privkey.pem;
client_max_body_size 128M;
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;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:8080;
}
}
sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
sudo certbot --nginx -d vault.votre-domaine.fr
sudo nginx -t && sudo systemctl reload nginx
Étape 5 : Créer votre compte
Ouvrez https://vault.votre-domaine.fr → Créer un compte. Choisissez un mot de passe maître fort et impossible à oublier.
Étape 6 : Installer les clients
- Extension navigateur : Chrome / Firefox / Edge → Bitwarden → Settings → Server URL :
https://vault.votre-domaine.fr - Mobile iOS / Android : Bitwarden app → Paramètres → URL du serveur
- Desktop : Settings → Server URL
- CLI :
bw config server https://vault.votre-domaine.fr
Étape 7 : Activer 2FA TOTP
- Web UI → Account Settings → Two-step Login
- Cliquez sur Authenticator app
- Scannez le QR avec Google Authenticator / Authy / Aegis
- Notez les codes de récupération
Étape 8 : Désactiver les inscriptions
SIGNUPS_ALLOWED: "false"
sudo docker compose up -d
Étape 9 : Page admin
Ouvrez https://vault.votre-domaine.fr/admin → entrez l'ADMIN_TOKEN. Vous pouvez :
- Lister / supprimer les users
- Inviter par email
- Voir les organisations
- Consulter les logs
Étape 10 : Backups quotidiens
sudo nano /usr/local/bin/backup-vaultwarden.sh
#!/bin/bash
DATE=$(date +%Y-%m-%d)
DEST=/backup/vaultwarden
mkdir -p "$DEST"
docker compose -f /opt/vaultwarden/docker-compose.yml stop
tar czf "$DEST/vaultwarden-$DATE.tar.gz" -C /opt/vaultwarden data/
docker compose -f /opt/vaultwarden/docker-compose.yml start
find "$DEST" -name "vaultwarden-*.tar.gz" -mtime +30 -delete
sudo chmod +x /usr/local/bin/backup-vaultwarden.sh
echo "0 3 * * * /usr/local/bin/backup-vaultwarden.sh" | sudo crontab -
Étape 11 : Migration vers PostgreSQL (gros volumes)
environment:
DATABASE_URL: "postgresql://vault:password@db:5432/vaultwarden"
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: vault
POSTGRES_PASSWORD: password
POSTGRES_DB: vaultwarden
volumes:
- ./pgdata:/var/lib/postgresql/data
Étape 12 : Whitelist de domaines
SIGNUPS_DOMAINS_WHITELIST: "verycloud.fr"
Étape 13 : Performance
- 100 users : VPS 1 vCPU / 1 Go RAM
- 1000 users : VPS 2 vCPU / 2 Go RAM + PostgreSQL
- Sync : ~10 Ko (faible)
Dépannage
"Trouble connecting to your server"
curl -I https://vault.votre-domaine.fr
Vérifiez certificat SSL valide.
Notifications push KO
WebSockets cassés. Vérifiez la config Nginx pour /notifications/hub.
Admin page 401
Vérifiez ADMIN_TOKEN puis redémarrez le container.
Email d'invitation non envoyé
docker compose logs vaultwarden | grep -i smtp
Test : page admin → Send test email.
Commandes utiles
docker compose ps
docker compose logs -f vaultwarden
docker compose exec vaultwarden sqlite3 /data/db.sqlite3 "SELECT email FROM users;"
sudo du -sh /opt/vaultwarden/data/
docker compose exec vaultwarden sqlite3 /data/db.sqlite3 ".backup /data/backup.db"
docker compose pull && docker compose up -d
Conclusion
Vaultwarden vous offre :
- Bitwarden complet sans abonnement
- 100% de contrôle sur vos données
- Fonctions premium gratuites (TOTP, partage, fichiers)
Pour aller plus loin :
- Activez le SSO via OIDC pour vos équipes
- Mettez en place du monitoring uptime
- Combinez avec Vault (HashiCorp) pour les secrets infra
Ressources
- Wiki officiel Vaultwarden : https://github.com/dani-garcia/vaultwarden/wiki
- Image Docker : https://hub.docker.com/r/vaultwarden/server
- Documentation Bitwarden : https://bitwarden.com/help/
- Clients Bitwarden : https://bitwarden.com/download/


















