diff --git a/demo_lxc_build.sh b/demo_lxc_build.sh index 250ff07..75d6745 100755 --- a/demo_lxc_build.sh +++ b/demo_lxc_build.sh @@ -12,8 +12,8 @@ PLAGE_IP=10.1.5 IP_LXC1=10.1.5.3 IP_LXC2=10.1.5.4 ARG_SSH=-t -DOMAIN=demotest1.tld -YUNO_PWD=admin +DOMAIN=$(cat "$script_dir/domain.ini") +YUNO_PWD=demo LXC_NAME1=yunohost_demo1 LXC_NAME2=yunohost_demo2 TIME_TO_SWITCH=30 @@ -22,6 +22,15 @@ TIME_TO_SWITCH=30 USER_DEMO=demo PASSWORD_DEMO=demo +# Check root +CHECK_ROOT=$EUID +if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi +if [ $CHECK_ROOT -eq 0 ] +then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root + echo "Le script ne doit pas être exécuté avec les droits root" + exit 1 +fi + echo "> Création d'une machine debian jessie minimaliste" | tee -a "$LOG_BUILD_LXC" sudo lxc-create -n $LXC_NAME1 -t debian -- -r jessie >> "$LOG_BUILD_LXC" 2>&1 @@ -83,6 +92,9 @@ USER_DEMO_CLEAN=${USER_DEMO//"_"/""} echo "> Ajout de l'utilisateur de demo" | tee -a "$LOG_BUILD_LXC" ssh $ARG_SSH $LXC_NAME1 "sudo yunohost user create --firstname \"$USER_DEMO_CLEAN\" --mail \"$USER_DEMO_CLEAN@$DOMAIN\" --lastname \"$USER_DEMO_CLEAN\" --password \"$PASSWORD_DEMO\" \"$USER_DEMO\" --admin-password=\"$YUNO_PWD\"" +# echo "> Ajout du certificat SSL via Let's encrypt" | tee -a "$LOG_BUILD_LXC" +# ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install https://github.com/YunoHost-Apps/letsencrypt_ynh -a \"domain=$DOMAIN&admin=$USER_DEMO&installForAllDomains=Yes\"" + echo -e "\n> Vérification de l'état de Yunohost" | tee -a "$LOG_BUILD_LXC" ssh $ARG_SSH $LXC_NAME1 "sudo yunohost -v" | tee -a "$LOG_BUILD_LXC" 2>&1 @@ -107,19 +119,21 @@ echo "> Modification de l'ip du clone" | tee -a "$LOG_BUILD_LXC" sudo sed -i "s@address $IP_LXC1@address $IP_LXC2@" /var/lib/lxc/$LXC_NAME2/rootfs/etc/network/interfaces >> "$LOG_BUILD_LXC" 2>&1 echo "> Et le nom du veth" | tee -a "$LOG_BUILD_LXC" sudo sed -i "s@^lxc.network.veth.pair = $LXC_NAME1@lxc.network.veth.pair = $LXC_NAME2@" /var/lib/lxc/$LXC_NAME2/config >> "$LOG_BUILD_LXC" 2>&1 +echo "> Et enfin renseigne /etc/hosts sur le clone" | tee -a "$LOG_BUILD_LXC" +sudo sed -i "s@^127.0.0.1 $LXC_NAME1@127.0.0.1 $LXC_NAME2@" /var/lib/lxc/$LXC_NAME2/rootfs/etc/hosts >> "$LOG_BUILD_LXC" 2>&1 -# Mise en place du cron de switch -echo | sudo tee /etc/cron.d/demo_switch < Mise en place du cron de switch" +echo | sudo tee /etc/cron.d/demo_switch < /dev/null # Switch des conteneurs toutes les $TIME_TO_SWITCH minutes */$TIME_TO_SWITCH * * * * root $script_dir/demo_switch.sh >> "$script_dir/demo_switch.log" 2>&1 EOF -# Et du cron d'upgrade -echo | sudo tee /etc/cron.d/demo_upgrade < Et du cron d'upgrade" +echo | sudo tee /etc/cron.d/demo_upgrade < /dev/null # Vérifie les mises à jour des conteneurs de demo, lorsqu'ils ne sont pas utilisés, à partir de 3h2minutes chaque nuit. Attention à rester sur un multiple du temps de switch. 2 3 * * * root $script_dir/demo_switch.sh >> "$script_dir/demo_upgrade.log" 2>&1 EOF -# Démarrage de la démo +echo "> Démarrage de la démo" "$script_dir/demo_start.sh" # Après le démarrage du premier conteneur, fait un snapshot du deuxième. diff --git a/demo_lxc_build_init.sh b/demo_lxc_build_init.sh index 13b7844..d900c4a 100755 --- a/demo_lxc_build_init.sh +++ b/demo_lxc_build_init.sh @@ -13,7 +13,18 @@ LXC_NAME2=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME2= | cut -d '=' - PLAGE_IP=$(cat "$script_dir/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2) IP_LXC1=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC1= | cut -d '=' -f2) IP_LXC2=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC2= | cut -d '=' -f2) -DOMAIN=$(cat "$script_dir/demo_lxc_build.sh" | grep DOMAIN= | cut -d '=' -f2) + +# Check root +CHECK_ROOT=$EUID +if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi +if [ $CHECK_ROOT -eq 0 ] +then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root + echo "Le script ne doit pas être exécuté avec les droits root" + exit 1 +fi + +read -p "Indiquer le nom de domaine du serveur de demo: " DOMAIN +echo "$DOMAIN" > "$script_dir/domain.ini" # Créer le dossier de log sudo mkdir -p $(dirname $LOG_BUILD_LXC) @@ -60,8 +71,13 @@ IdentityFile $HOME/.ssh/$LXC_NAME1 # End ssh $LXC_NAME1 EOF -echo "> Mise en place du reverse proxy" | tee -a "$LOG_BUILD_LXC" -echo | sudo tee /etc/nginx/conf.d/$DOMAIN.conf < Mise en place du reverse proxy et du load balancing" | tee -a "$LOG_BUILD_LXC" +echo | sudo tee /etc/nginx/conf.d/$DOMAIN.conf <> "$LOG_BUILD_LXC" 2>&1 +upstream $DOMAIN { + server $IP_LXC1:443 ; + server $IP_LXC2:443 ; +} + server { listen 80; listen [::]:80; @@ -81,7 +97,7 @@ server { server_name $DOMAIN; location / { - proxy_pass https://$IP_LXC1; + proxy_pass https://$DOMAIN; proxy_redirect off; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; @@ -97,16 +113,6 @@ EOF sudo service nginx reload -# Mise en place de HAProxy -# [...] -# server yunohost_demo1 10.1.5.3:80 check -# server yunohost_demo2 10.1.5.4:80 check -# -# server yunohost_demo1 10.1.5.3:443 check -# server yunohost_demo2 10.1.5.4:443 check -# On garde la config actuelle -# Et manuellement, on commente les lignes des conteneurs dockers et on ajoutes les lignes des ip ci-dessus pour mettre à la place les conteneurs LXC. - echo "\nLe serveur est prêt à déployer les conteneurs de demo." echo "Exécutez le script demo_lxc_build.sh pour créer les conteneurs et mettre en place la demo." # Déploie les conteneurs de demo diff --git a/demo_lxc_destroy.sh b/demo_lxc_destroy.sh index 36e5271..bbf2c19 100755 --- a/demo_lxc_destroy.sh +++ b/demo_lxc_destroy.sh @@ -12,6 +12,15 @@ LXC_NAME2=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME2= | cut -d '=' - IP_LXC1=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC1= | cut -d '=' -f2) IP_LXC2=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC2= | cut -d '=' -f2) +# Check root +CHECK_ROOT=$EUID +if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi +if [ $CHECK_ROOT -eq 0 ] +then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root + echo "Le script ne doit pas être exécuté avec les droits root" + exit 1 +fi + "$script_dir/demo_stop.sh" echo "> Suppression des conteneurs et de leur snapshots" diff --git a/demo_lxc_remove.sh b/demo_lxc_remove.sh index 67cfb9b..d977849 100755 --- a/demo_lxc_remove.sh +++ b/demo_lxc_remove.sh @@ -8,7 +8,16 @@ if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) -DOMAIN=$(cat "$script_dir/demo_lxc_build.sh" | grep DOMAIN= | cut -d '=' -f2) +DOMAIN=$(cat "$script_dir/domain.ini") + +# Check root +CHECK_ROOT=$EUID +if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi +if [ $CHECK_ROOT -eq 0 ] +then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root + echo "Le script ne doit pas être exécuté avec les droits root" + exit 1 +fi "$script_dir/demo_lxc_destroy.sh" @@ -32,7 +41,3 @@ sed -i "$BEGIN_LINE,/^# End ssh $LXC_NAME1/d" $HOME/.ssh/config # Suppression du reverse proxy sudo rm /etc/nginx/conf.d/$DOMAIN.conf sudo service nginx reload - -# Suppression de la config haproxy -# La config haproxy est modifiée manuellement. -# On peut commenter les lignes des serveurs LXC. Et éventuellement relancer les conteneurs dockers. diff --git a/demo_switch.sh b/demo_switch.sh index 00c7cbe..b6b312e 100755 --- a/demo_switch.sh +++ b/demo_switch.sh @@ -30,8 +30,8 @@ then # [...] exit 1 else - # Bascule sur le conteneur B avec HAProxy... - # Automatique par HAProxy lorsque la machine A sera éteinte. + # Bascule sur le conteneur B avec le load balancing de nginx... + # Automatique par nginx lorsque la machine A sera éteinte. # Arrêt du conteneur A. Il est remplacé par le B sudo touch /var/lib/lxc/$LXC_A/lock_file # Met en place un fichier pour indiquer que la machine n'est pas encore dispo. sudo lxc-stop -n $LXC_A