Lets encrypt et upgrade lock

This commit is contained in:
Maniack Crudelis 2016-09-08 13:40:03 +02:00
parent 145666dbb3
commit 5f56d250b6
6 changed files with 91 additions and 15 deletions

View file

@ -93,9 +93,6 @@ 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

View file

@ -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)
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)
MAIL_ADDR=$(cat "$script_dir/demo_lxc_build.sh" | grep MAIL_ADDR= | cut -d '=' -f2)
# Check root
# CHECK_ROOT=$EUID
@ -29,9 +30,9 @@ echo "$DOMAIN" > "$script_dir/domain.ini"
# Créer le dossier de log
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 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 "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 | sudo tee /etc/nginx/conf.d/$DOMAIN.conf <<EOF >> "$LOG_BUILD_LXC" 2>&1
upstream $DOMAIN {
server $IP_LXC1:443 ;
server $IP_LXC1:80 ;
server $IP_LXC2:443 ;
}
@ -83,12 +84,12 @@ server {
listen [::]:80;
server_name $DOMAIN;
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /tmp/letsencrypt-auto;
}
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /tmp/letsencrypt-auto;
}
if (\$scheme = http) {
if (\$scheme = http) {
rewrite ^ https://\$server_name\$request_uri? permanent;
}
@ -101,6 +102,15 @@ server {
listen [::]:443 ssl;
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 / {
proxy_pass https://$DOMAIN;
proxy_redirect off;
@ -118,6 +128,55 @@ EOF
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 "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

View file

@ -28,7 +28,6 @@ sudo sysctl -p
echo "> Supprime le brige réseau"
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"
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
# Suppression du reverse proxy
echo "> Suppression de la config nginx"
sudo rm /etc/nginx/conf.d/$DOMAIN.conf
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

View file

@ -36,4 +36,8 @@ if sudo ifquery lxc_demo --state > /dev/null; then
sudo ifdown --force lxc_demo
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

View file

@ -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.
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.
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.
if [ "$(sudo lxc-info --name $LXC_B | grep -c "STOPPED")" -eq "1" ]
then
# 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
else
# Bascule sur le conteneur B avec le load balancing de nginx...

View file

@ -26,9 +26,11 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
sudo lxc-wait -n $MACHINE -s 'STOPPED' -t $TIME_OUT
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
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
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é.
echo "Échec du script $LIGNE"
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
fi
done
@ -93,6 +95,7 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
done
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