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"
|
||||
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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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...
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue