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') #存放文件的具体位置
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)
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 :Configurez nginx pour analyser les fichiers statiques
De même, nginx.conflocation /static/ { autoindex on; alias /root/SchoolBuyWeb/collectedstatic/; } location /media/ { autoindex on; alias /root/SchoolBuyWeb/media/; }
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!