From 13cc0ac88e40f3e21b198fa4d0d661a9f1b4111a Mon Sep 17 00:00:00 2001 From: MilesTEG Date: Sat, 3 Apr 2021 14:57:21 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Bitwarden=5FRS=20avec=20Backup=20automatiqu?= =?UTF-8?q?e=20et=20programm=C3=A9=20(je=20suis=20en=20train=20de=20tester?= =?UTF-8?q?=20pour=20les=20notifications=20websocket,=20avec=20le=20revers?= =?UTF-8?q?e-proxy=20de=20Synology=20DSM,=20il=20se=20peut=20que=20je=20fa?= =?UTF-8?q?sse=20un=20autre=20commit=20pour=20inclure=20un=20script=20?= =?UTF-8?q?=C3=A0=20lancer=20r=C3=A9guli=C3=A8rement).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bitwardenrs_backup/docker-compose.yml | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 docker-compose/bitwardenrs_backup/docker-compose.yml diff --git a/docker-compose/bitwardenrs_backup/docker-compose.yml b/docker-compose/bitwardenrs_backup/docker-compose.yml new file mode 100644 index 0000000..eb15a4a --- /dev/null +++ b/docker-compose/bitwardenrs_backup/docker-compose.yml @@ -0,0 +1,133 @@ +## Discord Plex FR : https://discord.gg/ERpYMqS +## Version 2021-04-03 +##======================================================================================== +## ## +## Fichier docker-compose.yml pour Bitwarden_RS avec Bitwarden-Backup ## +## ## +##======================================================================================== +## ## +## 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é. ## +## ## +##======================================================================================== +--- +version: "2" + +services: + bitwardenrs: # Voir : https://github.com/dani-garcia/bitwarden_rs + image: bitwardenrs/server:latest + container_name: bitwardenrs + networks: + - bitwarden_network + environment: + # Utiliser la commande (en SSH) : id NOM_UTILISATEUR + - PUID=XXxxXX + - PGID=XXxxXX + - TZ=Europe/Paris + + # Pour l'envoi d'emails + - SMTP_HOST=XXxxXX + - SMTP_FROM=XXxxXX + - SMTP_FROM_NAME=BlaBla + - SMTP_PORT=XXxxXX + - SMTP_SSL=true + - SMTP_USERNAME=XXxxXX + - SMTP_PASSWORD=XXxxXX + + # 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 + + - INVITATION_ORG_NAME=Bitwarden_RS [Votre Nom, pseudo...] # Permet de spécifier un nom d'application pour les invitations d'organisation + + # 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 + + # 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 + # À 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'. + + - SIGNUPS_ALLOWED=false # Fait en sorte que les inscriptions soient bloquées, seul l'admin pourra inviter + # des utilisateurs avec un envoi d'email depuis la console d'administation + + - WEBSOCKET_ENABLED=true # Active les WebSocket notifications (Nécessite la configuration du reverse-proxy) + + volumes: + - "/volume1/docker/bitwarden_rs/bitwarden-data/:/data/" + ports: + - XXxxXX:3012 # Choisir un port libre pour le websocket + - XXxxXX:80 # Choisir un port libre pour l'interface WEB + restart: unless-stopped + + # 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: + - bitwardenrs + volumes: + - /etc/localtime:/etc/localtime:ro + - /volume1/docker/bitwarden_rs/bitwarden-data/:/data/ + # Chemin d'accès pour stocker le backup + - /volume1/docker/bitwarden_rs/bitwarden-backup:/backup_folder/ + + environment: + # Path to the Bitwarden sqlite3 database inside the container + - DB_FILE=/data/db.sqlite3 + + # Path to the desired backup location inside the container + # - BACKUP_FILE=/data/db_backup/backup.sqlite3 + - BACKUP_FILE=/backup_folder/backup.sqlite3 + + # 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 + + # 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 * * * + + # Set to true to append timestamp to the BACKUP_FILE + - TIMESTAMP=true + + # 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 + +networks: + bitwarden_network: + external: + name: bitwarden_network From aafe982b93a329bc16b776a67a5668261d716ba6 Mon Sep 17 00:00:00 2001 From: MilesTEG Date: Sun, 4 Apr 2021 11:05:03 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Ajout=20du=20script=20pour=20faire=20foncti?= =?UTF-8?q?onner=20les=20notifications=20websockets=20sur=20un=20NAS=20Syn?= =?UTF-8?q?ology=20sans=20avoir=20besoin=20de=20changer=20de=20reverse-pro?= =?UTF-8?q?xy.=20Toute=20am=C3=A9lioration=20du=20script=20pour=20un=20ver?= =?UTF-8?q?bose=20plus=20sympa=20est=20la=20bienvenue=20;)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Bitwarden_RS__Enable_Websocket.sh | 126 ++++++++++++++++++ .../bitwardenrs_backup/docker-compose.yml | 59 ++++++-- 2 files changed, 173 insertions(+), 12 deletions(-) create mode 100644 docker-compose/bitwardenrs_backup/Bitwarden_RS__Enable_Websocket.sh diff --git a/docker-compose/bitwardenrs_backup/Bitwarden_RS__Enable_Websocket.sh b/docker-compose/bitwardenrs_backup/Bitwarden_RS__Enable_Websocket.sh new file mode 100644 index 0000000..00fda7a --- /dev/null +++ b/docker-compose/bitwardenrs_backup/Bitwarden_RS__Enable_Websocket.sh @@ -0,0 +1,126 @@ +#!/bin/bash +##============================================================================================== +## ## +## Script Bitwarden_RS__Enable_Websocket.sh ## +## ## +## Source : https://gist.github.com/nstanke/3949ae1c4706854d8f166d1fb3dadc81 ## +## ## +##============================================================================================== +## ## +## Ce script pemet de router ce qui ne peut pas être fait avec le reverse-proxy ## +## de DSM (Synology) pour faire fonctionner les notifications Websocket ## +## Doc. Bitwarden_RS : ## +## Route the /notifications/hub endpoint to the WebSocket server, by default ## +## at port 3012, making sure to pass the Connection and Upgrade headers. ## +## (Note the port can be changed with WEBSOCKET_PORT variable) ## +## https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-WebSocket-notifications ## +## ## +##============================================================================================== +## ## +## Principe de Tâche planifier à créer ## +## ## +## Il faut lancer régulièrement le script car toutes modifications faites dans l'interface ## +## graphique du Reverse-Proxy de DSM va modifier le fichier de configuration. Il en va de ## +## même lorsque le NAS redémarre. ## +## ## +##============================================================================================== +## ## +## /!\ Il faut modifier l'adresse IP en ligne 89 et 95 par l'IP du NAS /!\ ## +## ## +##============================================================================================== +## ## +## Paramètres de lancement du script : ## +## bash /volume1/docker/bitwarden/enable_ws.sh vault.example.com 5555 5556 ## +## ## +## -- vault.example.com = Nom de domaine de Bitwarden_rs (celui du Reverse Proxy de DSM) ## +## -- 5555 = Port exposé ROCKET_PORT par Docker (Identique à celui du Reverse Proxy de DSM) ## +## -- 5556 = Port exposé WEBSOCKET_PORT par Docker ## +## ## +##============================================================================================== + +##=========================================================================================================== +## ## +## Ma commande à lancer : ## +## bash /volume1//docker/_Scripts-DOCKER/Bitwarden_RS__Enable_Websocket.sh mon-ndd-a-moi.tld 8001 30120 ## +## ## +##=========================================================================================================== + +LOC_DIR="/etc/nginx" +part1=0 +part2=0 +# declare -r nb_param=$# # Nombre d'argument(s) fourni(s) au script. +# declare -r param_1="$1" # 1er argument fourni +# declare -r param_2="$2" # 1er argument fourni +# declare -r param_3="$3" # 1er argument fourni + +echo -e "\n$(date "+%R:%S - ") Script Bitwarden_RS__Enable_Websocket.sh pour activer les Notifications Websockets" +echo "$(date "+%R:%S - ") Exécution des commandes..." + +f_affiche_parametre() { + echo " bash /volume1/docker/bitwarden/enable_ws.sh vault.example.com 5555 5556 " + echo " -- vault.example.com = Nom de domaine de Bitwarden_rs (celui du Reverse Proxy de DSM) " + echo " -- 5555 = Port exposé ROCKET_PORT par Docker (Identique à celui du Reverse Proxy de DSM)" + echo " -- 5556 = Port exposé WEBSOCKET_PORT par Docker" +} + +if [ ! $# -eq 3 ]; then + if [ $# -eq 0 ]; then + # Aucun paramètre n'a été fourni. On va afficher la liste de ce qui peut être utilisé. + echo "$(date "+%R:%S - ") Aucun paramètre fourni ! Revoir l'appel du script :" + f_affiche_parametre + else + echo "$(date "+%R:%S - ") Le nombre de paramètres fournis n'est pas correct ! Revoir l'appel du script :" + f_affiche_parametre + fi + echo -e "$(date "+%R:%S - ") ECHEC de lancement du script !!!!!!!!!\n" + exit +fi + + +############################################################################################################# +## Début de la partie de création/modification de fichiers +## +if [ -f $LOC_DIR/ws.locations ]; then + rm /etc/nginx/ws.locations + part1=1 +fi +echo """ +location /notifications/hub { + proxy_pass http://192.168.2.200:$3; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection \"upgrade\"; +} + +location /notifications/hub/negotiate { + proxy_pass http://192.168.2.200:$2; +} +""" >> $LOC_DIR/ws.locations + +if [ $part1 -eq 1 ]; then + echo "$(date "+%R:%S - ") -- 1ère étape du script : le fichier existait déjà, il a été supprimé." +fi +echo "$(date "+%R:%S - ") -- 1ère étape du script : écriture du fichier $LOC_DIR/ws.locations ." + + +if ! grep -q "ws.locations" /etc/nginx/app.d/server.ReverseProxy.conf; then + sed -i "/$1;/ a\ include $LOC_DIR/ws.locations;" /etc/nginx/app.d/server.ReverseProxy.conf + if nginx -t 2>/dev/null; then synoservicecfg --reload nginx; else exit 1; fi + + echo "$(date "+%R:%S - ") -- Étape finale du script atteinte : Écriture dans le fichier server.ReverseProxy.conf." + part2=1 +fi +## +## Fin de la partie de création/modification de fichiers +############################################################################################################# + + + +echo "$(date "+%R:%S - ") -- Vérification du fichier créé lors de la 1ère étape du script (qu'elle ait été exécuté maintenant ou précédemment) :" +echo "cat /etc/nginx/ws.locations" +cat /etc/nginx/ws.locations +if [ ! $part2 -eq 1 ]; then + echo "$(date "+%R:%S - ") -- 2ème étape du script inutile donc non exécutée : la modification du fichier server.ReverseProxy.conf a déjà été effectuée lors d'une précédente exécution" +fi +echo "$(date "+%R:%S - ") Script Bitwarden_RS__Enable_Websocket.sh terminé" + +exit \ No newline at end of file diff --git a/docker-compose/bitwardenrs_backup/docker-compose.yml b/docker-compose/bitwardenrs_backup/docker-compose.yml index eb15a4a..0c2320a 100644 --- a/docker-compose/bitwardenrs_backup/docker-compose.yml +++ b/docker-compose/bitwardenrs_backup/docker-compose.yml @@ -1,17 +1,47 @@ ## Discord Plex FR : https://discord.gg/ERpYMqS ## Version 2021-04-03 -##======================================================================================== -## ## -## Fichier docker-compose.yml pour Bitwarden_RS avec Bitwarden-Backup ## -## ## -##======================================================================================== -## ## -## 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é. ## -## ## -##======================================================================================== +##============================================================================================== +## ## +## Fichier docker-compose.yml pour Bitwarden_RS avec Bitwarden-Backup ## +## ## +##============================================================================================== +## ## +## 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é. ## +## ## +##============================================================================================== +## ## +## Ajout des Notifications Websocket ## +## ## +## Pour qu'elles'fonctionnent, il faut configurer le reverse-proxy correctement. ## +## Pour celui de DSM, il n'est malheureusement pas possible de configurer les ## +## redirections /notifications/hub vers le serveur WebSocket ni celles vers le port normal ## +## /notifications/hub/negotiate ## +## Voir cet article pour tout ce qui n'est pas possible via l'interface de DSM : ## +## https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-WebSocket-notifications ## +## ## +## Dès lors, il faut ruser et passer par l'exécution d'un petit script qui va créer un ## +## fchier ws.locations contenant les modifications précédentes, et qui va écrire une ## +## ligne dans le fichier /etc/nginx/app.d/server.ReverseProxy.conf pour inclure le ## +## fichier ws.locations au niveau de la section concernant le nom de domaine pour ## +## bitwarden_RS. ## +## Comme cela, il n'est pas nécessaire de passer par le changement de reverse-proxy, assez ## +## complexe à mettre en oeuvre... ## +## ## +## Le script est : Bitwarden_RS__Enable_Websocket.sh ## +## ## +## Il faudra la lancer régulièrement et à chaque redémarrage du NAS, via deux tâches ## +## plannifiées dédiées, en donnant 3 paramètres au fichier : ## +## - le nom de domaine de bitwarden ## +## - le port HTTP exposé (donc pas l'interne du conteneur) pour l'interface graphique ## +## - le port websocket exposé (donc pas l'interne du conteneur) ## +## Voir les commentaires de ce fichier Bitwarden_RS__Enable_Websocket.sh pour plus ## +## d'explications. ## +## ## +##============================================================================================== + --- version: "2" @@ -68,6 +98,11 @@ services: # des utilisateurs avec un envoi d'email depuis la console d'administation - WEBSOCKET_ENABLED=true # Active les WebSocket notifications (Nécessite la configuration du reverse-proxy) + # Durant le nombre importants d'essais, j'en suis venu à laisser le port par défaut + # pour le WEBSOCKET_PORT. Il est possible que ça fonctionne avec un port différent. + # Il faudra alors décommenter la ligne suivante, et changer le port exposé plus bas. + #- WEBSOCKET_PORT=3012 + volumes: - "/volume1/docker/bitwarden_rs/bitwarden-data/:/data/"