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.
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.
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
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.
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
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
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 :
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 !
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 :
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.
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!