Serveur Web Raspberry Pi avec Nginx
Étape 1 : Connexion SSH
Activer SSH sur le Raspberry
sudo systemctl enable ssh
sudo systemctl start ssh
Trouver l'IP du Raspberry
hostname -I
Note : Exemple 192.168.1.100
Se connecter depuis Linux
ssh pi@192.168.1.100
Mot de passe par défaut : raspberry
Changer le mot de passe
passwd
Étape 2 : Installation Nginx
Mise à jour système
sudo apt update
sudo apt upgrade -y
Installer Nginx
sudo apt install nginx -y
Vérifier
sudo systemctl status nginx
Étape 3 : Créer votre site HTML/CSS
Structure des dossiers
sudo mkdir -p /var/www/html/css
sudo mkdir -p /var/www/html/js
sudo mkdir -p /var/www/html/images
Page HTML
sudo nano /var/www/html/index.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
sudo nano /var/www/html/css/style.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
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
Étape 4 : Configuration Nginx
Éditer la configuration
sudo nano /etc/nginx/sites-available/default
Configuration basique :
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
sudo nginx -t
sudo systemctl reload nginx
Étape 5 : Nom de domaine
Option A : DuckDNS (gratuit)
- Créer compte sur duckdns.org
- Choisir sous-domaine :
monsite.duckdns.org
Installer le client DuckDNS
mkdir ~/duckdns
nano ~/duckdns/duck.sh
#!/bin/bash
echo url="https://www.duckdns.org/update?domains=monsite&token=VOTRE-TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -
chmod +x ~/duckdns/duck.sh
Automatiser avec cron
crontab -e
Ajouter :
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
Configurer Nginx avec le domaine
sudo nano /etc/nginx/sites-available/default
Modifier server_name :
server_name monsite.duckdns.org;
Étape 6 : Certificat SSL avec Let's Encrypt
Installer Certbot
sudo apt install certbot python3-certbot-nginx -y
Obtenir le certificat
sudo certbot --nginx -d monsite.duckdns.org
- Accepter conditions (A)
- Choisir option 2 (redirect HTTP to HTTPS)
Vérifier renouvellement auto
sudo certbot renew --dry-run
Étape 7 : Sécurité basique
Pare-feu
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
sudo systemctl restart nginx
Commandes utiles
# 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
C'est tout ! Votre Raspberry Pi sert maintenant votre site web de manière sécurisée.