mirror of
https://github.com/YunoHost/yunohost_demo.git
synced 2024-09-03 19:56:44 +02:00
Lets encrypt et upgrade lock
This commit is contained in:
parent
145666dbb3
commit
5f56d250b6
6 changed files with 91 additions and 15 deletions
|
@ -93,9 +93,6 @@ USER_DEMO_CLEAN=${USER_DEMO//"_"/""}
|
||||||
echo "> Ajout de l'utilisateur de demo" | tee -a "$LOG_BUILD_LXC"
|
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\""
|
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"
|
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
|
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost -v" | tee -a "$LOG_BUILD_LXC" 2>&1
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ 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)
|
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_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)
|
IP_LXC2=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC2= | cut -d '=' -f2)
|
||||||
|
MAIL_ADDR=$(cat "$script_dir/demo_lxc_build.sh" | grep MAIL_ADDR= | cut -d '=' -f2)
|
||||||
|
|
||||||
# Check root
|
# Check root
|
||||||
# CHECK_ROOT=$EUID
|
# CHECK_ROOT=$EUID
|
||||||
|
@ -29,9 +30,9 @@ echo "$DOMAIN" > "$script_dir/domain.ini"
|
||||||
# Créer le dossier de log
|
# Créer le dossier de log
|
||||||
sudo mkdir -p $(dirname $LOG_BUILD_LXC)
|
sudo mkdir -p $(dirname $LOG_BUILD_LXC)
|
||||||
|
|
||||||
echo "> Update et install lxc lxctl" | tee "$LOG_BUILD_LXC"
|
echo "> Update et install lxc, lxctl et mailutils" | tee "$LOG_BUILD_LXC"
|
||||||
sudo apt-get update >> "$LOG_BUILD_LXC" 2>&1
|
sudo apt-get update >> "$LOG_BUILD_LXC" 2>&1
|
||||||
sudo apt-get install -y lxc lxctl >> "$LOG_BUILD_LXC" 2>&1
|
sudo apt-get install -y lxc lxctl mailutils >> "$LOG_BUILD_LXC" 2>&1
|
||||||
|
|
||||||
echo "> Autoriser l'ip forwarding, pour router vers la machine virtuelle." | tee -a "$LOG_BUILD_LXC"
|
echo "> Autoriser l'ip forwarding, pour router vers la machine virtuelle." | tee -a "$LOG_BUILD_LXC"
|
||||||
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_demo.conf >> "$LOG_BUILD_LXC" 2>&1
|
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_demo.conf >> "$LOG_BUILD_LXC" 2>&1
|
||||||
|
@ -74,7 +75,7 @@ EOF
|
||||||
echo "> Mise en place du reverse proxy et du load balancing" | tee -a "$LOG_BUILD_LXC"
|
echo "> Mise en place du reverse proxy et du load balancing" | tee -a "$LOG_BUILD_LXC"
|
||||||
echo | sudo tee /etc/nginx/conf.d/$DOMAIN.conf <<EOF >> "$LOG_BUILD_LXC" 2>&1
|
echo | sudo tee /etc/nginx/conf.d/$DOMAIN.conf <<EOF >> "$LOG_BUILD_LXC" 2>&1
|
||||||
upstream $DOMAIN {
|
upstream $DOMAIN {
|
||||||
server $IP_LXC1:443 ;
|
server $IP_LXC1:80 ;
|
||||||
server $IP_LXC2:443 ;
|
server $IP_LXC2:443 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,12 +84,12 @@ server {
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
server_name $DOMAIN;
|
server_name $DOMAIN;
|
||||||
|
|
||||||
location '/.well-known/acme-challenge' {
|
location '/.well-known/acme-challenge' {
|
||||||
default_type "text/plain";
|
default_type "text/plain";
|
||||||
root /tmp/letsencrypt-auto;
|
root /tmp/letsencrypt-auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\$scheme = http) {
|
if (\$scheme = http) {
|
||||||
rewrite ^ https://\$server_name\$request_uri? permanent;
|
rewrite ^ https://\$server_name\$request_uri? permanent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,6 +102,15 @@ server {
|
||||||
listen [::]:443 ssl;
|
listen [::]:443 ssl;
|
||||||
server_name $DOMAIN;
|
server_name $DOMAIN;
|
||||||
|
|
||||||
|
ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
|
||||||
|
ssl_session_timeout 5m;
|
||||||
|
ssl_session_cache shared:SSL:50m;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||||
|
ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;
|
||||||
|
add_header Strict-Transport-Security "max-age=31536000;";
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_pass https://$DOMAIN;
|
proxy_pass https://$DOMAIN;
|
||||||
proxy_redirect off;
|
proxy_redirect off;
|
||||||
|
@ -118,6 +128,55 @@ EOF
|
||||||
|
|
||||||
sudo service nginx reload
|
sudo service nginx reload
|
||||||
|
|
||||||
|
echo "> Installation de let's encrypt et création du certificat SSL." | tee -a "$LOG_BUILD_LXC"
|
||||||
|
cd ~
|
||||||
|
# Télécharge let's encrypt
|
||||||
|
git clone https://github.com/letsencrypt/letsencrypt
|
||||||
|
cd letsencrypt/
|
||||||
|
# Installe les dépendances de let's encrypt
|
||||||
|
./letsencrypt-auto --help
|
||||||
|
sudo mkdir /etc/letsencrypt
|
||||||
|
|
||||||
|
# Créer le fichier de config
|
||||||
|
echo | sudo tee /etc/letsencrypt/conf.ini <<EOF >> "$LOG_BUILD_LXC" 2>&1
|
||||||
|
#################################
|
||||||
|
# Let's encrypt configuration #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Taille de la clef
|
||||||
|
rsa-key-size = 4096
|
||||||
|
|
||||||
|
# Email de notification / contact si necessaire dans le futur
|
||||||
|
email = $MAIL_ADDR
|
||||||
|
|
||||||
|
# Utiliser l'interface texte
|
||||||
|
text = True
|
||||||
|
# Accepter les Conditions d'Utilisation du service
|
||||||
|
agree-tos = True
|
||||||
|
|
||||||
|
# Utiliser la methode d'authentification webroot
|
||||||
|
# avec le contenu dans /tmp/letsencrypt-auto
|
||||||
|
authenticator = webroot
|
||||||
|
webroot-path = /tmp/letsencrypt-auto
|
||||||
|
|
||||||
|
# (Serveur de test uniquement : si vous l'utilisez,
|
||||||
|
# votre certificat ne sera pas vraiment valide)
|
||||||
|
# server = https://acme-staging.api.letsencrypt.org/directory
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkdir -p /tmp/letsencrypt-auto
|
||||||
|
# Créer le certificat
|
||||||
|
./letsencrypt-auto certonly --config /etc/letsencrypt/conf.ini -d $DOMAIN
|
||||||
|
|
||||||
|
# Route l'upstream sur le port 443. Le port 80 servait uniquement à let's encrypt
|
||||||
|
sudo sed -i "s/server $IP_LXC1:80 ;/server $IP_LXC1:443 ;/" /etc/nginx/conf.d/$DOMAIN.conf
|
||||||
|
|
||||||
|
# Mise en place du cron de renouvellement.
|
||||||
|
wget https://raw.githubusercontent.com/YunoHost-Apps/letsencrypt_ynh/master/sources/certificateRenewer
|
||||||
|
sed -i "s/DOMAIN_NAME/$DOMAIN/" certificateRenewer
|
||||||
|
sed -i "s/ADMIN_EMAIL/$MAIL_ADDR/" certificateRenewer
|
||||||
|
sudo mv certificateRenewer /etc/cron.weekly/
|
||||||
|
|
||||||
echo "\nLe serveur est prêt à déployer les conteneurs de demo."
|
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."
|
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
|
# Déploie les conteneurs de demo
|
||||||
|
|
|
@ -28,7 +28,6 @@ sudo sysctl -p
|
||||||
echo "> Supprime le brige réseau"
|
echo "> Supprime le brige réseau"
|
||||||
sudo rm /etc/network/interfaces.d/lxc_demo
|
sudo rm /etc/network/interfaces.d/lxc_demo
|
||||||
|
|
||||||
# LXC était déjà installé sur le serveur de demo actuel. On ne l'enlève pas.
|
|
||||||
echo "> Remove lxc lxctl"
|
echo "> Remove lxc lxctl"
|
||||||
sudo apt-get remove lxc lxctl
|
sudo apt-get remove lxc lxctl
|
||||||
|
|
||||||
|
@ -39,5 +38,15 @@ BEGIN_LINE=$(cat $HOME/.ssh/config | grep -n "^# ssh $LXC_NAME1" | cut -d':' -f
|
||||||
sed -i "$BEGIN_LINE,/^# End ssh $LXC_NAME1/d" $HOME/.ssh/config
|
sed -i "$BEGIN_LINE,/^# End ssh $LXC_NAME1/d" $HOME/.ssh/config
|
||||||
|
|
||||||
# Suppression du reverse proxy
|
# Suppression du reverse proxy
|
||||||
|
echo "> Suppression de la config nginx"
|
||||||
sudo rm /etc/nginx/conf.d/$DOMAIN.conf
|
sudo rm /etc/nginx/conf.d/$DOMAIN.conf
|
||||||
sudo service nginx reload
|
sudo service nginx reload
|
||||||
|
|
||||||
|
# Suppression du certificat Let's encrypt
|
||||||
|
echo "> Suppression de Let's encrypt"
|
||||||
|
sudo rm -r /etc/letsencrypt
|
||||||
|
sudo rm -r ~/.local/share/letsencrypt
|
||||||
|
sudo rm -r ~/letsencrypt
|
||||||
|
sudo rm -r /var/lib/letsencrypt
|
||||||
|
# Supprime la tache cron
|
||||||
|
sudo rm /etc/cron.weekly/certificateRenewer
|
||||||
|
|
|
@ -36,4 +36,8 @@ if sudo ifquery lxc_demo --state > /dev/null; then
|
||||||
sudo ifdown --force lxc_demo
|
sudo ifdown --force lxc_demo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Suppression des lock."
|
||||||
|
sudo rm /var/lib/lxc/$LXC_NAME1/lock_file
|
||||||
|
sudo rm /var/lib/lxc/$LXC_NAME2/lock_file
|
||||||
|
|
||||||
sudo lxc-ls -f
|
sudo lxc-ls -f
|
||||||
|
|
|
@ -22,13 +22,17 @@ else # Sinon, on suppose que c'est la machine 2 qui est en cours.
|
||||||
# Si aucune machine ne tourne, la première démarrera.
|
# Si aucune machine ne tourne, la première démarrera.
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
while sudo test -e /var/lib/lxc/$LXC_B/lock_file; do
|
||||||
|
sleep 5 # Attend que le conteneur soit libéré par le script upgrade, le cas échéant.
|
||||||
|
done
|
||||||
|
|
||||||
# Démarre le conteneur B et arrête le conteneur A.
|
# Démarre le conteneur B et arrête le conteneur A.
|
||||||
sudo lxc-start -n $LXC_B -o "$script_dir/demo_switch.log" -d > /dev/null # Démarre l'autre machine
|
sudo lxc-start -n $LXC_B -o "$script_dir/demo_switch.log" -d > /dev/null # Démarre l'autre machine
|
||||||
sleep 10 # Attend 10 seconde pour s'assurer du démarrage de la machine.
|
sleep 10 # Attend 10 seconde pour s'assurer du démarrage de la machine.
|
||||||
if [ "$(sudo lxc-info --name $LXC_B | grep -c "STOPPED")" -eq "1" ]
|
if [ "$(sudo lxc-info --name $LXC_B | grep -c "STOPPED")" -eq "1" ]
|
||||||
then
|
then
|
||||||
# Le conteneur n'a pas réussi à démarrer. On averti un responsable par mail...
|
# Le conteneur n'a pas réussi à démarrer. On averti un responsable par mail...
|
||||||
mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR "Échec du démarrage du conteneur $LXC_B sur le serveur de demo!"
|
mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR <<< "Échec du démarrage du conteneur $LXC_B sur le serveur de demo!"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
# Bascule sur le conteneur B avec le load balancing de nginx...
|
# Bascule sur le conteneur B avec le load balancing de nginx...
|
||||||
|
|
|
@ -26,9 +26,11 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
|
||||||
sudo lxc-wait -n $MACHINE -s 'STOPPED' -t $TIME_OUT
|
sudo lxc-wait -n $MACHINE -s 'STOPPED' -t $TIME_OUT
|
||||||
|
|
||||||
while sudo test -e /var/lib/lxc/$MACHINE/lock_file; do
|
while sudo test -e /var/lib/lxc/$MACHINE/lock_file; do
|
||||||
sleep 1 # Attend que le conteneur soit libéré par le script switch.
|
sleep 5 # Attend que le conteneur soit libéré par le script switch.
|
||||||
done
|
done
|
||||||
|
|
||||||
|
sudo touch /var/lib/lxc/$MACHINE/lock_file # Met en place un fichier pour indiquer que la machine est indisponible pendant l'upgrade
|
||||||
|
|
||||||
# Restaure le snapshot
|
# Restaure le snapshot
|
||||||
sudo lxc-snapshot -r snap0 -n $MACHINE
|
sudo lxc-snapshot -r snap0 -n $MACHINE
|
||||||
|
|
||||||
|
@ -63,7 +65,7 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
|
||||||
if [ "$?" -ne 0 ]; then # Si le script a échoué, le snapshot est annulé.
|
if [ "$?" -ne 0 ]; then # Si le script a échoué, le snapshot est annulé.
|
||||||
echo "Échec du script $LIGNE"
|
echo "Échec du script $LIGNE"
|
||||||
mv -f "$script_dir/upgrade.d/$LIGNE" "$script_dir/upgrade.d/$LIGNE.fail"
|
mv -f "$script_dir/upgrade.d/$LIGNE" "$script_dir/upgrade.d/$LIGNE.fail"
|
||||||
mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR "Échec d'exécution du script d'upgrade $LIGNE sur le conteneur $MACHINE sur le serveur de demo!\nLe script a été renommé en .fail, il ne sera plus exécuté tant que le préfixe ne sera pas retiré."
|
mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR <<< "Échec d'exécution du script d'upgrade $LIGNE sur le conteneur $MACHINE sur le serveur de demo!\nLe script a été renommé en .fail, il ne sera plus exécuté tant que le préfixe ne sera pas retiré."
|
||||||
update_apt=0
|
update_apt=0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -93,6 +95,7 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
sudo rm /var/lib/lxc/$MACHINE/lock_file # Libère le lock, la machine est à nouveau disponible
|
||||||
}
|
}
|
||||||
|
|
||||||
UPGRADE_DEMO_CONTAINER $LXC_NAME1 $IP_LXC1
|
UPGRADE_DEMO_CONTAINER $LXC_NAME1 $IP_LXC1
|
||||||
|
|
Loading…
Reference in a new issue