Si vous avez une application Django en production, vous atteindrez tôt ou tard les limites de l'hébergement mutualisé : lenteur, restrictions de configuration, manque de contrôle. La solution est de migrer vers un VPS (serveur privé virtuel).
Dans cet article, je vous explique étape par étape comment j'ai migré axxyss.com vers un VPS Debian 12 avec nginx comme serveur web et gunicorn comme serveur WSGI.
Pourquoi un VPS ?
L'hébergement mutualisé est économique mais présente des limitations importantes :
- Vous ne pouvez pas installer librement des paquets système
- Les ressources (CPU, RAM) sont partagées avec d'autres utilisateurs
- Les configurations comme les websockets ou les workers personnalisés ne sont pas disponibles
- Les performances sont imprévisibles
Avec un VPS, vous avez le contrôle total sur le serveur : installez ce dont vous avez besoin, configurez nginx selon vos besoins et définissez le nombre de workers gunicorn requis par votre application.
Prérequis
- Un VPS avec Debian 12 (j'utilise Strato, mais n'importe quel fournisseur convient)
- Accès SSH au serveur
- Votre projet Django fonctionnel en local
- Un domaine pointant vers l'IP du VPS
Étape 1 — Préparer le serveur
Connectez-vous au VPS via SSH et mettez à jour le système :
ssh utilisateur@votre_ip -p 22
sudo apt update && sudo apt upgrade -yInstallez les dépendances nécessaires :
sudo apt install python3 python3-pip python3-venv nginx git -yÉtape 2 — Téléverser le projet
Clonez votre dépôt depuis GitHub :
cd /var/www/
git clone https://github.com/votre_utilisateur/votre_projet.git
cd votre_projetCréez l'environnement virtuel et installez les dépendances :
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtÉtape 3 — Configurer les variables d'environnement
Créez le fichier .env avec vos variables de production :
nano .envDEBUG=False
SECRET_KEY=votre_clé_secrète
ALLOWED_HOSTS=votredomaine.com
DB_NAME=nom_db
DB_USER=utilisateur_db
DB_PASSWORD=mot_de_passe_dbÉtape 4 — Configurer gunicorn comme service systemd
Créez le fichier de service :
sudo nano /etc/systemd/system/monapp.service[Unit]
Description=Daemon Gunicorn pour monapp.com
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/votre_projet
ExecStart=/var/www/votre_projet/venv/bin/gunicorn \
--workers 3 \
--bind unix:/tmp/monapp.sock \
--timeout 120 \
monapp.wsgi:application
[Install]
WantedBy=multi-user.targetActivez et démarrez le service :
sudo systemctl daemon-reload
sudo systemctl enable monapp
sudo systemctl start monappÉtape 5 — Configurer nginx
Créez le fichier de configuration nginx :
sudo nano /etc/nginx/sites-available/monappserver {
listen 80;
server_name votredomaine.com www.votredomaine.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/votre_projet;
}
location /media/ {
root /var/www/votre_projet;
}
location / {
include proxy_params;
proxy_pass http://unix:/tmp/monapp.sock;
}
}Activez le site :
sudo ln -s /etc/nginx/sites-available/monapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxÉtape 6 — Certificat SSL avec Let's Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d votredomaine.com -d www.votredomaine.comCertbot configure automatiquement nginx pour HTTPS et renouvelle le certificat tous les 90 jours.
Étape 7 — Fichiers statiques et migrations
source venv/bin/activate
python manage.py collectstatic
python manage.py migrateConclusion
La migration vers un VPS nécessite un peu plus de configuration initiale, mais les avantages sont clairs : performance, contrôle total et scalabilité. Une fois configuré, le flux de déploiement est simple :
git pull origin main
sudo systemctl restart monappSi vous avez des questions sur la migration de votre projet Django vers un VPS, n'hésitez pas à me contacter — c'est exactement le type de projets sur lesquels je travaille.
Sign IN
Commentaires : (0)
Il n'y a pas encore de commentaires.