Merge pull request 'Miles-Vaultwarden_seulement' (#94) from Miles-Vaultwarden_seulement into master

Reviewed-on: #94
This commit is contained in:
NightPumpkin 2021-08-18 20:30:08 +02:00
commit 47b210d303
4 changed files with 395 additions and 11 deletions

View File

@ -1,21 +1,19 @@
## Discord Plex FR : https://discord.gg/ERpYMqS
## Version 2021-02-26
## Version 2021-08-18
version: '3'
services:
bitwarden:
image: bitwardenrs/server
restart: unless-stopped
vaultwarden:
# Decommenter les 2 lignes suivantes pour que watchtower surveille ce conteneur
# labels:
# - com.centurylinklabs.watchtower.enable=true
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- 80:80 # WebUI
volumes:
- /volume1/docker/bitwarden/bw-data:/data
environment:
- WEBSOCKET_ENABLED: 'true' # Necessaire pour utiliser websockets
- SIGNUPS_ALLOWED: 'true' # Mettre faux une fois le 1er utilisateur creer et redemarrer le conteneur
# Network conseillé de ne pas utiliser host (pas de redirection de port) ni default_bridge car limité a 16 ip
network_mode: 'bitwardenrs_network'
- WEBSOCKET_ENABLED=true # Necessaire pour utiliser websockets
- SIGNUPS_ALLOWED=true # Mettre faux une fois le 1er utilisateur creer et redemarrer le conteneu
volumes:
- /volume1/docker/bitwarden/bw-data:/data

View File

@ -0,0 +1,143 @@
##==============================================================================================
## ##
## Fichier docker-compose.yml pour Vaultwarden seulement ##
## Révision du fichier : v4.0 ##
## ##
## Voir tuto : https://www.forum-nas.fr/viewtopic.php?f=56&t=15341&p=99007#p99007 ##
## ##
##==============================================================================================
## ##
## Attention, avec ce fichier, il faut avoir créer le réseau "vaultwarden_network" avant de ##
## créer les conteneurs. ##
## ##
## La mise en place de fail2ban se fera avec un docker-compose dédié. ##
## ##
##==============================================================================================
## ##
## NOTE IMPORTANTE ##
## ----------------- ##
## ##
## Lors de l'importation d'un fichier contenant beaucoup d'entrées, j'ai eu une erreur ##
## 405 Not Allowed - Nginx ##
## Après quelques recherches, et un certains nombre de minutes, il s'est avéré que les ##
## expiration du délai ... (les timeout) dans le reverse proxy par défaut de 60s étaient ##
## trop faible. ##
## En passant les 3 valeurs à 300s (5min), ça a réglé mon problème. ##
## (Pensez à relancer le script vaultwarden__Enable_Websocket.sh après ces modifications) ##
## ##
##==============================================================================================
## ##
## 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/vaultwarden/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 ##
## vaultwarden. ##
## Comme cela, il n'est pas nécessaire de passer par le changement de reverse-proxy, assez ##
## complexe à mettre en oeuvre... ##
## ##
## Le script est : vaultwarden__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 vaultwarden ##
## - 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 vaultwarden__Enable_Websocket.sh pour plus ##
## d'explications. ##
## ##
##==============================================================================================
---
version: "2.4"
services:
vaultwarden:
image: vaultwarden/server:latest # https://github.com/dani-garcia/vaultwarden
# https://github.com/dani-garcia/vaultwarden/wiki
container_name: vaultwarden
networks:
- vaultwarden_network
environment:
# Utiliser la commande (en SSH) : id NOM_UTILISATEUR
- PUID=1000
- PGID=100
- 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
- INVITATION_ORG_NAME=Vaultwarden [Votre Nom, pseudo...] # Permet de spécifier un nom d'application pour les invitations d'organisation
# Nécessaire pour activer le 2FA pour la connexion à notre serveur Vaultwarden
# 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
# Pour enregistrer les log avec un niveau particulier
- LOG_FILE=/data/vaultwarden.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/vaultwarden/wiki/Enabling-admin-page
# /!\
# /!\ N'importe qui pourra accéder à la page de connexion, 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)
# 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 # Par défaut = 3012
# Pour activer la récupération des icones des IP LAN, il faut mettre sur false la variable ICON_BLACKLIST_NON_GLOBAL_IPS
- ICON_BLACKLIST_NON_GLOBAL_IPS=false # Par défaut = true
# On défini ici quelques chemins de dossiers qu'il faudra créer (pas sur que le conteneur les crées lui-même...)
- ICON_CACHE_FOLDER=data/icon_cache
- ATTACHMENTS_FOLDER=data/attachments
- SENDS_FOLDER=data/sends
labels:
- "com.centurylinklabs.watchtower.enable=true"
volumes:
- "/volume1/docker/vaultwarden/vaultwarden-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
networks:
vaultwarden_network:
external:
name: vaultwarden_network

View File

@ -0,0 +1,114 @@
#!/bin/bash
##==============================================================================================
## ##
## Script vaultwarden__Enable_Websocket-DSM_6.x.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. vaultwarden : ##
## 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/vaultwarden/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 79 et 85 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 vaultwarden (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 ##
## ##
##==============================================================================================
LOC_DIR="/etc/nginx"
part1=0
part2=0
echo -e "\n$(date "+%R:%S - ") Script vaultwarden__Enable_Websocket.sh pour activer les Notifications Websockets"
f_affiche_parametre() {
echo " bash /volume1/docker/_Scripts-DOCKER/vaultwarden__Enable_Websocket.sh vault.example.com 5555 5556 "
echo " -- vault.example.com = Nom de domaine de vaultwarden (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 1
fi
echo "$(date "+%R:%S - ") Exécution des commandes..."
#############################################################################################################
## 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 ! 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
part2=1 # Variable pour indiquer que cette partie a été exécutée
fi
##
## Fin de la partie de création/modification de fichiers
#############################################################################################################
if [ $part1 -eq 1 ]; then
echo "$(date "+%R:%S - ") -- Le fichier $LOC_DIR/ws.locations existait déjà, il a été supprimé puis recréé."
else
echo "$(date "+%R:%S - ") -- Le fichier $LOC_DIR/ws.locations n'existait pas, il a été créé."
fi
if [ $part2 -eq 1 ]; then
echo "$(date "+%R:%S - ") -- !!!!!! ---> La modification dans le fichier /etc/nginx/app.d/server.ReverseProxy.conf n'existait pas. Elle a été écrite."
echo "$(date "+%R:%S - ") -- !!!!!! ---> Le fichier /etc/nginx/app.d/server.ReverseProxy.conf a du être réinitialisé après un reboot ou lors d'une modification du reverse-proxy dans DSM."
else
echo "$(date "+%R:%S - ") -- La modification du fichier /etc/nginx/app.d/server.ReverseProxy.conf a déjà été effectuée lors d'une précédente exécution. Aucune modification n'est donc nécessaire."
fi
echo "$(date "+%R:%S - ") Script vaultwarden__Enable_Websocket.sh terminé"
exit

View File

@ -0,0 +1,129 @@
#!/bin/bash
##==============================================================================================
## ##
## Script vaultwarden__Enable_Websocket-DSM_7.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. vaultwarden : ##
## 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/vaultwarden/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 47 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 vaultwarden (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 ##
## ##
##==============================================================================================
LOC_DIR="/etc/nginx"
part1=0
part2=0
MY_DOMAIN=$1
PORT_ACCES=$2
PORT_CONT=$3
IP_NAS="192.168.2.200"
echo -e "\n$(date "+%R:%S - ") Script vaultwarden__Enable_Websocket.sh pour activer les Notifications Websockets"
f_affiche_parametre() {
echo " bash /volume1/docker/_Scripts-DOCKER/vaultwarden__Enable_Websocket.sh vault.example.com 5555 5556 "
echo " -- vault.example.com = Nom de domaine de vaultwarden (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 1
fi
echo "$(date "+%R:%S - ") Exécution des commandes..."
#############################################################################################################
## Début de la partie de création/modification de fichiers
##
if [ -f $LOC_DIR/websocket.locations.vaultwarden ]; then
rm $LOC_DIR/websocket.locations.vaultwarden
part1=1
fi
echo """
location /notifications/hub {
proxy_pass http://$IP_NAS:$PORT_CONT;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection \"upgrade\";
}
location /notifications/hub/negotiate {
proxy_pass http://$IP_NAS:$PORT_ACCES;
}
""" >>$LOC_DIR/websocket.locations.vaultwarden
# Note : avec DSM7, le chemin d'accès du fichier server.ReverseProxy.conf a changé
# DSM6.2 = /etc/nginx/app.d/server.ReverseProxy.conf
# DSM7 = /etc/nginx/sites-enabled/server.ReverseProxy.conf
if ! grep -q "websocket.locations.vaultwarden" /etc/nginx/sites-enabled/server.ReverseProxy.conf; then
# Commandes fonctionnelles avec DSM6.2.x, mais plus avec DSM 7.0 (RC)
#sed -i "/$1;/ a\ include $LOC_DIR/websocket.locations.vaultwarden;" /etc/nginx/app.d/server.ReverseProxy.conf
#if nginx -t 2>/dev/null; then synoservicecfg --reload nginx; else exit 1; fi
# Commande fonctionnelles avec DSM 7 (RC)
sed -r "s#^([[:blank:]]*server_name[[:blank:]]*${MY_DOMAIN}[[:blank:]]*;[[:blank:]]*)\$#\1\n\n\tinclude ${LOC_DIR}/websocket.locations.vaultwarden;#" /etc/nginx/sites-enabled/server.ReverseProxy.conf > /etc/nginx/sites-enabled/server.ReverseProxy.conf.new
mv /etc/nginx/sites-enabled/server.ReverseProxy.conf.new /etc/nginx/sites-enabled/server.ReverseProxy.conf
if nginx -t 2>/dev/null; then synosystemctl reload nginx; else exit 1; fi
part2=1 # Variable pour indiquer que cette partie a été exécutée
fi
##
## Fin de la partie de création/modification de fichiers
#############################################################################################################
if [ $part1 -eq 1 ]; then
echo "$(date "+%R:%S - ") -- Le fichier $LOC_DIR/websocket.locations.vaultwarden existait déjà, il a été supprimé puis recréé."
else
echo "$(date "+%R:%S - ") -- Le fichier $LOC_DIR/websocket.locations.vaultwarden n'existait pas, il a été créé."
fi
if [ $part2 -eq 1 ]; then
echo "$(date "+%R:%S - ") -- !!!!!! ---> La modification dans le fichier /etc/nginx/sites-enabled/server.ReverseProxy.conf n'existait pas. Elle a été écrite."
echo "$(date "+%R:%S - ") -- !!!!!! ---> Le fichier /etc/nginx/sites-enabled/server.ReverseProxy.conf a du être réinitialisé après un reboot ou lors d'une modification du reverse-proxy dans DSM."
else
echo "$(date "+%R:%S - ") -- La modification du fichier /etc/nginx/sites-enabled/server.ReverseProxy.conf a déjà été effectuée lors d'une précédente exécution. Aucune modification n'est donc nécessaire."
fi
echo "$(date "+%R:%S - ") Script vaultwarden__Enable_Websocket.sh terminé"
exit