Maison  >  Article  >  développement back-end  >  Résoudre tous les problèmes de déploiement de Django avec nginx+uwsgi (résumé)_nginx

Résoudre tous les problèmes de déploiement de Django avec nginx+uwsgi (résumé)_nginx

不言
不言original
2018-04-08 11:20:371697parcourir

Cet article présente principalement tous les problèmes de déploiement nginx+uwsgi de Django (résumé). Je pense que c'est plutôt bien. Maintenant, je vais le partager avec vous et vous donner une référence. Allons voir ensemble

Récemment, j'ai terminé le petit projet que j'ai écrit pendant les vacances d'été. Je pensais le mettre sur mon serveur cloud. Au départ, je pensais qu'il me suffisait d'ouvrir le port et. exécutez python3 manager runserver 0.0.0.0:80 et ce sera fait, et finalement j'ai appris que cela s'applique uniquement au mode de développement de Django et ne prend en charge que l'accès mono-utilisateur. Dans ce cas, un serveur Web est requis pour le déploiement. J'ai utilisé nginx

nginx ?

Pourquoi nginx ?

Tout d'abord, je pense qu'il est petit, très léger, facile à utiliser, pas aussi compliqué qu'Apache, et en ligne Il est recommandé d'utiliser nginx pour déployer Django.

Installation

Je vais l'ignorer ici et dire que les utilisateurs de Linux vous recommandent d'installer à partir du code source, car la commande d'installation peut prétendre être un Taobao II Pour le nginx nouvellement développé, je recommande personnellement d'utiliser la version originale.

uwsgi

Pourquoi en avez-vous besoin ?

En termes simples, nginx est un serveur proxy inverse, il peut le faire Que se passe-t-il? Pour écouter un port, tel que 80, vous pouvez configurer un port proxy inverse, tel que 8000. De cette manière, tous les accès des utilisateurs externes au port 80 demandent en réalité des données au port 8000, mais l'utilisateur ne communique pas réellement avec port 8000. , mais a passé 80 ce pont. Pour le moment, je pense seulement que cela peut cacher mon vrai port. Si vous avez des suggestions, veuillez laisser un message.
Dans ce cas, il n'est en fait accessible que par un seul utilisateur, nous avons donc besoin d'un outil accessible par plusieurs utilisateurs simultanément, alors c'est uwsgi.

Comment installer ?

pip install uwsgi

Fichier de configuration

Tout d'abord , pour tout le monde Jetez un œil à l'état du fichier de mon projet :

FlyCold
├── FlyCold
│  ├── settings.py
│  ├── urls.py
│  └── wsgi.py
├── manage.py
├── SchoolBuy
│  ├── admin.py
│  ├── forms.py
│  ├── __init__.py
│  ├── models.py
│  ├── urls.py
│  └── views.py
└── templates

Explication ci-dessous, il s'agit d'une arborescence de répertoires simplifiée, le projet créé est nommé FlyCold, ainsi que le sous-répertoire FlyCold et le sous-répertoire SchoolBuy générés. Mon code principal se trouve dans SchoolBuy, settings.py se trouve dans le sous-répertoire Flycold et manager.py se trouve dans le répertoire racine FlyCold.

Après l'installation, créez un fichier de configuration avec le contenu suivant :

# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8080
#真实服务的端口

# Django项目根目录 (绝对路径)
chdir      = /home/lyt/FlyCold

# wsgi.py文件在项目中的位置
module     = FlyCold.wsgi

# process-related settings
# master
master     = true

# 运行的进程数
processes    = 4

# ... with appropriate permissions - may be needed
# chmod-socket  = 664
# clear environment on exit
vacuum     = true

Ce fichier .ini peut être placé n'importe où , démarrez-le Quand uwsgi --ini ***.ini

configurez nginx

trouvez nginx.conf et écrivez le contenu suivant

  server {
    #这里是访问时用到的端口
  listen    80;
    server_name localhost;

    charset UTF-8;
    #这块存让日志文件
    access_log /var/log/nginx/SchoolBuy_access.log;
    error_log  /var/log/nginx/SchoolBuy_error.log;


    client_max_body_size 75M;
    location / {
        include uwsgi_params;
        #同uwsgi内容
        uwsgi_pass 127.0.0.1:8001;
        #链接超时时间
        uwsgi_read_timeout 30;
    }
  }

De cette façon, redémarrez votre nginx, accédez au port 80 et vous verrez l'effet.

Des questions ?

Vous avez peut-être constaté que les ressources statiques de votre page Web ne sont pas accessibles ! ! Par exemple, la page d'administration sera très simple. En effet, lorsque nginx+uwsgi+Django, nginx ne peut pas être utilisé comme proxy pour le traitement des ressources statiques par Django (peut-être). En bref, Django ne devrait pas être autorisé à faire ce genre de chose, car nginx a une plus grande capacité à gérer les ressources statiques. Pour les ressources statiques, laissez nginx s'en occuper.

De manière générale, vous disposerez de deux types de ressources statiques : les liens commençant par /media/ et les liens commençant par /static/. Static est utilisé pour traiter certaines images, vidéos, fichiers js et css originaux de sites Web. Django lui-même prend en charge ce type de lien. Alors, comment désactiver Django pour traiter les fichiers commençant par /static/? C'est très simple. Changez la valeur DEBUG sur False dans settings.py Pour le moment, Django ne traitera pas le fichier /static/.

Et /media/? De manière générale, nous enregistrerons les images téléchargées par les utilisateurs et utiliserons /media/ lors de leur affichage sur la page Web. Définir

MEDIA_URL = '/media/' #访问的前缀链接
MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具体位置

. Ajoutez

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
  urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

à url.py Cela signifie que lorsque DEBUG=True, le fichier /media/ sera analysé et le fichier sera analysé. La position est le deuxième paramètre.


De cette façon, lors du déploiement dans un environnement de production, il vous suffit de changer DEBUG en False, et Django ne traitera pas les fichiers statiques et multimédias.

Collecter les fichiers statiques

Django dispose d'un outil qui peut collecter tous les fichiers statiques utilisés dans l'application pour faciliter l'analyse nginx. Plus précisément :


Définissez STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic') dans settings.py


Les fichiers statiques collectés de cette manière seront soyez dans le répertoire ci-dessus. Comment exécuter cet outil ? python3 manager.py collectstatic

Configurez nginx pour analyser les fichiers statiques

De même, nginx.conf


Premier , Ajoutez l'instruction utilisateur root


en haut du fichier pour permettre à l'utilisateur root d'exécuter nginx, sinon l'accès aux fichiers statiques peut indiquer qu'il n'y a pas d'autorisation


Deuxièmement, avant l'emplacement du fichier de configuration / mentionné ci-dessus, ajoutez le contenu suivant

    location /static/ {
      autoindex on;
      alias /root/SchoolBuyWeb/collectedstatic/;
    }

    location /media/ {
      autoindex on;
      alias /root/SchoolBuyWeb/media/;
    }

Faites attention à l'alias puis faites correspondre le répertoire que vous avez défini !


Redémarrez nginx, maintenant c'est ok~~


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