Maison  >  Article  >  développement back-end  >  Déployer Django en production

Déployer Django en production

Barbara Streisand
Barbara Streisandoriginal
2024-09-25 06:15:37978parcourir

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 j'ai configuré cela.

Préparation du projet Django

La première chose que vous devrez faire est d'ouvrir le 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 désormais télécharger votre projet dans 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 faire cela.

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 nous avons 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 user@server.ip

Assurez-vous que vos colis 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

Maintenant, nous allons installer 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

Changez 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 fonctionner.

Mais nous n'avons pas encore fini

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 cela 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. Copiez 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

Changer 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 servis !

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.

Dirigez-vous d’abord 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.

Maintenant, vous devriez 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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:AI Runner v.ev18Article suivant:AI Runner v.ev18