deploiement.sh

Note de lecture générée automatiquement

Le vrai fichier est scripts/linux/deploiement.sh (Obsidian n’affiche pas les scripts eux-mêmes). Ne modifie pas cette note : modifie le script, puis relance python3 generer_vues_obsidian.py dans le dossier scripts.

  • À quoi il sert : TP B2 version rendue et testée (11/11 tests sur le labo Vagrant)
  • Lancer (dans le dossier scripts/linux/) : ./deploiement.sh <IP> <web|bdd|wordpress|firewall> (version testee du TP, doc : TP deploiement - explications)
  • Fiche : TP deploiement - explications
  • Retour : 00 - Tous les scripts

Code

#!/bin/bash
# TP deploiement : installe un role sur une VM Debian en SSH
# utilisation : ./deploiement.sh <ip_de_la_vm> <web|bdd|wordpress|firewall>
 
# il faut 2 arguments, sinon on s'arrete
if [ $# -ne 2 ]
then
    echo "il faut 2 arguments : ./deploiement.sh <ip_de_la_vm> <web|bdd|wordpress|firewall>"
    exit 1
fi
 
# utilisateur sur la vm : Entree = vagrant (sudo sans mot de passe)
read -p "utilisateur sur la vm : " UTILISATEUR
[ -z "$UTILISATEUR" ] && UTILISATEUR="vagrant"
CIBLE="$UTILISATEUR@$1"
 
 
# web : apache + php pour wordpress
function role_web {
    ssh $CIBLE "[ -f /usr/sbin/apache2 ]"
    if [ $? -eq 0 ]
    then
        echo "apache2 deja installe"
    else
        ssh -tt $CIBLE "sudo apt update && sudo apt install -y apache2 php libapache2-mod-php php-mysql"
    fi
}
 
# bdd : mariadb qui ecoute sur toutes les interfaces
function role_bdd {
    ssh $CIBLE "[ -f /usr/sbin/mariadbd ]"
    if [ $? -eq 0 ]
    then
        echo "mariadb deja installe"
    else
        ssh -tt $CIBLE "sudo apt update && sudo apt install -y mariadb-server"
    fi
    # bind-address 127.0.0.1 -> 0.0.0.0, puis on relance mariadb
    ssh -tt $CIBLE "sudo sed -i 's/^bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnf && sudo systemctl restart mariadb"
}
 
# wordpress : dans /var/www/wordpress (il faut apache et php avant)
function role_wordpress {
    role_web
    ssh $CIBLE "[ -d /var/www/wordpress ]"
    if [ $? -eq 0 ]
    then
        echo "wordpress deja installe"
    else
        ssh -tt $CIBLE "cd /tmp && wget https://wordpress.org/latest.tar.gz && tar xzf latest.tar.gz \
            && sudo mv wordpress /var/www/wordpress \
            && sudo chown -R www-data:www-data /var/www/wordpress \
            && sudo sed -i 's#/var/www/html#/var/www/wordpress#' /etc/apache2/sites-available/000-default.conf \
            && sudo systemctl restart apache2"
    fi
}
 
# firewall : on n'ouvre que ce qui tourne (a lancer en dernier)
function role_firewall {
    # on repart de zero : ACCEPT avant de vider, pour ne pas se couper
    ssh -tt $CIBLE "sudo iptables -P INPUT ACCEPT && sudo iptables -F \
        && sudo iptables -A INPUT -i lo -j ACCEPT \
        && sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT \
        && sudo iptables -A INPUT -p icmp -j ACCEPT \
        && sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT"
 
    # apache ecoute sur le port 80 ?
    ssh $CIBLE "ss -tan | grep LISTEN | grep ':80 '"
    if [ $? -eq 0 ]
    then
        echo "apache tourne : on ouvre 80 et 443"
        ssh -tt $CIBLE "sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT"
    fi
 
    # mariadb ecoute sur le port 3306 ?
    ssh $CIBLE "ss -tan | grep LISTEN | grep ':3306 '"
    if [ $? -eq 0 ]
    then
        echo "mariadb tourne : on ouvre 3306"
        ssh -tt $CIBLE "sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT"
    fi
 
    # tout le reste est bloque, puis on sauvegarde les regles
    ssh -tt $CIBLE "sudo iptables -P INPUT DROP && sudo iptables-save | sudo tee /etc/iptables.rules"
}
 
 
# on lance la fonction du role demande
case $2 in
    web ) role_web;;
    bdd ) role_bdd;;
    wordpress ) role_wordpress;;
    firewall ) role_firewall;;
    * ) echo "role inconnu : $2 (web, bdd, wordpress ou firewall)"; exit 1;;
esac