#!/bin/bash

# 0) Présentation
clear
echo "--------------------------------------------------------"
echo "| Bienvenue dans ce script d'installation de Wordpress |"
echo "--------------------------------------------------------"
echo
echo "| Nous allons déployer Wordpress sur le VirtualHost par défaut de Nginx (http)"
echo
read -p "| Rappel : Avez-vous exécuté ce script en tant que root ? (O/N) " confirm
case $confirm in
	N|n)
		echo "| Veuillez ré-exécuter ce script en tant que root"
		echo
		exit 0
		;;
esac


# 1) Mettre le système à jour
clear
echo "| - Mise à jour du système"
echo
sleep 1
apt update
apt upgrade -y

# 2) Installer le serveur SQL MariaDB :
clear
echo "| - Installer le serveur SQL MariaDB"
echo
sleep 1
apt install mariadb-server -y

# 3) Initialiser MariaDB
clear
echo "| - Initialiser MariaDB"
echo
echo "| Veuillez répondre aux questions avec le choix par défaut et entrer un mot de passe pour l'utilisateur 'root' de MariaDB lorsque demandé"
echo
sleep 3
mariadb-secure-installation

# 4) Créer la base "wordpressdb" et l'utilisateur privilégié sur cette base "adminwp"
clear
echo "| - Création de la base SQL 'wordpressdb' et de l'utilisateur privilégié 'adminwp'"
echo
mysqladmin -uroot create wordpressdb
mariadb -uroot -e"GRANT ALL ON wordpressdb.* TO adminwp@localhost IDENTIFIED BY 'P@ssw0rd'" wordpressdb

# 5) Installer le serveur web "Nginx"
clear
echo "| - Installation du serveur web 'Nginx' et suppression de la page index.html par défaut"
echo
apt install nginx -y
systemctl enable nginx
systemctl start nginx

# Nous installons Wordpress dans le root par défaut de Nginx, donc on vire le fichier index.html par défaut
rm /var/www/html/index.nginx-debian.html

# 7) Télécharger Wordpress, le décompresser et l'envoyer dans le root
clear
echo "| - Téléchargement de Wordpress, décompression et installation du contenu dans le root"
echo
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xvzf latest.tar.gz
rm latest.tar.gz
cp -r wordpress/* /var/www/html/

# 8) Changer la propriété et les droits sur le DocumentRoot
clear
echo "| - Application des droits sur le DocumentRoot"
echo
sleep 1
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

# 9) Installer PHP et les dépendances nécessaires au bon fonctionnement de Wordpress
clear
echo "| - Installation de PHP et des dépendances nécessaires, durcissement de la configuration"
echo
apt install php-fpm php-cli php-mysql php-zip php-curl php-xml -y

# 10) Configurer le virtualhost par défaut de Nginx
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.BAK

cat > /etc/nginx/sites-available/default << EOF
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Pas besoin de spécifier un server_name si on se contente de l'IP ou du nom local.
    # server_name votre_domaine_ou_IP;

    # On indique à Nginx que le root du site est le répertoire public de WordPress
    root /var/www/html;
    index index.php index.html index.htm;

    # Bloc principal : si le fichier demandé n'existe pas, on réécrit vers index.php
    location / {
        try_files \$uri \$uri/ index.php;
    }

    # Traitement des fichiers PHP via PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        # Vérifiez la version de PHP et le chemin du socket si nécessaire.
    }

    # Sécurité basique : interdiction d’accès aux fichiers .sql
    location ~* \.sql$ {
        deny all;
    }

    error_log /var/log/nginx/wp_error.log;
    access_log /var/log/nginx/wp_access.log;
}
EOF

# 10) Indiquer à Wordpress comment se connecter à la base SQL
clear
echo "| - Indiquer à Wordpress comment se connecter à sa base SQL"
echo
sleep 1
cd /var/www/html
cp wp-config-sample.php wp-config.php
sed -i 's/database_name_here/wordpressdb/' wp-config.php
sed -i 's/username_here/adminwp/' wp-config.php
sed -i 's/password_here/P@ssw0rd/' wp-config.php
systemctl restart nginx


clear
echo "---------------------------------------------------"
echo "| L'installation est terminée"
echo
echo "| Connectez-vous depuis un navigateur web à"
echo "| http://IP-DE-CE-SERVEUR"
echo