# Serveur Web Raspberry Pi avec Nginx

## Étape 1 : Connexion SSH

## Définitions

Nginx
→ Un serveur web rapide.
Il sert tes pages HTML/CSS aux visiteurs.

Nom de domaine
→ Une adresse lisible, genre monsite.duckdns.org, au lieu d’une IP.

Certificat SSL
→ Ce qui active le HTTPS (le cadenas).
Ça chiffre les échanges entre ton site et les visiteurs.

Cron
→ Un petit programme qui lance des tâches automatiquement à un horaire régulier.

### Activer SSH sur le Raspberry
```bash
sudo systemctl enable ssh
sudo systemctl start ssh
```

### Trouver l'IP du Raspberry
```bash
hostname -I
```
Note : Exemple `192.168.1.100`

### Se connecter depuis Linux
```bash
ssh pi@192.168.1.100
```
Mot de passe par défaut : `raspberry`

### Changer le mot de passe
```bash
passwd
```

## Étape 2 : Installation Nginx

### Mise à jour système
```bash
sudo apt update
sudo apt upgrade -y
```

### Installer Nginx
```bash
sudo apt install nginx -y
```

### Vérifier
```bash
sudo systemctl status nginx
```
Tester dans navigateur : `http://192.168.1.100`

## Étape 3 : Créer votre site HTML/CSS

### Structure des dossiers
```bash
sudo mkdir -p /var/www/html/css
sudo mkdir -p /var/www/html/js
sudo mkdir -p /var/www/html/images
```

### Page HTML
```bash
sudo nano /var/www/html/index.html
```

```html
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mon Serveur</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <header>
        <nav>
            <ul>
                <li><a href="/">Accueil</a></li>
                <li><a href="/about.html">À propos</a></li>
                <li><a href="/contact.html">Contact</a></li>
            </ul>
        </nav>
    </header>
    
    <main>
        <h1>Bienvenue sur mon serveur Raspberry Pi</h1>
        <p>Serveur web propulsé par Nginx</p>
    </main>
</body>
</html>
```

### Feuille de style CSS
```bash
sudo nano /var/www/html/css/style.css
```

```css
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: Arial, sans-serif;
    line-height: 1.6;
    color: #333;
}

header {
    background: #333;
    color: #fff;
    padding: 1rem;
}

nav ul {
    list-style: none;
    display: flex;
    gap: 2rem;
}

nav a {
    color: #fff;
    text-decoration: none;
}

nav a:hover {
    text-decoration: underline;
}

main {
    max-width: 800px;
    margin: 2rem auto;
    padding: 0 1rem;
}

h1 {
    color: #333;
    margin-bottom: 1rem;
}
```

### Permissions
```bash
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
```

## Étape 4 : Configuration Nginx

### Éditer la configuration
```bash
sudo nano /etc/nginx/sites-available/default
```

Configuration basique :
```nginx
server {
    listen 80;
    listen [::]:80;
    
    root /var/www/html;
    index index.html index.htm;
    
    server_name _;
    
    location / {
        try_files $uri $uri/ =404;
    }
    
    # Compression
    gzip on;
    gzip_types text/plain text/css application/javascript;
}
```

### Tester et recharger
```bash
sudo nginx -t
sudo systemctl reload nginx
```

## Étape 5 : Nom de domaine

### Option A : DuckDNS (gratuit)

1. Créer compte sur [duckdns.org](https://www.duckdns.org)
2. Choisir sous-domaine : `monsite.duckdns.org`

### Installer le client DuckDNS
```bash
mkdir ~/duckdns
nano ~/duckdns/duck.sh
```

```bash
#!/bin/bash
echo url="https://www.duckdns.org/update?domains=monsite&token=VOTRE-TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -
```

```bash
chmod +x ~/duckdns/duck.sh
```

### Automatiser avec cron 
```bash
crontab -e
```
Ajouter :
```
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
```

### Configurer Nginx avec le domaine
```bash
sudo nano /etc/nginx/sites-available/default
```
Modifier `server_name` :
```nginx
server_name monsite.duckdns.org;
```

## Étape 6 : Certificat SSL avec Let's Encrypt

### Installer Certbot
```bash
sudo apt install certbot python3-certbot-nginx -y
```

### Obtenir le certificat
```bash
sudo certbot --nginx -d monsite.duckdns.org
```
- Email
- Accepter conditions (A)
- Choisir option 2 (redirect HTTP to HTTPS)

### Vérifier renouvellement auto
```bash
sudo certbot renew --dry-run
```

## Étape 7 : Sécurité basique

### Pare-feu
```bash
sudo apt install ufw -y
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```

### Redémarrer pour appliquer
```bash
sudo systemctl restart nginx
```

## Commandes utiles

```bash
# Statut Nginx
sudo systemctl status nginx

# Logs
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log

# Test config
sudo nginx -t

# Redémarrer
sudo systemctl restart nginx

# Température Raspberry
vcgencmd measure_temp
```


## Résultat final

- **Site accessible** : `https://monsite.duckdns.org`
- **SSH** : `ssh pi@192.168.1.100`
- **Certificat SSL** : Renouvelé automatiquement
- **Pare-feu** : Actif