Forum des NAS

Tous les fabricants de NAS réunis sur un forum unique : Asustor, Qnap, Synology...

Les tutoriaux rédigés par les membres
#99007
Bonjour à toutes et à tous,

Préambule
Tout d'abord, pourquoi je fais un nouveau tuto d'installation de Bitwarden_rs... En fait je n'ai pas vu de tuto vraiment à mon goût sur l'installation de Bitwarden_rs, soit il manque des explications, soit c'est fait via l'interface DSM de docker... Donc je me décide à en faire un moi-même.
Je précise qu'il n'y aura pas beaucoup de différences avec ceux trouvés sur le NET, si ce n'est ceci :

  • L'utilisation de Portainer ou de la ligne de commande (=CLI) avec docker-compose
  • Des commentaires expliquants la plupart des options utilisées tout le long du docker-compose.yml
  • Une utilisation combinée avec un conteneur faisant automatiquement des sauvegardes de la base de données, là aussi avec des commentaires dans le docker-compose.yml : https://gitlab.com/1O/bitwarden_rs-backup

Sommaire :
1. Prérequis
2- Mise en place et création des conteneurs
2.1- Petites explications sur ce qui suivra
2.2- Création du docker-compose.yml
2.3- Création des dossiers et du réseau
2.4- Création des conteneurs (2 méthodes)
3- 1er lancement et sécurisation 2FA
...



1- Prérequis

Pour mettre en oeuvre ce tuto, il faudra au préalable :

  • que vous ayez mis en place Portainer (voir le tuto d'EVOTk) ;
  • que vous sachiez vous connecter en SSH au NAS et lancer docker-compose up -d si vous optez pour la création des conteneurs en ligne de commande (vous trouverez ici un tuto explicatif : [Tuto] Acceder à son NAS en lignes de commande) ;
  • savoir identifier les PUID et PGID d'un utilisateur avec une ligne de commande en SSH sur le NAS.

2- Mise en place et création des conteneurs

2.1- Petites explications sur ce qui suivra

Le but de ce tuto est de tout préparer sur l'ordinateur avant de placer les fichiers/dossiers au bon endroit, tout en comprenant bien ce qui est fait et les implications de certaines options.
On va tout d'abord commencer par créer un fichier docker-compose.yml qui pourra servir pour les deux méthodes d'installation (Portainer, ou CLI).
J'opte pour combiner la création des deux conteneurs (bitwarden_rs et Bitwarden_rs Backup) en un seul fichier docker-compose.yml. J'ai également choisi de placer ces deux conteneurs dans un même réseau (network) que je nomme bitwarden_network.
Ensuite il faudra créer ce réseau et les dossiers utilisés avant de créer les conteneurs.
Pour les dossiers, je pars sur cette organisation : (sur le volume1)
Image


Note : Tout ce qui sera XXxxXX sera à remplacer par vos valeurs. J'indiquerais comment les obtenir si ce n'est pas évident.

2.2- Création du docker-compose.yml
Vous pouvez télécharger le fichier ci-joint :

(2.19 Kio) Téléchargé 15 fois

Ce fichier est composé de trois parties : une partie dédiée à bitwarden_rs et à sa configuration, et une autre partie dédiée à bitwarden_rs backup et à sa configuration, et enfin une pour le réseau.

Explications sur la partie configuration (partie 1) de bitwarden_rs (1ère partie du docker-compose.yml) :

Ce qui suit met en place la version de docker-compose à utiliser : pour plus de compatibilité (et par simplicité car je ne maitrise pas la v3...) on part sur une v2.
Je place dans l'extrait ci-dessous des commentaires supplémentaires (non présents dans le fichier joint) pour expliquer les choix faits.

Code : Tout sélectionner
---
version: "2"
#
# Attention, avec ce fichier, il faut avoir créer le réseau "bitwarden_network" avant de créer les conteneurs.
#
# La mise en place de fail2ban se fera avec un docker-compose dédié.

services:
  bitwardenrs:  # Voir : https://github.com/dani-garcia/bitwarden_rs, ceci correspond au premier conteneur du fichier.
    image: bitwardenrs/server:latest      # On spécifie le dépôt à utiliser et l'image voulue, ainsi que sa version
    container_name: bitwardenrs           # C'est le nom du conteneur qui apparaîtra dans l'interface de Docker/Portainer/...
    networks:                             # On spécifie ici le nom du réseau à joindre
      - bitwarden_network
    environment:
      # Utiliser la commande (en SSH) : id NOM_UTILISATEUR
      - PUID=XXxxXX                       # Il faut utiliser la commande ci-dessus en SSH, pas le choix...
      - PGID=XXxxXX
      - TZ=Europe/Paris                   # On spécifie ici la zone de temps utilisée, probablement Paris, mais pour pouvez remplacer
                                          # Europe/Paris par une des entrées trouvable ici :
                                          # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

      # Pour l'envoi d'emails
      - SMTP_HOST=XXxxXX                  # Ici c'est le domaine SMTP de votre provider email. Ex : smtp.gmail.com
      - SMTP_FROM=XXxxXX                  # Pour le champ 'DE' (FROM) de l'email envoyé : mettrez votre adresse email.
      - SMTP_PORT=XXxxXX                  # Le port de connexion pour le serveur SMTP (voir votre fournisseur).  Pour Gmail c'est 587
      - SMTP_SSL=true                     # Si c'est pas activé, c'est pas chiffré... 
      - SMTP_USERNAME=XXxxXX              # Le nom d'utilisateur de votre compte email
      - SMTP_PASSWORD=XXxxXX              # Le mot de passe de votre compte email, attention il se peut que vous deviez créer un mot
                                          # de passe application (Gmail par exemple)

      # Nécessaire pour activer le 2FA pour la connexion à notre serveur bitwarden_rs
      # Il est possible de spécifier un port de connexion dans l'URL. Le https:// est obligatoire.
      # Pour cette option, il est donc OBLIGATOIRE d'avoir fait le nécessaire pour avoir du HTTPS (certificats, reverse-proxy, ...)
      - DOMAIN=XXxxXX                     # Mettez votre nom de domaine

      # Pour enregistrer les log avec un niveau particulier
      - LOG_FILE=/data/bitwarden.log
      - LOG_LEVEL=warn
      - EXTENDED_LOGGING=true

      # je n'aime pas les indices pour les mots de passe...
      - SHOW_PASSWORD_HINT=false          # Vous pouvez réactiver ceci en mettant true à la place de false.

      # Pour activer la console d'administation, accessible via : https://mon.domaine.tld/admin/
      # Voir détails ici : https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-admin-page
      # /!\
      # /!\ N'importe qui pourra accéder à la page de connextion, alors blinder le token d'amdin ci-dessous (64 caractères pour moi) !
      # /!\ Il est de plus TRÈS important d'avoir ACTIVÉ le HTTPS avant l'activation de cette option.
      # /!\
      # Je conseille de ne l'activer qu'en cas de nécessité, et de la désactiver après.
      # Pour désactiver, il suffit de commenter la ligne ci-dessous.
      - ADMIN_TOKEN=XXxxXX                # Choisissez un mot de passe fort !! (utiliser un générateur de mot de passe)
      # À noter :
      #   La première fois que vous enregistrez un paramètre dans la page d'administration, 'config.json' sera généré 
      #   dans votre 'DATA_FOLDER'. Les valeurs de ce fichier auront priorité sur les valeurs 'environnement'.

    volumes:                              # C'est le chemin d'accès au dossier qui contiendra les données.
                                          # volume1 est à remplacer par le volume où se trouve le dossier docker.
      - "/volume1/docker/bitwarden_rs/bitwarden-data/:/data/"
    ports:
      - 3012:3012                         # Je ne sais pas trop à quoi sert ce port, possible que ce soit pour les notifications websocket
      - XXxxXX:80                         # On choisi un port (pour XXxxXX) sur lequel le serveur BW sera accessible,
                                          # vous pouvez mettre 80 si ce port est libre, ou en spécifier un autre.
                                          # Attention il faut laisser le 80 du conteneur...
    restart: unless-stopped               # Ça c'est pour que le conteneur redémarre sauf s'il est arrêté manuellement.


Maintenant la deuxième partie (partie 2) qui peut ne pas être utilisée si vous ne souhaitez pas sauvegarder automatiquement la BDD :

Comme précédemment, les indications sont en commentaires)

Code : Tout sélectionner
  # Sauvegarde automatique de la base de données, au-cas-où !
  bitwarden_backup:     # Voir : https://gitlab.com/1O/bitwarden_rs-backup
    image: bruceforce/bw_backup:latest
    container_name: bitwarden_backup
    networks:
      - bitwarden_network
    restart: always
    depends_on:                           # Ceci indique que le conteneur bitwarden_backup dépend de bitwardenrs
      - bitwardenrs
    volumes:
      #- /etc/localtime:/etc/localtime:ro  # Devenu inutile sur nos Syno avec la variable d'env. TZ (voir plus bas)
      - /volume1/docker/bitwarden_rs/bitwarden-data/:/data/             # Pour indiquer où se trouve les données de bitwardenrs (à adapter avec ce que vous avez mis précédemment)
      # Chemin d'accès pour stocker le backup                           # Cette partie sert à indiquer où placer la sauvegarde de la BDD
      - /volume1/docker/bitwarden_rs/bitwarden-backup:/backup_folder/   # Cela fait un autre dossier à créer

    environment:
      # Path to the Bitwarden sqlite3 database inside the container
      - DB_FILE=/data/db.sqlite3                                        # C'est le chemin d'accès par défaut, autant le laisser.

      # Path to the desired backup location inside the container
      # - BACKUP_FILE=/data/db_backup/backup.sqlite3
      - BACKUP_FILE=/backup_folder/backup.sqlite3                       # On indique où va se trouver le backup

      # Sets the permissions of the backup file
      # The permissions should at least be 700 since the backup folder itself gets the same permissions
      # and with 600 it would not be accessible.
      - BACKUP_FILE_PERMISSIONS=700                                     # Pour les permissions d'accès.

      # Cronjob format "Minute Hour Day_of_month Month_of_year Day_of_week Year"
      # https://crontab.guru/#0_9_*_*_*
      # minutes | heures | jour du mois | mois | jour de la semaine
      - CRON_TIME=0 18 * * *                                            # Ceci permet de lancer le backup tous les jours à 18h.
                                                                        # À adapter selon votre souhait (voir le site mentionné)
      # Set to true to append timestamp to the BACKUP_FILE
      - TIMESTAMP=true                                                  # Ça permet d'avoir la date et l'heure de la sauvegarde dans le nom du fichier.
                                                                        # Peut être mis sur false.
      # User ID to run the cron job with
      - UID=1038    # J'ai créé un utilisateur dédié à Bitwarden, utiliser la commande 'id nom_user'

      # Group ID to run the cron job with
      - GID=100

      # Path to the logfile inside the container
      #- LOGFILE

      # Path to the cron file inside the container
      #- CRONFILE

      # Delete old backups after X many days
      - DELETE_AFTER=14 # Va de supprimer les vieilles sauvegardes après 14j,
      # vous pouvez changer la valeur ou commenter pour déactiver.
      
      # If you need timestamps in your local timezone you should mount /etc/timezone:/etc/timezone:ro and
      # /etc/localtime:/etc/localtime:ro like it's done in the docker-compose.yml.
      # An other possible solution is to set the environment variable accordingly (like TZ=Europe/Berlin)
      # (see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for more information).
      - TZ=Europe/Paris

Et enfin une dernière partie (partie 3)qui est obligatoire, celle qui concerne le réseau :
Code : Tout sélectionner
networks:                                         # On indique ici de quel réseau on parlait précédement
  bitwarden_network:
    external:                                     # C'est un réseau créé en dehors du docker-compose.
      name: bitwarden_network                     # Je précise toujours un nom, car sinon ça va prendre un nom à rallonge avec
                                                  # le nom du conteneur et du réseau voulu...


2.3- Création des dossiers et du réseau

La partie explications des options à placer dans le fichier docker-compose.yml étant faite, passons à la création des dossiers sur le NAS.
Vous pouvez soit passer par DSM, soit par la ligne de commande.
Si vous optez pour la CLI, voilà les commandes à taper :

Code : Tout sélectionner
sudo -i
cd /volume1/docker
mkdir -p bitwarden_rs bitwarden_rs/bitwarden-data bitwarden_rs/bitwarden-backup

Une fois ces dossiers créés, copier votre docker-compose.yml dans le dossier /volume1/docker/bitwarden_rs.

Il faut maintenant créer le réseau. Plusieurs possibilités existent.
Soit vous passez par DSM (non expliquée ici), soit vous passez par Portainer, soit enfin via la CLI.

  • Utilisation de Portainer :
    Dans Portainer, il faut aller dans la section Networks, et ensuite cliquer sur le bouton Add Network :
    Image
    Ensuite, il suffit juste de rentrer le nom du réseau à créer (ici : ) et de bien choisir Bridge comme Driver :
    Image
    Il n'y a pas besoin de toucher au reste. Portainer choisir les IP en fonction de ce qui est déjà créé chez vous.
    ________________
  • Utilisation de la CLI :
    Pour créer le réseau bitwarden_network :
    Code : Tout sélectionner
    sudo docker network create bitwarden_network
    Si vous voulez supprimer le réseau ainsi créé, il faut taper :
    Code : Tout sélectionner
    sudo docker network rm bitwarden_network
    Au besoin, si vous voulez lister les réseeaux :
    Code : Tout sélectionner
    sudo docker network ls
    Note : Si vous avez plusieurs commandes à taper en mode root, il faut faire : sudo -i
    Et ensuite taper vos commande sans le sudo devant.


2.4- Création des conteneurs (2 méthodes)

Maintenant tout est prêt pour qu'on se lance dans la création des conteneurs.
Deux possibilités : passer par Portainer, ou bien la CLI.

  • Par Portainer :
    Il faut aller dans la section "Stacks", puis cliquer sur le bouton "+ Add stack" :
    Image
    Ensuite, on donne un nom à la stack que l'on va créer et on copie/colle le contenu du fichier docker-compose.yml créé précédemment :
    Image
    Il est également possible d'uploader ce dit fichier en utilisant le bouton "Upload" : (je n'ai personnellement jamais utiliser cette option, mais il n'y a pas de raison pour qu'elle ne fonctionne pas)
    Image

    Il ne reste plus qu'à cliquer sur le bouton "Deploy the stack" tout en bas à gauche de la page :
    Image

    Si une erreur apparait, ce sera dans le coin supérieur droit dans un rectangle rouge, essayer d'en faire une capture avant sa disparition.
    Si non, un message en vert apparait et les conteneurs seront créés :
    Image
    Image
    Vous noterez dans cette stack, il est possible de l'éditer pour la modifier avec l'onglet Editor :
    Image
    __________
  • Par la CLI :
    Avec la ligne de commande, il faut être en root (voir remarque faite précédemment à ce propos...).
    Il faut aussi être dans le dossier contenant le fichier docker-compose, sinon il faut spécifier avec un argument supplémentaire le fichier et son chemin. Je choisi la facilité : on se place dans le bon dossier :
    Code : Tout sélectionner
    cd /volume1/docker/bitwarden_rs
    sudo docker-compose up -d
    La création des deux conteneurs se fait et ils démarrent.


3- 1er lancement et sécurisation 2FA

Une fois les étapes précédentes accomplies, il faut accéder au serveur avec l'url que vous avez indiqué dans la configuration.
Si vous essayer d'accéder via l'IP LAN en http ça ne fonctionnera pas, car le HTTPS est activé, vous aurez l'erreur suivante :
Image
Et si vous essayer toujours avec l'IP mais en HTTPS, vous aurez cette erreur :
Image
Bref, il faut y accéder avec votre nom de domaine :
Image
Il faut ensuite créer votre compte et vous pourrez alors créer vos mots de passe, importer depuis un autre logiciel de mot de passe...
Image

Voilà voilà.
Reste plus qu'à sécuriser le compte avec le 2FA. Pour cela, il faut aller dans le compte :
Image
Image
Puis il faut choisir votre méthode. J'ai choisi de passer par une application d'authentification comme MS Authenticator, ou Authy, ou même une autre application de mot de passe comme EnPass que j'utilise aussi.
Cliquer sur le bouton Gérer de la méthode choisie : Image
Entre votre mot de passe maitre (celui du compte BW) :
Image
À l'aide de l'application d'authentification, après y avoir entrer les infos (QR-Code ou Code alphanumérique), entrer le code à usage unique générer pour valider le 2FA :
Image

Voilà, le compte est protégé :)

PS : si vous n'avez plus besoin de compte sur votre serveur, il est possible de désactiver la création des comptes.
Dans la section :

Code : Tout sélectionner
    environment:

Il faut ajouter ceci :

Code : Tout sélectionner
      - SIGNUPS_ALLOWED=false


________________

À venir : intégration de fail2ban pour sécuriser un poil plus, même si avec le HTTPS et la 2FA c'est déjà bien :)

#99358
Je voudrais modifier le docker-compose avec une nouveauté de la dernière version de l'image bitwarden_rs Backup, mais je peux plus éditer mon message.
Est-ce qu'un modérateur peut m'autoriser à modifier mon post initial ?
Merci :bounce:
#99360
Salut,
Je peu le modifier pour toi si tu le souhaite.
Répond avec les modif que tu souhaite apporter, et je le ferait :)
#99361
Ok, mais ce serait plus pratique que je puisse le faire moi-même...

Sinon pour les modifs :
Dans le fichier docker-compose et dans le code coller, remplacer ceci :

Code : Tout sélectionner
      # Delete old backups after X many days
      - DELETE_AFTER=14

par celà :

Code : Tout sélectionner
      # Delete old backups after X many days
      - DELETE_AFTER=14
      
      # If you need timestamps in your local timezone you should mount /etc/timezone:/etc/timezone:ro and
      # /etc/localtime:/etc/localtime:ro like it's done in the docker-compose.yml.
      # An other possible solution is to set the environment variable accordingly (like TZ=Europe/Berlin)
      # (see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for more information).
      - TZ=Europe/Paris

Et dans le même fichier, remplacer ça :

Code : Tout sélectionner
      - /etc/localtime:/etc/localtime:ro

par ça :

Code : Tout sélectionner
      #- /etc/localtime:/etc/localtime:ro  # Devenu inutile sur nos Syno avec la variable d'env. TZ (voir plus bas)

pour la migration la je ne sais pas trop

Vitesse lente

Bonjour, J'ai déplacer un fichier de 147 G[…]

Site hébergé sur un serveur IKOULA

Ikoula