mirror of
https://github.com/YunoHost/yunohost_demo.git
synced 2024-09-03 19:56:44 +02:00
Load balancing nginx
This commit is contained in:
parent
4f9443a152
commit
e3e08575de
5 changed files with 62 additions and 28 deletions
|
@ -12,8 +12,8 @@ PLAGE_IP=10.1.5
|
||||||
IP_LXC1=10.1.5.3
|
IP_LXC1=10.1.5.3
|
||||||
IP_LXC2=10.1.5.4
|
IP_LXC2=10.1.5.4
|
||||||
ARG_SSH=-t
|
ARG_SSH=-t
|
||||||
DOMAIN=demotest1.tld
|
DOMAIN=$(cat "$script_dir/domain.ini")
|
||||||
YUNO_PWD=admin
|
YUNO_PWD=demo
|
||||||
LXC_NAME1=yunohost_demo1
|
LXC_NAME1=yunohost_demo1
|
||||||
LXC_NAME2=yunohost_demo2
|
LXC_NAME2=yunohost_demo2
|
||||||
TIME_TO_SWITCH=30
|
TIME_TO_SWITCH=30
|
||||||
|
@ -22,6 +22,15 @@ TIME_TO_SWITCH=30
|
||||||
USER_DEMO=demo
|
USER_DEMO=demo
|
||||||
PASSWORD_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"
|
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
|
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"
|
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
|
||||||
|
|
||||||
|
@ -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
|
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"
|
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
|
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 "> Mise en place du cron de switch"
|
||||||
echo | sudo tee /etc/cron.d/demo_switch <<EOF
|
echo | sudo tee /etc/cron.d/demo_switch <<EOF > /dev/null
|
||||||
# Switch des conteneurs toutes les $TIME_TO_SWITCH minutes
|
# 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
|
*/$TIME_TO_SWITCH * * * * root $script_dir/demo_switch.sh >> "$script_dir/demo_switch.log" 2>&1
|
||||||
EOF
|
EOF
|
||||||
# Et du cron d'upgrade
|
echo "> Et du cron d'upgrade"
|
||||||
echo | sudo tee /etc/cron.d/demo_upgrade <<EOF
|
echo | sudo tee /etc/cron.d/demo_upgrade <<EOF > /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.
|
# 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
|
2 3 * * * root $script_dir/demo_switch.sh >> "$script_dir/demo_upgrade.log" 2>&1
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Démarrage de la démo
|
echo "> Démarrage de la démo"
|
||||||
"$script_dir/demo_start.sh"
|
"$script_dir/demo_start.sh"
|
||||||
|
|
||||||
# Après le démarrage du premier conteneur, fait un snapshot du deuxième.
|
# Après le démarrage du premier conteneur, fait un snapshot du deuxième.
|
||||||
|
|
|
@ -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)
|
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)
|
||||||
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
|
# Créer le dossier de log
|
||||||
sudo mkdir -p $(dirname $LOG_BUILD_LXC)
|
sudo mkdir -p $(dirname $LOG_BUILD_LXC)
|
||||||
|
@ -60,8 +71,13 @@ IdentityFile $HOME/.ssh/$LXC_NAME1
|
||||||
# End ssh $LXC_NAME1
|
# End ssh $LXC_NAME1
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo "> Mise en place du reverse proxy" | 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
|
echo | sudo tee /etc/nginx/conf.d/$DOMAIN.conf <<EOF >> "$LOG_BUILD_LXC" 2>&1
|
||||||
|
upstream $DOMAIN {
|
||||||
|
server $IP_LXC1:443 ;
|
||||||
|
server $IP_LXC2:443 ;
|
||||||
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
|
@ -81,7 +97,7 @@ server {
|
||||||
server_name $DOMAIN;
|
server_name $DOMAIN;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_pass https://$IP_LXC1;
|
proxy_pass https://$DOMAIN;
|
||||||
proxy_redirect off;
|
proxy_redirect off;
|
||||||
proxy_set_header Host \$host;
|
proxy_set_header Host \$host;
|
||||||
proxy_set_header X-Real-IP \$remote_addr;
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
@ -97,16 +113,6 @@ EOF
|
||||||
|
|
||||||
sudo service nginx reload
|
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 "\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
|
||||||
|
|
|
@ -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_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)
|
||||||
|
|
||||||
|
# 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"
|
"$script_dir/demo_stop.sh"
|
||||||
|
|
||||||
echo "> Suppression des conteneurs et de leur snapshots"
|
echo "> Suppression des conteneurs et de leur snapshots"
|
||||||
|
|
|
@ -8,7 +8,16 @@
|
||||||
if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi
|
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)
|
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"
|
"$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
|
# Suppression du reverse proxy
|
||||||
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 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.
|
|
||||||
|
|
|
@ -30,8 +30,8 @@ then
|
||||||
# [...]
|
# [...]
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
# Bascule sur le conteneur B avec HAProxy...
|
# Bascule sur le conteneur B avec le load balancing de nginx...
|
||||||
# Automatique par HAProxy lorsque la machine A sera éteinte.
|
# Automatique par nginx lorsque la machine A sera éteinte.
|
||||||
# Arrêt du conteneur A. Il est remplacé par le B
|
# 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 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
|
sudo lxc-stop -n $LXC_A
|
||||||
|
|
Loading…
Reference in a new issue