#!/bin/bash
#####################################################################################
#																					#
#	Auteur : Néhémie Barkia															#
#																					#
#	Synopsis : Scripte d'installation et de configuration automatique`				#
#   		   d'un serveur LAMP (Apache, MariaDB, PHP, PhpMyAdmin, OpenSSH)		#
#																					#
#	Scénario : 1. Mise à jour des packets et du système si besoin					#
#			   2. Installaition de Apache, MariaDB, PHP, PhpMyAdmin, OpenSSH		#
#																					#
#####################################################################################
# sortir du script en cas d'erreur
set -e
# Fonction pour l'affichage écran et la journalisation dans un fichier de log
suiviInstallation()
{
	echo "# $1"
	echo "#####"`date +"%d-%m-%Y %T"`"$1">>$FICHIER_DE_LOG
}

# Fonction qui gère l'affichage d'un message de réussite
toutEstOK()
{
	echo -e "  '--> \e[32mOK\e[0m"
}
# Fonction qui gère l'affichage d'un message d'erreur et l'arrêt du script en cas de problème
erreurOnSort()
{
    echo -e "\e[41m"`tail -1 $FICHIER_DE_LOG`"\e[0m"
    echo -e "  '--> \e[31mUne erreur s'est produite\e[0m, consultez le fichier \e[93m$FICHIER_DE_LOG\e[0m pour plus d'informations"
    exit 1
}
# Variables 
touch /root/install-lamp.log
FICHIER_DE_LOG="/root/install-lamp.log"
MOT_DE_PASSE_PHPMYADMIN="P@ssw0rd"
# On fait un clear pour la propreté de l'affichage.
clear
# Installation des services Apache, MariaDB, PHP et SSH
suiviInstallation "Installation des services Apache, MariaDB et SSH"
apt-get -y install apache2 mariadb-server openssh-server &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
# Autorisation de root à se connecter en SSH (2 opérations)
suiviInstallation "Autorisation de root à se connecter en SSH (2 opérations)"
sed -i '/^#PermitRootLogin* /a PermitRootLogin yes' /etc/ssh/sshd_config &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
systemctl reload ssh &>>$FICHIER_DE_LOG&&toutEstOK || erreurOnSort
# Configuration de MariaDBpour l’accès distant (2 opérations)
suiviInstallation "Configuration de MariaDB pour l’accès distant (2 opérations)"
sed -i -e 's/^bind-address/#bind-address/' /etc/mysql/mariadb.conf.d/50-server.cnf &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
systemctl restart mariadb &>>$FICHIER_DE_LOG&&toutEstOK || erreurOnSort
# Création d'un compte admin pour l'administration de MariaDB
suiviInstallation "Création d'un compte admin pour l'administration de MariaDB"
mariadb -u root -e "CREATE USER admin@'%'; GRANT ALL PRIVILEGES ON *.* to admin@'%' IDENTIFIED BY '$MOT_DE_PASSE_PHPMYADMIN' WITH GRANT OPTION; FLUSH PRIVILEGES;" &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
# Installation de php7.4
suiviInstallation "Instllation de PHP 7.4"
# Téléchargement de la clé GPG
suiviInstallation "Téléchargement de la clé GPG"
apt -y install lsb-release apt-transport-https ca-certificates &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
suiviInstallation "Ajout du dépôt PPA" 
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
suiviInstallation "Installaition de PHP 7.4"
apt update &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
apt -y install php7.4 -y &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
suiviInstallation "Installaition du module Apache pour PHP 7.4"
apt install libapache2-mod-php7.4 -y &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
suiviInstallation "Installaition des modules PHP 7.4 les plus courants"
apt-get install php7.4-{common,bcmath,bz2,intl,gd,mbstring,mysql,zip,cli,fpm,json,pdo,mbstring,curl,xml,imagick,tidy,xmlrpc,dev,imap,opcache,soap} -y &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
# Configuration du site apache.
suiviInstallation "Configuration du site pour GSB"
echo "000-default" |a2dissite &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
cd /etc/apache2/sites-available/
rm *
cat <<EOF > /etc/apache2/sites-available/gsb.conf
<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
		Alias "/db" "/var/www/db"


        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>
EOF
mkdir /var/www/db
echo "gsb" |a2ensite &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
# Installation de phpMyAdmin 
suiviInstallation "Installation de phpMyAdmin"
apt-get install unzip -y &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
cd /var/www/db &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.5/phpMyAdmin-4.9.5-all-languages.zip &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
unzip phpMyAdmin-4.9.5-all-languages.zip &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
mv phpMyAdmin-4.9.5-all-languages/ phpmyadmin &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
rm phpMyAdmin-4.9.5-all-languages.zip &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
cd phpmyadmin
cp * ../ -r
cd ..
rm phpmyadmin -r
#FIX erreur liée aux fichiers temporaires
mkdir tmp && chmod 777 tmp
echo "$cfg['TempDir'] = 'tmp';" >> config.sample.inc.php
# Deploiment du site web
suiviInstallation "Deploiment du site web"
cd /var/www/html &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
rm * -r &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
wget http://gil83.fr/si7/GSB_Appli.zip &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
unzip GSB_Appli.zip &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
rm GSB_Appli.zip &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
# Restauration de la base de données
suiviInstallation "Restauration de la base de données"
wget http://gil83.fr/si7/gsb_restore.sql &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
mysql -u root <gsb_restore.sql &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
rm gsb_restore.sql &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
/etc/init.d/apache2 restart &>>$FICHIER_DE_LOG && toutEstOK || erreurOnSort
# Fin
suiviInstallation "Le serveur est prêt !"&& exit 0