- Guide d'installation détaillé étape par étape - Instructions de génération et hashage du token admin avec Argon2 - Configuration de sécurité (capabilities, rate limiting, limites ressources) - Procédures de backup/restore manuelles et automatiques - Guide de maintenance (mises à jour, logs, healthcheck) - Section dépannage avec solutions aux problèmes courants - Recommandations de sécurité additionnelle (Fail2Ban, 2FA) - Diagramme d'architecture et liens ressources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
7.3 KiB
Vaultwarden Docker Deployment
Déploiement sécurisé de Vaultwarden (serveur Bitwarden open-source) avec Docker Compose et Traefik.
Caractéristiques
- Sécurité renforcée : Capabilities Linux limitées, rate limiting, inscriptions désactivées
- HTTPS automatique : Certificats Let's Encrypt via Traefik
- Limites de ressources : Protection contre les fuites mémoire
- Health checks : Surveillance automatique de l'état du service
- Configuration SMTP : Récupération de mot de passe par email
Prérequis
- Docker et Docker Compose installés
- Traefik configuré avec le réseau
traefik-net - Nom de domaine pointant vers votre serveur
- Serveur SMTP (optionnel, pour les emails)
Installation
1. Cloner le projet
git clone <votre-repo>
cd agence66-vaultwarden
2. Configuration
Copier et éditer le fichier d'environnement :
cp .env.example .env
nano .env
3. Variables d'environnement
Configurer les variables dans .env :
# Domaine public de votre instance
DOMAIN=vault.example.com
# Token admin (IMPORTANT : générer un token fort)
ADMIN_TOKEN=<généré-avec-openssl-rand-base64-48>
# Configuration SMTP (optionnel)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_FROM=vaultwarden@example.com
SMTP_USER=votre-utilisateur
SMTP_PASSWORD=votre-mot-de-passe
Générer un token admin sécurisé
Étape 1 : Générer un token aléatoire
openssl rand -base64 48
Étape 2 : Hasher le token (RECOMMANDÉ)
Pour une sécurité maximale, il est fortement recommandé de hasher le token avec Argon2 avant de le mettre dans .env.
Option A : Avec Docker (pas besoin d'installer argon2)
# Remplacer YOUR_TOKEN par le token généré à l'étape 1
echo -n "YOUR_TOKEN" | docker run --rm -i vaultwarden/server:latest \
/vaultwarden hash --preset owasp
Option B : Avec argon2 installé localement
# Installation (Debian/Ubuntu)
sudo apt install argon2
# Hasher le token
echo -n "YOUR_TOKEN" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
Utilisation du hash
- Copiez le hash généré (commence par
$argon2id$...) - Mettez-le dans
.envcomme ceci :
ADMIN_TOKEN=$argon2id$v=19$m=65540,t=3,p=4$base64hash...
- Pour vous connecter au panel admin, utilisez le token en clair (celui de l'étape 1), pas le hash
Pourquoi hasher ?
- ✅ Sécurité : Si quelqu'un accède à votre
.env, il ne peut pas utiliser le hash directement - ✅ Protection : Le hash ne peut pas être inversé pour retrouver le token
- ✅ Best practice : Recommandé par la documentation officielle Vaultwarden
Documentation officielle : Securing the admin token
4. Créer le répertoire de données
mkdir -p data
chmod 700 data
5. Démarrer le service
docker compose up -d
6. Vérifier le statut
docker compose ps
docker compose logs -f vaultwarden
Accès
- Interface utilisateur :
https://votre-domaine.com - Panel admin :
https://votre-domaine.com/admin- Token requis (celui dans
.env)
- Token requis (celui dans
Configuration de sécurité
Capabilities Linux
Le container utilise le principe du moindre privilège :
- Toutes les capabilities sont supprimées (
cap_drop: ALL) - Seules les capabilities nécessaires sont ajoutées :
CHOWN: Changer propriétaire des fichiersSETGID: Changer group IDSETUID: Changer user ID
Rate Limiting
Protection contre le brute-force :
- Connexions : 10 tentatives max par 60 secondes
- Emails : 3 tentatives max, expiration 10 minutes
Limites de ressources
- Mémoire max : 256 MB
- CPU max : 50% d'un core
- Mémoire réservée : 128 MB
Backup
Backup manuel
# Arrêter le service
docker compose down
# Créer une archive datée
tar -czf backup-vaultwarden-$(date +%Y%m%d-%H%M%S).tar.gz data/
# Redémarrer le service
docker compose up -d
Backup automatique (cron)
Créer un script /usr/local/bin/backup-vaultwarden.sh :
#!/bin/bash
BACKUP_DIR="/path/to/backups"
cd /path/to/agence66-vaultwarden
docker compose exec vaultwarden sqlite3 /data/db.sqlite3 ".backup /data/db-backup.sqlite3"
tar -czf "${BACKUP_DIR}/vaultwarden-$(date +%Y%m%d-%H%M%S).tar.gz" data/
find "${BACKUP_DIR}" -name "vaultwarden-*.tar.gz" -mtime +30 -delete
Ajouter au crontab :
0 2 * * * /usr/local/bin/backup-vaultwarden.sh
Restore
# Arrêter le service
docker compose down
# Supprimer les données actuelles
rm -rf data/*
# Extraire le backup
tar -xzf backup-vaultwarden-YYYYMMDD-HHMMSS.tar.gz
# Redémarrer
docker compose up -d
Maintenance
Mise à jour
# 1. Backup (voir section Backup)
# 2. Mettre à jour l'image dans docker-compose.yml
# Remplacer : image: vaultwarden/server:latest
# Par : image: vaultwarden/server:1.31.0 (version désirée)
# 3. Télécharger la nouvelle image
docker compose pull
# 4. Recréer le container
docker compose up -d
# 5. Vérifier les logs
docker compose logs -f vaultwarden
Logs
# Temps réel
docker compose logs -f vaultwarden
# 100 dernières lignes
docker compose logs --tail=100 vaultwarden
Healthcheck
# Vérifier l'état
docker inspect vaultwarden --format='{{.State.Health.Status}}'
# Doit retourner : healthy
Dépannage
Le service ne démarre pas
# Vérifier les logs
docker compose logs vaultwarden
# Vérifier le réseau Traefik
docker network ls | grep traefik-net
# Créer le réseau si nécessaire
docker network create traefik-net
Erreur certificat SSL
Vérifier que :
- Le domaine pointe bien vers le serveur (DNS)
- Le port 80 est ouvert (Let's Encrypt challenge)
- Traefik est correctement configuré
Impossible de se connecter
# Vérifier que le service répond
curl -I http://localhost:80/alive
# Vérifier les labels Traefik
docker inspect vaultwarden | grep traefik
Problème de performance
Ajuster les limites dans docker-compose.yml :
deploy:
resources:
limits:
memory: 512M # Augmenter si nécessaire
cpus: '1.0'
Sécurité additionnelle (recommandé)
Fail2Ban
Installer Fail2Ban pour bloquer les IPs suspectes :
# /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =
Authentification 2FA
Configurer 2FA pour tous les utilisateurs via l'interface web.
Audit régulier
Vérifier régulièrement :
- Panel admin → View logs
- Utilisateurs actifs
- Appareils connectés
Architecture
Internet
↓
Traefik (reverse proxy)
↓ HTTPS
Vaultwarden (Docker)
↓
./data (SQLite + attachments)
Ressources
Licence
Ce projet de déploiement est libre d'utilisation. Vaultwarden est sous licence GPL-3.0.