BeauTroll e11dd6fdbf Ajouter documentation complète dans le README
- 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>
2025-12-22 19:12:43 +01:00
2025-12-22 18:44:23 +01:00
2025-12-22 18:16:13 +01:00

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

  1. Copiez le hash généré (commence par $argon2id$...)
  2. Mettez-le dans .env comme ceci :
ADMIN_TOKEN=$argon2id$v=19$m=65540,t=3,p=4$base64hash...
  1. 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)

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 fichiers
    • SETGID : Changer group ID
    • SETUID : 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.

Description
No description provided
Readme 33 KiB