Synology [Tuto] Installer Vaultwarden avec une sauvegarde automatique de la base de données

Statut
N'est pas ouverte pour d'autres réponses.
Au secours @MilesTEG1 !
J'ai incorporé au docker-compose la partie concernant les backups de ton tuto et quand je fais "docker-compose up -d", j'ai droit au message suivant :
validating /volume1/docker/vaultwarden/docker-compose.yml: services.vaultwarden_backup.depends_on.condition must be a mapping
Le docker-compose :
vaultwarden_backup: # Voir : https://github.com/ttionya/vaultwarden-backup
image: ttionya/vaultwarden-backup:latest
container_name: vaultwarden_backup
restart: always
networks:
- la_vault_bridge
volumes:
- ./data/:/data/
# Chemin d'accès pour stocker le backup et la configuration rclone
- /volume1/docker/vaultwarden/vaultwarden-backup/config:/config
- /volume1/docker/vaultwarden/vaultwarden-backup/rclone_backup:/rclone_backup
depends_on:
vaultwarden:
condition: service_healthy

environment:
J'ai raté quelque chose ?
 
@Mychkine aurais tu changé les noms des conteneurs ? Si oui il faut changer la partie depends-on du conteneur de backup.

Sinon pourrais-tu mettre ton docker-compose dans une balise de code en yaml ? Car là je ne vois pas l’indentation nécessaire au fichier.
 
Bonjour @MilesTEG1 et merci pour ton aide,

Je n'ai pas changé le nom du container Vaultwarden.
services:
vaultwarden:
image: vaultwarden/server:latest # https://github.com/dani-garcia/vaultwarden
container_name: vaultwarden
J'ai par contra changé le nom vaultwarden_backup_ttionya en vaultwarden_backup mais je l'ai fait partout sauf pour l'image
image: ttionya/vaultwarden-backup:latest.

Sinon pourrais-tu mettre ton docker-compose dans une balise de code en yaml ? Car là je ne vois pas l’indentation nécessaire au fichier.
Il y a eu un problème de copier/colle dans mon post. La bonne version, c'est ça :
vaultwarden_backup: # Voir : https://github.com/ttionya/vaultwarden-backup
image: ttionya/vaultwarden-backup:latest
container_name: vaultwarden_backup
restart: always
networks:
- la_vault_bridge
volumes:
- ./data/:/data/
# Chemin d'accès pour stocker le backup et la configuration rclone, voir https://github.com/ttionya/vaultwarden-backup
- /volume1/docker/vaultwarden/vaultwarden-backup/config:/config
- /volume1/docker/vaultwarden/vaultwarden-backup/rclone_backup:/rclone_backup
depends_on:
vaultwarden:
condition: service_healthy

environment:
Veux-tu que je poste le contenu intégral du docker-compose ?
 
@Mychkine
1683990450244.png

Et si c’est ça que tu utilises ton copier/coller est foireux car il n’y a aucune indentation… et ça c’est nécessaire.
Rassure moi tu en mets bien des indentations dans ton fichier ?
Comme le fichier complet expurgé des données confidentielles.
 
Bonjour @MilesTEG1,
Rassure moi tu en mets bien des indentations dans ton fichier ?
Je te rassure, je mets les identations dans le fichier :)
Mais elles disparaissent quand je les colle dans mon post sur le forum et je comprends pourquoi d'après ta réponse. Donc je recommence.

YAML:
version: '3.9'
services:
   vaultwarden:
   image: vaultwarden/server:latest    # https://github.com/dani-garcia/vaultwarden
   container_name: vaultwarden
   restart: unless-stopped
   volumes:                            # LE VOLUME DATA DOIT ÊTRE CRÉÉ PRÉALABLEMENT
      - ./data/:/data/
   networks:
      - vault_bridge
   ports:
      - 3012:3012/tcp
      - 3014:80/tcp
   environment:
      - PUID=1031          # Utiliser la commande (en SSH) : id user
      - PGID=100           # ne pas mettre les PUID et PGID d'un admin
      - TZ=Europe/Paris

      - LOG_FILE=/data/log
      - LOG_LEVEL=warn
      - EXTENDED_LOGGING=true

      # Nécessaire pour activer le 2FA pour la connexion au serveur Vaultwarden
      # Il est possible de spécifier un port de connexion dans l'URL. Le https:// est obligatoire
      - DOMAIN=https://vaultwarden.xxx.fr
      # Pour activer la récupération des icones des IP LAN, il faut mettre sur false la variable
      - ICON_BLACKLIST_NON_GLOBAL_IPS=false      # = true par défaut
      # nombre max de demandes autorisées lors d'une série de tentatives de connexion ou de tentatives
      # à deux facteurs tout en tenant compte du temps spécifié dans LOGIN_RATELIMIT_SECONDS
      - LOGIN_RATELIMIT_MAX_BURST=5
      # nombre moyen de secondes entre les demandes de connexions venant de la même IP avant que
      # Vaultwarden ne limite le nombre de connexions en fonction de LOGIN_RATELIMIT_MAX_BURST
      # compte-tenu des réglages on limite les tentatives de connexions à 5 en une minite
      - LOGIN_RATELIMIT_SECONDS=60
      # mêmes variables que LOGIN_RATELIMIT_SECONDS et LOGIN_RATELIMIT_MAX_BURST mais pour le panneau
      # de l'administrateur
      - ADMIN_RATELIMIT_MAX_BURST=5
      - ADMIN_RATELIMIT_SECONDS=60
      # L'utilisation d'Argon2 est recommandée
      # POUR DÉSACTIVER LE PANNEAU ET EN INTERDIRE L'ACCÈS IL FAUT COMMENTER LA LIGNE (CONSEILLÉ)
      - ADMIN_TOKEN=$$argon2id$$v=*********************************************************************************************
      # En minutes
      - ADMIN_SESSION_LIFETIME=20
      # détermine si les utilisateurs sont autorisés à créer des envois Bitwarden, une forme de partage des informations
      # d'identification
      - SENDS_ALLOWED=false
      # utile en cas de décès, s'applique à tous, les utilisateurs
      - EMERGENCY_ACCESS_ALLOWED=false
      # si false, le coffre-fort de Vaultwarden est inaccessible et donc inviolable
      # ON PEUT METTRE LA VARIABLE À FALSE AVANT DE REDÉMARRER VAULTWARDEN UNE FOIS LES TESTS RÉALISÉS
      - WEB_VAULT_ENABLED=true
      # false signifie que les nouveaux utilisateurs ne pourront créer un compte qu'après avoir reçu une invitation de
      # l'administrateur (à partir du panneau qui lui est réservé)
      - SIGNUPS_ALLOWED=false
      # tout nouveau compte doit comporter une adresse e-mail qui sera vérifiée faute de quoi le compte ne sera pas créé
      - SIGNUPS_VERIFY=true
      # délai d'attente entre deux vérifications d'e-mail si la précédente a échiué (30 minutes)
      - SIGNUPS_VERIFY_RESEND_TIME=1800
      # nombre max de tentatives de validation d'e-mail
      - SIGNUPS_VERIFY_RESEND_LIMIT=5
      # domaines à partir desquels il est possible de créer un compte snas vérification d'e-mail même
      # si SIGNUPS_ALLOWED = false, ne peut intéresser que les organisations
      # - SIGNUPS_DOMAINS_WHITELIST=xxx.fr
      # peut-on indiquer un indice du mot de passe
      - PASSWORD_HINTS_ALLOWED=false
      # est affiché sur la page Web de Vaultwarden s'il n'existe pas d'adresse e-mail
      - SHOW_PASSWORD_HINT=false
      # Vidage de la corbeille au bout de 7 jours
      - TRASH_AUTO_DELETE_DAYS=7
      # temps au bout duquel on considère que la saisie du code 2FA a échoué, un e-mail est alors envoyé
      - INCOMPLETE_2FA_TIME_LIMIT=2

      # réglages SMTP
      - SMTP_HOST=smtp.free.fr
      - SMTP_FROM=vaultwarden@xxx.fr
      - SMTP_FROM_NAME=Vaultwarden
      - SMTP_SECURITY=force_tls
      - SMTP_PORT=465
      - SMTP_USERNAME=xxx
      - SMTP_PASSWORD=*************
      - SMTP_ACCEPT_INVALID_CERTS=false
      # lors d'une connexion, un e-mail est envoyé et si l'envoi échoue la connexion est refusée
      - REQUIRE_DEVICE_EMAIL=false


   vaultwarden_backup:              # Voir : https://github.com/ttionya/vaultwarden-backup
      image: ttionya/vaultwarden-backup:latest
      container_name: vaultwarden_backup
      restart: always
      networks:
         - vault_bridge
      volumes:
         - ./data/:/data/
         # Chemin d'accès pour stocker le backup et la configuration rclone, voir https://github.com/ttionya/vaultwarden-backup
         - /volume1/docker/vaultwarden/vaultwarden-backup/config:/config
         - /volume1/docker/vaultwarden/vaultwarden-backup/rclone_backup:/rclone_backup
      depends_on:
         vaultwarden:
         condition: service_healthy

      environment:
         - DATA_DIR=/data                    # Dossier de données de Vaultwarden monté avec les volumes
         - RCLONE_REMOTE_NAME=Backup_Syno    # Nom de la config rclone utilisée (voir note plus bas)
         - RCLONE_REMOTE_DIR=/rclone_backup/ # Dossier qui doit monté avec les volumes

         # Utiliser soit SCHEDULE soit INTERVAL (ce dernier en sec)
         # Pour SCHEDULE : https://crontab.guru/#0_22_*_*_*
         # Dans la ligne suivante, on programme l'exécution tous les jours à 20h
         - CRON=0 20 * * *
         - ZIP_ENABLE=TRUE
         - ZIP_PASSWORD=WHEREISMYPASSWORD?
         - ZIP_TYPE=7z
         - BACKUP_FILE_DATE_SUFFIX=--%Hh%Mm%Ss
         - BACKUP_KEEP_DAYS=7

         - TIMEZONE=Europe/Paris
 
@Mychkine Ha c'est beaucoup mieux avec les indentations ;)
Désolé, WE = parfois loin du clavier ^^ et sur smartphone, c'est pas pratique ;)
J'ai vu ton erreur dans la partie vaultwarden_backup :
  • Erreur d'indentation sur le condition: service_healthy :
    YAML:
       vaultwarden_backup:              # Voir : https://github.com/ttionya/vaultwarden-backup      image: ttionya/vaultwarden-backup:latest
          container_name: vaultwarden_backup
          restart: always
          networks:
             - vault_bridge
          volumes:
             - ./data/:/data/
             # Chemin d'accès pour stocker le backup et la configuration rclone, voir https://github.com/ttionya/vaultwarden-backup
             - /volume1/docker/vaultwarden/vaultwarden-backup/config:/config
             - /volume1/docker/vaultwarden/vaultwarden-backup/rclone_backup:/rclone_backup
          depends_on:
             vaultwarden:
             condition: service_healthy
  • Avec correction de l'indentation :
    YAML:
       vaultwarden_backup:              # Voir : https://github.com/ttionya/vaultwarden-backup      image: ttionya/vaultwarden-backup:latest
          container_name: vaultwarden_backup
          restart: always
          networks:
             - vault_bridge
          volumes:
             - ./data/:/data/
             # Chemin d'accès pour stocker le backup et la configuration rclone, voir https://github.com/ttionya/vaultwarden-backup
             - /volume1/docker/vaultwarden/vaultwarden-backup/config:/config
             - /volume1/docker/vaultwarden/vaultwarden-backup/rclone_backup:/rclone_backup
          depends_on:
             vaultwarden:
                 condition: service_healthy

Normalement ça devrait fonctionner maintenant.


Faut que je mette mon sujet à jour avec cette histoire de secure_token ;)
Je viens de créer le miens.

Je me suis fait un petit script pour créer le hash argon2, ça évite de coller dans une page internet mon token...
et ça évite aussi que le token soit enregistré dans le .xxxxx_history du shell.
Si ça intéresse du monde, voilà : c'est un script qui fonctionne avec le shell ZSH, mais testé aussi avec les shebangs suivant : #!/bin/sh et #!/bin/bash. Modifier le shebang à votre convenance.
Seul prérequis : avoir argon2 d'installé.
Sur macos, c'est facile via homebrew. Ailleurs, aucune idée XD

Bash:
#!/bin/zsh
# Source : https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#using-argon2
# Nécessite argon2 : brew install argon2      ou : brewi argon2
function print_argon2_output() {
    printf "\t\t* for docker/podman CLI command:\n\n\t\t\t%s\n\n" ${SECURE_ADMIN_TOKEN}
    printf "\t\t* for docker-compose.yml file:\n\n\t\t\t%s\n\n" ${SECURE_ADMIN_TOKEN//\$/\$\$}
    printf "\n"
}
# On récupère le TOKEN via un copier/coller de l'utilisateur
printf "%s" "Enter (paste) ADMIN_TOKEN: "
read ADMIN_TOKEN
printf "The secure ADMIN_TOKEN is:\n"
# Pour le remplacement de $ par $$ pour le docker-compose, voir : https://unix.stackexchange.com/a/700490
# Using the Bitwarden defaults
SECURE_ADMIN_TOKEN=$(printf "${ADMIN_TOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4)
printf "\t- Using the Bitwarden defaults:\n"
print_argon2_output
# Using the OWASP minimum recommended settings
SECURE_ADMIN_TOKEN=$(printf "${ADMIN_TOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4)
printf "\t- Using the OWASP minimum recommended settings:\n"
print_argon2_output

Précision : le script donne une chaine directement utilisable avec le docker-compose, et aussi la version utilisable en ligne de commande via docker run.

Edit : j'ai mis à jour le script pour clarifier tout ça, et aussi corriger un oubli de modification de commande.
Edit2 : MAJ avec l'utilisation de printf au lieu de echo -n car ça peut occasionner des erreurs avec certains shells.
 
Dernière édition:
Bonjour @MilesTEG1,
Le langage YAML est très exigeant en matière de balises ! Je vais corriger de ce pas le docker-compose, merci.
À propos du mot de passe du portail d'administration, je me suis fait une belle frayeur car je ne savais plus où je l'avais caché. Je l'ai retrouvé Dieu merci.

Je souhaiterais te contacter en privé concernant la campagne de dons mais je n'ai pas trouvé comment faire.
 
Bonjour @MilesTEG1,
Le langage YAML est très exigeant en matière de balises ! Je vais corriger de ce pas le docker-compose, merci.
À propos du mot de passe du portail d'administration, je me suis fait une belle frayeur car je ne savais plus où je l'avais caché. Je l'ai retrouvé Dieu merci.

Je souhaiterais te contacter en privé concernant la campagne de dons mais je n'ai pas trouvé comment faire.
Oui le YAML c'est très très pointilleux sur l'indentation !
C'est un super moyen de bien faire les choses ^^ Mais aussi c'est un bon moyen de perdre des cheveux quand on ne voit pas le soucis d'indentation ;)

Pour ta dernière remarque, je ne suis pas responsable de cette partie. Il faut contacter @FX Cachem 😇
 
  • J'aime
Réactions: CyberFR
Si je mets trois tabulations sous forme d'espaces au lieu de deux, ça pose problème ?
Heu... Mes tabulations sont des espaces dans VSCode...
Honnêtement je ne sais pas ce que ça donnerait si on utilisait de vraies tabulations... Essaye et dit nous 😁
 
Bonjour @MilesTEG1,
Je vois dans le log de Vaultwarden beaucoup d'alertes de ce type qui sont liées à mes connexions sur le Mac.
[ERROR] 2FA token not provided
J'ai fait un essai tout à l'heure et j'ai rentré l'e-mail et le mot de passe corrects, j'ai fourni le bon code 2FA, le tout dans les délais paramétrés pour l'application. Et malgré cela le message d'erreur a été généré dans le log. Ce qui est paradoxal c'est que j'ai pu malgré tout accéder au portail de l'application.
Je n'y comprends rien.
 
Je vois dans le log de Vaultwarden beaucoup d'alertes de ce type qui sont liées à mes connexions sur le Mac.

J'ai fait un essai tout à l'heure et j'ai rentré l'e-mail et le mot de passe corrects, j'ai fourni le bon code 2FA, le tout dans les délais paramétrés pour l'application. Et malgré cela le message d'erreur a été généré dans le log. Ce qui est paradoxal c'est que j'ai pu malgré tout accéder au portail de l'application.
Je n'y comprends rien.
Salut @Mychkine
Alors, pour le code 2FA, est-ce que tu as coché cette case lorsque tu t'es connecté la première fois ? (ou une fois suivante)
1684242487173.png

Déconnecte-toi puis vide les cookies du site.
Rente une connexion, et normalement tu devrais avoir la demande de 2FA.

Quant à l'erreur [error][ERROR] 2FA token not provided, je l'ai moi aussi.
J'ai fait l'essai après avoir supprimé les cookies, et effacé le fichier log (fiat une copie avant).
J'ai le même message d'erreur avant même de coller/valider le code 2FA dans la case adéquate.

1684243221008.png
Une fois le code TOTP collé (case "Resté connecté" cochée), et connecté, j'ai eu ce message :
Code:
[2023-05-16 15:20:32.940][vaultwarden::api::core::two_factor::authenticator][WARN] TOTP Time drift detected. The step offset is -1

Bref, je ne sais pas si c'est un comportement normal...
Mais tant que le code est demandé la première fois, et au bout du délai paramétré dans le docker-compose, ça devrait être bon.
 
@MilesTEG1 a dit
Alors, pour le code 2FA, est-ce que tu as coché cette case lorsque tu t'es connecté la première fois ? (ou une fois suivante)
Il est sûr que je l'ai côchée de temps en temps puisque je fais une migration manuelle de 1Password vers VaultWarden pour ne pas polluer ce dernier et c'est LONG.
Je vide toujours le cache du navigateur avant d'accéder au panneau de Vaultwarden.

Une fois le code TOTP collé (case "Resté connecté" cochée), et connecté, j'ai eu ce message :
Moi je ne l'ai pas pour la simple raison que le niveau du log est réglé sur erreur. Vaultwarden est trop bavard 😍

Si tu as les mêmes messages que moi, alors je ne m'inquiète pas. Merci.
 
  • J'aime
Réactions: MilesTEG
Petite MAJ du script pour générer le hash du toekn d'admin :
(doit fonctionner avec ZSH mais aussi BASH).

Bash:
#!/bin/zsh
#
# Version : 1.2
#
# Source : https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#using-argon2
# Nécessite argon2 / Need argon2 : brew install argon2      ou / or : brewi argon2


# ~~~~~~~ Some functions definitions ~~~~~~ #

function yes_or_no {
    # Source : https://stackoverflow.com/a/29436423/17694638
    #    and : https://linuxconfig.org/bash-script-yes-no-prompt-example
    #    and : https://9to5answer.com/how-can-i-prompt-for-yes-no-style-confirmation-in-a-zsh-script
    while true; do
        if [[ "${SHELL}" == *"zsh"* ]]; then
            # SHELL = ZSH
            read -q "REPLY?$* [y/n] : "
        elif [[ "${SHELL}" == *"bash"* ]]; then
            # SHELL = BASH
            read -p "$* [y/n]: " REPLY
        fi
        printf "\n"
        case $REPLY in
        [Yy]) return 0 ;;
        [Nn])
            # echo "Aborted"
            return 1
            ;;
        *) printf "Invalid response!" ;;
        esac
    done
}

function print_argon2_output() {
    printf "\t\t* for docker/podman CLI command:\n\n\t\t\t%s\n\n" ${SECURE_ADMIN_TOKEN}
    printf "\t\t* for docker-compose.yml file:\n\n\t\t\t%s\n\n" ${SECURE_ADMIN_TOKEN//\$/\$\$}
    printf "\n"
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #

# ~~~~~~~~~~~~~~ Main script ~~~~~~~~~~~~~~ #

# Check if argon2 is installed
if [ ! "$(command -v argon2)" ]; then
    printf "Command \"argon2\" doesn't exists on this system.\n"
    printf "Please install it before launching again the script...\n"
    if [[ "$OSTYPE" == "darwin"* ]]; then       # See : https://stackoverflow.com/questions/394230/how-to-detect-the-os-from-a-bash-script
        # Mac OSX
        printf "macOS detected !"
        if [ "$(command -v brew)" ]; then
            # Homebrew is installed
            printf " And HomeBrew is installed.\n"
            yes_or_no "Do you want me to install argon2 for you?"
            return_code="$?"
            if (( $return_code == 0 )); then
                printf "Installation of argon2 with homebrew...\n"
                brew update && brew upgrade
                brew install argon2
            else
                printf "argon2 needs to be installed. Install it and relaunch the script.\n"
                exit 1
            fi
        else
            printf " But HomeBrew isn't installed...\n"
            yes_or_no "Do you want me to install homebrew and argon2 for you? (you'll need internet access...)"
            return_code="$?"
            if (( $return_code == 0 )); then
                printf "Installation of homebrew...\n"
                /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
                printf "Installation of argon2 with homebrew..."
                brew update && brew upgrade
                brew install argon2
            else
                printf "argon2 needs to be installed. Install it and relaunch the script."
                exit 1
            fi
        fi
    elif [[ "$OSTYPE" == "linux-gnu"* ]] || [[ "\$OSTYPE" == "cygwin"* ]]; then
        printf "This script may work on linux ($OSTYPE), but it's not tested...\n"
        printf "You may add the linux commands to install argon2 in this 'elif' statement.\nCheck the script. Exiting now.\n"
        exit 1
    else
        printf "This script may work on $OSTYPE, but it's not tested...\n"
        printf "Check the script. Exiting now.\n"
        exit 1

    fi

fi


# On récupère le TOKEN via un copier/coller de l'utilisateur
printf "%s" "Enter (paste) ADMIN_TOKEN: "
read ADMIN_TOKEN

printf "The secure ADMIN_TOKEN is:\n"
# Pour le remplacement de $ par $$ pour le docker-compose, voir : https://unix.stackexchange.com/a/700490

# Using the Bitwarden defaults
SECURE_ADMIN_TOKEN=$(printf "${ADMIN_TOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4)
printf "\t- Using the Bitwarden defaults:\n"
print_argon2_output

# Using the OWASP minimum recommended settings
SECURE_ADMIN_TOKEN=$(printf "${ADMIN_TOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4)
printf "\t- Using the OWASP minimum recommended settings:\n"
print_argon2_output

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #
 
@tous,
Je prépare une refonte du tuto pour le rendre un peu plus lisible.
Quand ce sera fait, ce sujet sera verrouillé et passera en archive :)
Un nouveau sujet sera créé pour avoir plusieurs messages d'affilés pour les parties du tuto, et ceux à venir.
 
Le tuto original était déjà une somme qui n'a pas d'équivalent sur le Web y compris chez nos amis américains. Tellement pédagogique et complet que j'ai pu l'utiliser, c'est dire ! Beau travail. J'attends avec impatience la prochaine mouture.

D'autant que Vaultwarden est à ce jour le logiciel le plus important dont je dispose sur le NAS. S'il ne devait en rester qu'un, ce serait celui-la.
 
  • J'aime
Réactions: MilesTEG et FX Cachem
Merci beaucoup pour ces compliments qui me font chaud au cœur :)
Et super ravi de voir que ça sert à certains 😇
 
Statut
N'est pas ouverte pour d'autres réponses.