如何用uWSGI和nginx来搭建Django工程
前言:
nginx和uWSGI是Django部署的不错选择,但并非唯一的,它们都是可以替代的,欢迎进行其它尝试。
背景知识简要介绍:
1、WSGI是一种Web服务器网关接口。它是Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。
2、uWSGI它实现了WSGI、uwsgi、http等协议。
3、Nginx是高性能的HTTP和反向代理服务器(我们使用Nginx是因为其高效的处理静态文件请求的能力)
4、Django是采用MVC设计模式的开源Web应用框架。
5、socket是用来实现进程间通信的,在我们这里用作实现nginx和uWSGI之间的通信
粗略的介绍我们需要使用到的部件之后,我们来具体说明搭建的步骤(请认真看,务求一次做对)
我们最后要完成的工作基本是这样的:
客户端(进行web请求) —— 服务器(这里使用的是nginx) —— socket(自动生成的通信文件)—— uwsgi —— Django
下面的内容很多来源于http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html#configuring-uwsgi-to-run-with-a-ini-file
uWSGI的安装和基本配置:
我们使用pip包管理工具来安装uWSGI:
sudo pip install uwsgi
如果你还没有pip,那么装上它:
在 Debian 和 Ubuntu系统中使用:
sudo apt-get install python-pip
sudo yum install python-pip
Debian 和Ubuntu:
apt-get groupinstall "Development Tools"
apt-get install python-devel
Fedora 和CentOS:
yum groupinstall "Development Tools"
yum install -y python-devel
基本试验
创建一个测试文件test.py:
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return ["Hello World"] # python2 #return [b"Hello World"] # python3
运行uWSGI
uwsgi --http :8000 --wsgi-file test.py
http://127.0.0.1:8000/ (注意冒号是英文的冒号)
你会看到熟悉且可爱的Hello World。这也就说明我们打通了客户端——uWSGI——Python的桥梁。
用你的Django工程代替test.py
首先确信一下我们的工程本身能正常运行,在终端进入你的工程目录,然后敲入:
python manage.py runserver 0.0.0.0:8000
uwsgi --http :8000 --module nidegongchenming.wsgi
那么现在我们打通客户端——uWSGI——Django的桥梁,恭喜。
如果你的Django工程叫abc,我建议你把它的全部内容都拷贝到/var/www/中。然后你的工程的manage.py文件就在/var/www/abc/中,这样可以避免因文件权限,带来的一些不能提供服务的问题。
好了可以停掉服务了,我们继续。
nginx的安装和基本配置:
安装 nginx
Ubuntu 和 Debian:
sudo apt-get install nginx sudo /etc/init.d/nginx start
sudo yum install nginx sudo service nginx start
如果一切正常(默认的80端口没有被占用),此时在浏览器中访问127.0.0.1你会看到“Welcome to nginx on XXX”
那么现在我们的桥梁变成了:客户端——服务器(nginx)
如果端口被Apache或者其它什么占用了,导致nginx服务不能成功启动也没关系,下面我们介绍怎么配置nginx来监听其它端口。
配置 nginx
首先我们需要一份uwsgi_params文件,这个文件一般会在你的nginx目录中,比如我的在/etc/nginx/里,当然,没找到的话,你也可以去https://github.com/nginx/nginx/blob/master/conf/uwsgi_params,copy一份,或者复制下面的内容
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
文件名是uwsgi_params,没有后缀。把它放到你的Django工程中,和manage.py同目录。下面我们来配置nginx,并告诉它引用uwsgi_params文件。
进入你的Django工程目录,创建一个文件 mysite_nginx.conf,里面敲入:
# mysite_nginx.conf # the upstream component nginx needs to connect to upstream django { # server unix:///path/to/your/mysite/mysite.sock; # for a file socket server 127.0.0.1:8001; # for a web port socket (we'll use this first) } # configuration of the server server { # the port your site will be served on listen 8000; # the domain name it will serve for server_name .example.com; # substitute your machine's IP address or FQDN charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # Django media location /media { alias /path/to/your/mysite/media; # your Django project's media files - amend as required } location /static { alias /path/to/your/mysite/static; # your Django project's static files - amend as required } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django; include /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed } }
server{}中的server_name可以接IP地址,比如:server_name 219.242.174.48,测试的话用你本机的吧,搭好了之后方便在同网段内使用其它机器测试。
这份配置文件告诉nginx从文件系统中建立媒体和静态文件服务,同时也处理Django应用中的请求。对于大型的部署而言,让一个服务器处理静态/媒体文件,另一个处理Django应用,会有很好的表现。不过现在,我们这么做也没问题。
然后执行下面的命令,让nginx知道有这么一个配置文件:
sudo ln -s mysite_nginx.conf /etc/nginx/sites-enabled/
部署静态文件
在运行nginx之前,必须把所有的Django静态文件收集到一个静态文件夹中,首先在settings.py中写入:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
然后运行
python manage.py collectstatic
基本nginx测试
重启nginx服务
Ubuntu,Debian:
sudo /etc/init.d/nginx restart
sudo service nginx restart 或者 systemctl restart nginx.service
为了测试我们是不是可以提供访问媒体文件的服务,找张图片比如"abc.png",放到你的Django工程中的媒体目录下,比如/var/www/project/project/media。然后访问http://127.0.0.1:8000/media/abc.png,如果有问题,需要先停止nginx(上面命令中restart改成stop),再启动。这样我们能得到一些提示信息,以便找出问题在哪。
nginx和uWSGI以及test.py的沟通
uwsgi --socket :8001 --wsgi-file test.py
如果能看到Hell World,说明我们打通的桥梁变成:
客户端(浏览器)——服务器(nginx)——socket——uWSGI——python
同时你也可以访问http://127.0.0.1:8001/,看看uWSGI的反应,暂不剧透……
到现在我们都是在使用TCP port socket,这样开始的时候会容易些,不过实际上使用Unix sockets 会更好些,会有较小的开销。
编辑我们刚才的nginx配置文件mysite_nginx.conf,做以下更改:
server unix:///path/to/your/mysite/mysite.sock; # for a file socket # server 127.0.0.1:8001; # for a web port socket (we'll use this first)
停下刚才的uWSGI服务,输入以下命令重新开启:
uwsgi --socket mysite.sock --wsgi-file test.py
如果服务没能正常运行,查看一次啊nginx的错误日志,在/var/log/nginx/error.log。如果错误日志像是这样:
connect() to unix:///path/to/your/mysite/mysite.sock failed (13: Permission denied)
试一下:
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666 # (very permissive)
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=664 # (more sensible)
激动人心的时候要到了
现在我们可以尝试一下用uwsgi和nginx来运行我们的Django应用了。
在工程目录下运行:
uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=664
现在应该在浏览器中能看到你的工程了。
用ini文件来配置uWSGI
创建一个文件命名为'mysite_uwsgi.ini'
# mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /path/to/your/project # Django's wsgi file module = project.wsgi # the virtualenv (full path) # home = /path/to/virtualenv # process-related settings # master master = true # maximum number of worker processes processes = 10 # the socket (use the full path to be safe socket = /path/to/your/project/mysite.sock # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
以后再运行 uswgi就可以使用:
uwsgi --ini mysite_uwsgi.ini
去吃饭了
这些内容我可能会在下一篇博客里写,想先了解的同学请移步:http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html#configuring-uwsgi-to-run-with-a-ini-file
这个文档相当全面,而且重要的是没有拼写错误这种情况。
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了如何用uWSGI和nginx来搭建Django工程,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Pour permettre au serveur Tomcat d'accéder au réseau externe, vous devez : modifier le fichier de configuration Tomcat pour autoriser les connexions externes. Ajoutez une règle de pare-feu pour autoriser l'accès au port du serveur Tomcat. Créez un enregistrement DNS pointant le nom de domaine vers l'adresse IP publique du serveur Tomcat. Facultatif : utilisez un proxy inverse pour améliorer la sécurité et les performances. Facultatif : configurez HTTPS pour une sécurité accrue.

Les commandes de démarrage et d'arrêt de Nginx sont respectivement nginx et nginx -s quit. La commande start démarre directement le serveur, tandis que la commande stop arrête le serveur en douceur, permettant ainsi de traiter toutes les requêtes en cours. Les autres signaux d'arrêt disponibles incluent l'arrêt et le rechargement.

Étapes pour exécuter ThinkPHP Framework localement : Téléchargez et décompressez ThinkPHP Framework dans un répertoire local. Créez un hôte virtuel (facultatif) pointant vers le répertoire racine ThinkPHP. Configurez les paramètres de connexion à la base de données. Démarrez le serveur Web. Initialisez l'application ThinkPHP. Accédez à l'URL de l'application ThinkPHP et exécutez-la.

Pour résoudre l'erreur "Bienvenue sur nginx!", vous devez vérifier la configuration de l'hôte virtuel, activer l'hôte virtuel, recharger Nginx, si le fichier de configuration de l'hôte virtuel est introuvable, créer une page par défaut et recharger Nginx, puis le message d'erreur. disparaîtra et le site Web sera affiché normalement.

Étapes de déploiement de serveur pour un projet Node.js : Préparez l'environnement de déploiement : obtenez l'accès au serveur, installez Node.js, configurez un référentiel Git. Créez l'application : utilisez npm run build pour générer du code et des dépendances déployables. Téléchargez le code sur le serveur : via Git ou File Transfer Protocol. Installer les dépendances : connectez-vous en SSH au serveur et installez les dépendances de l'application à l'aide de npm install. Démarrez l'application : utilisez une commande telle que node index.js pour démarrer l'application ou utilisez un gestionnaire de processus tel que pm2. Configurer un proxy inverse (facultatif) : utilisez un proxy inverse tel que Nginx ou Apache pour acheminer le trafic vers votre application

Pour vous inscrire à phpMyAdmin, vous devez d'abord créer un utilisateur MySQL et lui accorder des autorisations, puis télécharger, installer et configurer phpMyAdmin, et enfin vous connecter à phpMyAdmin pour gérer la base de données.

nginx apparaît lors de l'accès au site Web. Les raisons peuvent être : maintenance du serveur, serveur occupé, cache du navigateur, problèmes DNS, blocage du pare-feu, mauvaise configuration du site Web, problèmes de connexion réseau ou site Web en panne. Essayez les solutions suivantes : attendez la fin de la maintenance, visitez pendant les heures creuses, videz le cache de votre navigateur, videz votre cache DNS, désactivez le pare-feu ou le logiciel antivirus, contactez l'administrateur du site, vérifiez votre connexion réseau ou utilisez un moteur de recherche ou archive Web pour trouver une autre copie du site. Si le problème persiste, veuillez contacter l'administrateur du site.

Il existe cinq méthodes de communication de conteneur dans l'environnement Docker : réseau partagé, Docker Compose, proxy réseau, volume partagé et file d'attente de messages. En fonction de vos besoins d'isolation et de sécurité, choisissez la méthode de communication la plus appropriée, par exemple en utilisant Docker Compose pour simplifier les connexions ou en utilisant un proxy réseau pour augmenter l'isolation.
