Guide complet : Héberger son site web sur un serveur Proxmox


1. Préparation et prérequis


2. Configuration du LXC

A. Création du conteneur LXC dans Proxmox

Avant d'installer Nginx, on va créer un conteneur LXC sur Proxmox.

Les paramètres importants :

B. Première connexion et mise à jour

Une fois le conteneur créé, connectez-vous et mettez à jour le système :

apt update && apt upgrade -y

C. Configuration réseau

Vérifiez la configuration réseau actuelle :

ip a
cat /etc/network/interfaces

Éditez le fichier de configuration réseau :

nano /etc/network/interfaces

Contenu recommandé :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1

⚠️ Important : La gateway (adresse de votre routeur) est indispensable pour que le serveur soit accessible depuis l'extérieur. Sans elle, votre LXC peut communiquer en local mais pas avec internet.

Appliquez les changements et vérifiez la connectivité :

systemctl restart networking
ping -c 4 google.com

3. Installation et configuration Nginx

A. Installation de Nginx

apt install nginx -y

Démarrez le service et activez-le au démarrage :

systemctl start nginx
systemctl enable nginx

Vérifiez que Nginx fonctionne :

systemctl status nginx

Test rapide : Ouvrez un navigateur et rendez-vous sur http://192.168.1.100. Vous devriez voir la page par défaut de Nginx.

B. Structure des répertoires Nginx

/etc/nginx/ ├── nginx.conf # Configuration principale ├── sites-available/ # Configurations des sites (actifs ou non) ├── sites-enabled/ # Sites actifs (liens symboliques) ├── conf.d/ # Configurations additionnelles └── snippets/ # Morceaux de config réutilisables /var/www/ └── html/ # Racine web par défaut

C. Configuration principale de Nginx

Sauvegardez d'abord la configuration originale :

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

Éditez le fichier de configuration :

nano /etc/nginx/nginx.conf

Contenu de la configuration :

user www-data;
worker_processes 1;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 512;
}

http {
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_types text/css text/javascript application/javascript application/json;
    gzip_min_length 1000;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

D. Configuration du site web

Créez le fichier de configuration pour votre site :

nano /etc/nginx/sites-available/wrajaelhak.fr

Contenu de la configuration :

server {
    listen 80;
    listen [::]:80;

    server_name wrajaelhak.fr www.wrajaelhak.fr;

    root /var/www/wrajaelhak.fr;
    index index.html index.htm;

    access_log /var/log/nginx/wrajaelhak-access.log;
    error_log /var/log/nginx/wrajaelhak-error.log;

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

    location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location ~ /\. {
        deny all;
    }
}

💡 Note : Cette configuration est en HTTP uniquement. Certbot ajoutera automatiquement la configuration HTTPS lors de la génération du certificat SSL.

E. Activer le site

Nginx lit uniquement les fichiers présents dans le dossier sites-enabled/ pour afficher les sites. Plutôt que de mettre la configuration directement dans ce dossier, on la place dans sites-available/ et on crée un raccourci (lien symbolique) vers sites-enabled/.

L'avantage : si vous voulez désactiver le site temporairement, vous supprimez juste le raccourci. La configuration reste intacte dans sites-available/ et vous pouvez réactiver le site à tout moment.

ln -s /etc/nginx/sites-available/wrajaelhak.fr /etc/nginx/sites-enabled/

mkdir -p /var/www/wrajaelhak.fr

chown -R www-data:www-data /var/www/wrajaelhak.fr
chmod -R 755 /var/www/wrajaelhak.fr

F. Vérification et application

Testez la configuration Nginx :

nginx -t

Si tout est OK, rechargez Nginx :

systemctl reload nginx

4. Transfert des fichiers du site Web

A. Configuration SSH sur le LXC

Avant de pouvoir transférer des fichiers, il faut configurer SSH sur le conteneur.

systemctl status ssh

Si le serveur SSH n'est pas installé :

apt install openssh-server -y

systemctl start ssh
systemctl enable ssh

Par défaut, la connexion root par mot de passe est désactivée. Pour l'activer temporairement :

nano /etc/ssh/sshd_config

Trouvez et modifiez cette ligne :

PermitRootLogin yes

Puis redémarrez SSH :

systemctl restart ssh

⚠️ Sécurité : Une fois vos fichiers transférés, pensez à désactiver la connexion root par mot de passe et utiliser des clés SSH à la place.

B. Transfert des fichiers avec SCP

Depuis votre PC :

scp -r /chemin/vers/mon-site/* root@192.168.1.100:/var/www/wrajaelhak.fr/

C. Appliquer les permissions

Après le transfert, attribuez les fichiers à l'utilisateur Nginx :

chown -R www-data:www-data /var/www/wrajaelhak.fr

5. Configuration du nom de domaine

⚠️ Important : Cette étape doit être faite AVANT de générer le certificat SSL.

Chez votre registrar (OVH, Cloudflare, etc.) configurez les enregistrements DNS :

Type Nom Valeur
A @ Votre_IP_Publique
A www Votre_IP_Publique

Pour trouver votre IP publique :

curl ifconfig.me

La propagation DNS peut prendre entre 24h-48h. Vous pouvez vérifier avec :

dig wrajaelhak.fr

6. Configuration réseau (Port Forwarding)

⚠️ Important : Cette étape doit être faite AVANT de générer le certificat SSL.

Sur votre routeur/box, redirigez les ports vers votre LXC :

Port externe Port interne Protocole Destination
80 80 TCP 192.168.1.100
443 443 TCP 192.168.1.100

La procédure varie selon votre box/routeur. Cherchez une section "NAT", "Port Forwarding" ou "Redirection de ports" dans l'interface d'administration.


7. Sécurisation avec SSL/HTTPS

⚠️ Prérequis : Les étapes 5 (DNS) et 6 (Port Forwarding) doivent être terminées. Certbot a besoin d'accéder à votre serveur depuis internet pour valider le certificat.

A. Installation de Certbot

apt install certbot python3-certbot-nginx -y

B. Génération du certificat SSL

certbot --nginx -d wrajaelhak.fr -d www.wrajaelhak.fr

Suivez les instructions à l'écran. Certbot va :

C. Renouvellement automatique

Les certificats Let's Encrypt expirent après 90 jours. Certbot configure automatiquement un renouvellement. Vous pouvez le tester avec :

certbot renew --dry-run

8. Commandes utiles

nginx -t

systemctl reload nginx

systemctl restart nginx

tail -f /var/log/nginx/wrajaelhak-access.log

tail -f /var/log/nginx/wrajaelhak-error.log

rm /etc/nginx/sites-enabled/wrajaelhak.fr

ln -s /etc/nginx/sites-available/wrajaelhak.fr /etc/nginx/sites-enabled/

certbot certificates

certbot renew

9. Dépannage

Le site n'est pas accessible

  1. Vérifiez que Nginx tourne : systemctl status nginx
  2. Vérifiez la config : nginx -t
  3. Vérifiez les logs : tail -f /var/log/nginx/error.log
  4. Vérifiez le port forwarding sur votre routeur
  5. Vérifiez que la gateway est configurée dans le LXC

Certbot échoue

  1. Vérifiez que le DNS pointe bien vers votre IP : nslookup wrajaelhak.fr
  2. Vérifiez que le port 80 est accessible depuis l'extérieur
  3. Vérifiez les logs Certbot : /var/log/letsencrypt/letsencrypt.log

Erreur 502 Bad Gateway

Le serveur backend ne répond pas. Vérifiez que votre application est lancée.

Erreur 403 Forbidden

Problème de permissions. Vérifiez :

chown -R www-data:www-data /var/www/wrajaelhak.fr
chmod -R 755 /var/www/wrajaelhak.fr

Erreur "Connection refused" en SSH

  1. Vérifiez que SSH est installé et lancé : systemctl status ssh
  2. Vérifiez que le port 22 est ouvert : ss -tlnp | grep 22