# 4.1: Installation de Element Web

## 🌐 Choix du serveur web

Tout d'abord, nous devons choisir le serveur web que l'on souhaite installer entre [Apache](https://httpd.apache.org/) et [nginx](https://nginx.org/).

nginx semble ĂȘtre le meilleur choix pour dĂ©ployer Element Web en raison de sa simplicitĂ©, de ses performances optimisĂ©es pour le service de fichiers statiques, et de sa faible consommation de ressources. Il est gĂ©nĂ©ralement plus adaptĂ© Ă  des applications nĂ©cessitant un haut dĂ©bit et une gestion efficace des connexions simultanĂ©es.

Cependant, si vous avez des besoins spĂ©cifiques en matiĂšre de configuration ou de flexibilitĂ© (par exemple, gestion avancĂ©e des redirections via `.htaccess`), Apache pourrait ĂȘtre un bon choix.

En résumé, voici un tableau récapitulatif pour vous aider à choisir :

| CritĂšre | nginx | Apache |
|--- |--- |---|
| **Performance** |	TrĂšs performant, gestion haute charge | Moins performant, surtout en haute charge |
| **Flexibilité** | Moins flexible, mais suffisant pour les fichiers statiques | TrÚs flexible avec modules et .htaccess |
| **Simplicité** | Plus simple à configurer et gérer | Plus complexe à configurer |
| **SĂ©curitĂ©** | Plus sĂ©curisĂ© par dĂ©faut | Peut ĂȘtre aussi sĂ©curisĂ©, mais nĂ©cessite plus d’attention |
| **Documentation** | Bonne documentation, communauté active | TrÚs large communauté, excellente documentation |

Nous allons donc ici installer nginx.

Nous avons déjà précédemment installé un serveur nginx sur notre machine virtuelle, pour vérifier:

```bash
user@matrix $ sudo nginx -version
nginx version: nginx/1.22.1
```

Si aucun serveur nginx n'est installé (`bash: nginx: command not found`), veuillez consulter la procédure [3.1: Mise en place de l'accÚs au service HTTP sur la VM](../3-synapse/http-service-vm.md).

## 📩 Installer le package `element-web`

Pour installer le package `element-web`, exécutez les commandes suivantes dans le terminal de votre machine virtuelle: 

```bash
sudo apt install -y wget apt-transport-https

sudo wget -O /usr/share/keyrings/element-io-archive-keyring.gpg https://packages.element.io/debian/element-io-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/element-io-archive-keyring.gpg] https://packages.element.io/debian/ default main" | sudo tee /etc/apt/sources.list.d/element-io.list

sudo apt update
sudo apt install element-web
```

Maintenant que `element-web` est installé, vous devez maintenant rendre accessible le serveur Element Web sur le port 8080 de la machine virtuelle, en reliant `element-web` au serveur nginx.

Pour cela, rendez vous dans `/etc/element-web` puis modifiez le fichier `config.json` avec le contenu suivant:

```json
"default_server_config": {
        "m.homeserver": {
            "base_url": "http://localhost:8008", # URL du serveur Synapse
            "server_name": "localhost"
        }
```

Ensuite, dans `/etc/nginx/sites-available`, créez le fichier `element` avec le contenu suivant: 

```nginx
server {
    listen 8080;
    server_name matrix;

    root /usr/share/element-web;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # Configuration de la sécurité et des headers
    location /_matrix/ {
        proxy_pass http://localhost:8008/; # Remplacez par l'adresse de votre service Synapse
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}  
```

Vous devez maintenant lier le site au dossier `sites-enabled` de nginx, en créant un lien symbolique de votre configuration nginx pour Element vers `sites-enabled`:

```bash
user@matrix $ sudo ln -s /etc/nginx/sites-available/element-web /etc/nginx/sites-enabled/
```

VĂ©rifiez la configuration de nginx au cas oĂč il y aurait des erreurs: 

```bash
user@matrix $ sudo nginx -t
```

Puis redémarrez le service nginx:

```bash
user@matrix $ sudo systemctl restart nginx
```

Désormais, sur le port 8080 de la machine virtuelle, le serveur Element Web est en ligne.

Vous devez désormais ajouter cette ligne à votre config ssh sur la machine hÎte, dans la section dédiée à la connection ssh à la machine virtuelle:

```
    LocalForward 0.0.0.0:8080 10.42.154.1:8080
```

Ainsi, aprĂšs s'ĂȘtre connectĂ© Ă  la machine virtuelle via ssh, et avoir rentrĂ© `http://localhost:8080` dans un navigateur web sur votre machine hĂŽte, votre instance d'Element sera disponible.

### 📚 Plus d'informations sur les outils mentionnĂ©s dans cette procĂ©dure:
- [La documentation de nginx](https://nginx.org/en/docs/)

<hr>

- Page précédente: [Sommaire (partie 4)](README.md)
- Page suivante: [Installation d'un reverse proxy](install-reverse-proxy.md)