"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Déployer Django en production

Déployer Django en production

Publié le 2024-11-07
Parcourir:621

J'ai récemment déployé ma propre application Django en production. Le site Web s'appelle videiro.com et a été développé en django HTML/CSS/JS Tailwind.

Installation

J'utilise un serveur Debian 12 qui exposera mon application via des tunnels cloudflare. Tous les fichiers statiques sont servis via nginx et le projet Django est exécuté par gunicorn.

Dans ce guide, je vais vous montrer comment configurer cela.

Préparation du projet Django

La première chose que vous devrez faire est d'ouvrir le fichier settings.py et de modifier ce qui suit

Debug = False
ALLOWED_HOSTS = ['yourdomain.tld']
CSRF_COOKIE_SECURE = True
CSRF_TRUSTED_ORIGINS = [
    'yourdomain.tld',
]

Vous devez également remplacer SECRET_KEY par une longue chaîne aléatoire, que vous ne devez jamais partager avec qui que ce soit.

Après cela, créez un nouveau fichier appelé .gitignore et collez ce qui suit :

db.sqlite3
*.pyc

Cela garantira que la base de données n'est pas téléchargée sur notre serveur et qu'aucun fichier pyc ne le est non plus.

Vous pouvez maintenant télécharger votre projet sur un nouveau référentiel github (ou référentiel gitea). Si vous ne souhaitez pas que tout le monde ait accès à votre code source, assurez-vous de définir le référentiel comme privé.

Si vous voulez vous assurer que votre code source reste privé, je vous recommande de configurer une instance Gitea auto-hébergée, lisez Selfhost your own Gitea instance - alternative github légère et auto-hébergée, pour savoir comment procéder.

git init
git branch -M main
git add .
git commit -m "initial commit"
git remote add origin https://...
git push -u origin main

Maintenant que vous avez fait, vous devez vous connecter à votre serveur

Configuration du serveur

Avant de configurer quoi que ce soit, assurez-vous de n'autoriser aucune connexion SSH avec un mot de passe. Suivez Sécurisation de SSH avec l'authentification par clé pour sécuriser votre serveur contre ce type d'attaques.

Connectez-vous à votre serveur

ssh [email protected]

Assurez-vous que vos packages sont à jour

sudo apt update && sudo apt upgrade

Installez maintenant python, pip, git et nginx

sudo apt install python3 python3-pip git nginx

Clonez maintenant votre projet dans votre répertoire personnel.

git clone https://...
cd my-project

Une fois que vous avez terminé, installez les éléments suivants :

pip install django django-crispy-forms whitenoise

Essayez maintenant d'exécuter le projet :

python3 manage.py runserver

si vous obtenez une erreur indiquant qu'un package est manquant, installez-le et réexécutez.

Configuration de Gunicorn

Nous allons maintenant configurer Gunicorn

Installez-le d'abord

pip install gunicorn

Créez maintenant un nouveau fichier appelé gunicorn.service avec votre éditeur de texte préféré :

sudo vim /etc/systemd/system/gunicorn.service

Et collez ce qui suit :

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=YOURUSER
Group=www-data
WorkingDirectory=/home/YOURUSER/PROJECT
ExecStart=/path/to/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 PROJECTNAME.wsgi:application

[Install]
WantedBy=multi-user.target

Remplacez YOURUSER par votre utilisateur.

Pour trouver le chemin vers Gunicorn Run :

which gunicorn

Et le nom de votre projet est le nom du dossier à l'intérieur de votre projet qui contient le fichier settings.py.

Exécutez maintenant les commandes suivantes pour démarrer et activer gunicorn (démarrer au démarrage)

sudo systemctl daemon-reload
sudo systemctl start gunicorn.service
sudo systemctl enable gunicorn.service

Maintenant, si vous vous dirigez vers 127.0.0.1:8000, vous devriez voir votre projet s'exécuter.

Mais nous n'étions pas encore terminés

Configuration de nginx

Nous devons maintenant diffuser notre contenu statique via nginx.

Créez d'abord un nouveau fichier de configuration nginx avec votre éditeur de texte préféré :

sudo vim /etc/nginx/sites-available/PROJECT

Changez PROJET comme vous le souhaitez

Collez maintenant le contenu suivant :

server {
    listen 80;
    server_name YOURDOMAIN;

    location /static/ {
    alias /var/www/staticfiles/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }
}

Remplacez simplement YOURDOMAIN par le domaine sur lequel il sera hébergé.

Créez un lien symbolique pour activer votre site Web :

sudo ln -s /etc/nginx/sites-available/PROJECT /etc/nginx/sites-enabled/

Démarrez et activez nginx :

sudo systemctl start nginx
sudo systemctl enable nginx

Configurer les fichiers statiques

La première chose que vous devrez faire est de vous insérer dans votre projet (django)

cd project

Exécutez maintenant la commande suivante :

python3 manage.py collectstatic

Cela créera un nouveau dossier appelé staticfiles

Maintenant, pour configurer les fichiers statiques, nous avons deux options :

  1. Changez l'utilisateur dans /etc/nginx/nginx.conf par votre utilisateur (moins sécurisé)
  2. Copier les fichiers statiques dans /var/www/ (plus sécurisé)

Je ferai la 2ème option :

Créez d'abord un nouveau fichier appelé staticfiles dans /var/www

sudo mkdir -p /var/www/staticfiles

Copiez maintenant tous les fichiers statiques de votre projet :

sudo cp staticfiles/* /var/www/staticfiles

Maintenant cd dans /var/www

cd /var/www

Modifier la propriété de tous les fichiers

sudo chown www-data:www-data staticfiles
sudo chown www-data:www-data staticfiles/*

Redémarrez le service nginx :

sudo systemctl restart nginx

Maintenant, si vous vous dirigez vers :

127.0.0.1

Vous devriez voir votre site Web fonctionner avec tous les fichiers statiques diffusés !

Exposition via les tunnels Cloudflare

Maintenant, rendez votre site Web accessible au public.

Pour ce faire, vous aurez besoin d'un compte cloudflare et d'un domaine pointé vers cloudflare.

D'abord, dirigez-vous vers le tableau de bord Zero Trust

Sous Réseaux, cliquez sur Tunnels puis Créer un tunnel

Une fois créé, vous devez installer et exécuter un connecteur, suivez les instructions sur la page correspondant à votre configuration spécifique.

Une fois le connecteur exécuté, vous devez cliquer sur l'onglet Nom d'hôte public et ajouter un nom d'hôte public.

Vous devriez maintenant voir quelque chose comme ceci : Deploy django to production

Remplissez les informations comme je l'ai. Le type de service doit être HTTP et l'URL doit être 127.0.0.1:80 ou localhost:80

Maintenant, si vous vous dirigez vers le domaine que vous avez spécifié, vous devriez voir votre application opérationnelle.

Félicitations!

Si vous avez apprécié cet article et souhaitez soutenir mon travail (pour la plupart non rémunéré), vous pouvez faire un don ici.

Abonnez-vous à ma newsletter gratuite !

Rejoignez-nous ici

Déclaration de sortie Cet article est reproduit sur : https://dev.to/4rkal/deploy-django-to-production-4bn0?1 En cas de violation, veuillez contacter [email protected] pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3