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 relancepython3 generer_vues_obsidian.pydans le dossierscripts.
- À 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