# Serveur Web

## ⚙️ Installation du rôle IIS et des modules nécessaires

Installez IIS et le module CGI requis :

```powershell
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Install-WindowsFeature -Name Web-CGI -IncludeManagementTools
```

***

## **🛠️ Installation et configuration de PHP**

{% stepper %}
{% step %}
**📥 Téléchargez PHP (version Non Thread Safe).**

```powershell
Invoke-WebRequest "https://windows.php.net/downloads/releases/php-8.4.3-nts-Win32-vs17-x64.zip" -OutFile ".\Downloads\php.zip"
Expand-Archive -Path ".\Downloads\php.zip" -DestinationPath "C:\php"
```

{% endstep %}

{% step %}
**📝 Créez le fichier `php.ini` à partir du modèle.**

```powershell
Copy-Item "C:\php\php.ini-production" "C:\php\php.ini"
```

{% endstep %}

{% step %}
**✏️ Modifiez le fichier `php.ini` :** Ouvrez le fichier pour le modifier.

```powershell
notepad "C:\php\php.ini"
```

Recherchez et ajustez les lignes suivantes :

```ini
extension_dir = "C:\php\ext"
cgi.force_redirect = 0
fastcgi.impersonate = 1
log_errors = On
error_log = "C:\php\logs\php_errors.log"
```

Activez les extensions nécessaires (décommentez en supprimant le `;`) :

```ini
extension=mysqli
extension=curl
extension=mbstring
```

{% endstep %}

{% step %}
**📂 Créez le répertoire pour les logs PHP.**

```powershell
New-Item -ItemType Directory -Path "C:\php\logs"
```

{% endstep %}

{% step %}
**📦 Assurez-vous que les Visual C++ Redistributables sont installés.**

```powershell
New-Item -ItemType Directory -Path "C:\Temp"
Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vc_redist.x64.exe" -OutFile "C:\Temp\vc_redist.x64.exe"
Start-Process -FilePath "C:\Temp\vc_redist.x64.exe" -ArgumentList "/install /quiet /norestart" -Wait
```

{% endstep %}
{% endstepper %}

***

## **⚡ Configuration de PHP avec FastCGI dans IIS**

{% stepper %}
{% step %}
**➕ Ajoutez PHP à FastCGI.**

```powershell
Import-Module WebAdministration
Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -filter "system.webServer/fastCgi" -name "." -value @(
    @{
        fullPath = "C:\php\php-cgi.exe";
        arguments = "";
        instanceMaxRequests = 10000;
        environmentVariables = @(
            @{name="PHPRC"; value="C:\php"}
        )
    }
)
```

{% endstep %}

{% step %}
**🖇️ Ajoutez le handler PHP pour IIS.**

```powershell
Add-WebConfiguration "/system.webServer/handlers" -Value @{
    Name = "PHP_via_FastCGI";
    Path = "*.php";
    Verb = "GET,HEAD,POST";
    Modules = "FastCgiModule";
    ScriptProcessor = "C:\php\php-cgi.exe";
    ResourceType = "Either";
}
```

{% endstep %}

{% step %}
**🏠 Ajoutez `index.php` comme document par défaut.**

```powershell
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/defaultDocument/files" -name "." -value @{value="index.php"}
```

{% endstep %}

{% step %}
**🖍️ Modifiez le fichier `applicationHost.config` pour vérifier FastCGI.**

Ouvrez le fichier :

```powershell
notepad "C:\Windows\System32\inetsrv\config\applicationHost.config"
```

Dans le fichier, ajoutez ou modifiez la section suivante :

```xml
<fastCgi>
    <application fullPath="C:\php\php-cgi.exe">
        <environmentVariables>
            <environmentVariable name="PHPRC" value="C:\php" />
        </environmentVariables>
    </application>
</fastCgi>
```

{% endstep %}
{% endstepper %}

***

## **🔒 Ajustement des permissions**

```powershell
icacls "C:\php" /grant IUSR:R /T
icacls "C:\php" /grant IIS_IUSRS:R /T
icacls "C:\inetpub\wwwroot" /grant IUSR:R /T
icacls "C:\inetpub\wwwroot" /grant IIS_IUSRS:R /T
```

***

## **🌟 Installation de WordPress**

{% stepper %}
{% step %}
**📥 Téléchargez et extrayez WordPress dans le répertoire Web.**

```powershell
Invoke-WebRequest "https://wordpress.org/latest.zip" -OutFile "C:\inetpub\wwwroot\wordpress.zip"
Expand-Archive -Path "C:\inetpub\wwwroot\wordpress.zip" -DestinationPath "C:\inetpub\wwwroot"
Remove-Item "C:\inetpub\wwwroot\wordpress.zip"
```

{% endstep %}

{% step %}
**🔑 Attribuez les permissions nécessaires.**

```powershell
icacls "C:\inetpub\wwwroot\wordpress" /grant IUSR:R /T
icacls "C:\inetpub\wwwroot\wordpress" /grant IIS_IUSRS:R /T
```

{% endstep %}
{% endstepper %}

***

## **🔍 Résolution des erreurs et activation des logs**

{% stepper %}
{% step %}
**🔍 Activez les erreurs détaillées dans le navigateur.**

Créez/modifiez le fichier `web.config` dans le répertoire racine du site Web :

```powershell
notepad "C:\inetpub\wwwroot\web.config"
```

Ajoutez-y le contenu suivant :

```xml
<configuration>
    <system.webServer>
        <httpErrors errorMode="Detailed" />
        <asp>
            <compilation debug="true" />
        </asp>
    </system.webServer>
</configuration>
```

{% endstep %}

{% step %}
**🛠️ Attribuez les permissions nécessaires au fichier `web.config.`**

```powershell
icacls "C:\inetpub\wwwroot\web.config" /grant IUSR:R /T
icacls "C:\inetpub\wwwroot\web.config" /grant IIS_IUSRS:R /T
```

{% endstep %}
{% endstepper %}

***

## 🐬 Installation de MySQL

{% stepper %}
{% step %}
**📥 Téléchargez l'installateur MySQL Community Server.**

```powershell
Invoke-WebRequest -Uri "https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.34.0.msi" -OutFile "C:\Temp\mysql-installer.msi"
```

{% endstep %}

{% step %}
**🚀 Installez MySQL Server.**

```powershell
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i C:\Temp\mysql-installer.msi /quiet" -Wait
```

{% endstep %}

{% step %}
**⚙️ Executez MySQL Installer pour installer MySQL Server.**

```powershell
& "C:\Program Files (x86)\MySQL\MySQL Installer for Windows\MySQLInstallerConsole.exe" community install "server;8.0.34:*" --silent
```

{% endstep %}

{% step %}
**🔧 Configurez et initialisez MySQL Server.**

```powershell
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --initialize-insecure --console
```

{% endstep %}

{% step %}
**▶️ Lancez le service MySQL.**

```powershell
sc start MySQL80
```

{% endstep %}

{% step %}
**🔑 Définissez un mot de passe pour l'utilisateur root.**

```powershell
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqladmin.exe" -u root password "root"
```

{% endstep %}

{% step %}
**⚙️ Installez MySQL en tant que service.**

```powershell
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --install MySQL80
```

{% endstep %}

{% step %}
**🚀 Démarrez le service MySQL.**

```powershell
Start-Service MySQL80
```

{% endstep %}
{% endstepper %}

***

## 🗃️ Configuration de la base de données MySQL

{% stepper %}
{% step %}
**📜 Connectez-vous à MySQL en ligne de commande.**

```powershell
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p
```

{% endstep %}

{% step %}
**🗂️ Créez une base de données pour WordPress.**

```sql
CREATE DATABASE wordpress;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

{% endstep %}

{% step %}
**🔗 Connectez WordPress à la base de données.**

* Accédez à `http://<IP_du_serveur>/wordpress/` dans un navigateur.
* Suivez les instructions pour configurer WordPress avec les informations de la base de données.
* Connectez-vous à votre site WordPress.
  * Nom de la base de données : `wordpress`
  * Nom d'utilisateur : `admin`
  * Mot de passe : `password`
  * Adresse de la base de données : `localhost`
  * Préfixe de table : `wp_`

{% hint style="warning" %}
Gardez la page ouverte pour copier les informations de connexion à la base de données.
{% endhint %}
{% endstep %}

{% step %}
**📝 Modifiez le fichier `wp-config.php` de WordPress.**

```powershell
Copy-Item "C:\inetpub\wwwroot\wordpress\wp-config-sample.php" "C:\inetpub\wwwroot\wordpress\wp-config.php"
notepad "C:\inetpub\wwwroot\wordpress\wp-config.php"
```

* Copiez les informations de connexion à la base de données dans le fichier `wp-config.php`.
  {% endstep %}

{% step %}
**🔒 Attribuez les bonnes permissions au fichier `wp-config.php`.**

```powershell
icacls "C:\inetpub\wwwroot\wordpress\wp-config.php" /grant IUSR:R /T
icacls "C:\inetpub\wwwroot\wordpress\wp-config.php" /grant IIS_IUSRS:R /T
```

{% endstep %}
{% endstepper %}

***

## **🔄 Redémarrez IIS**

Redémarrez IIS pour appliquer toutes les configurations :

```powershell
iisreset
```

***

## ✅ Complétez l'installation de WordPress
