关于uWSGI+nginx+django项目的部署
前提:ubuntu16.04系统中,django2.0.9、uWSGI、nginx均以成功安装,django项目MyWeb也在开发环境中测试成功。
目的:通过配置文件(nginx的配置文件、uWSGI的配置文件)实现浏览器依靠nginx+uWSGI+django的方式访问网页。
我们知道,在nginx+uWSGI+django的生产环境中,浏览器访问网页的过程是:浏览器先向nginx发出HTTP请求报文,如果请求的是静态文件,由nginx直接返回给浏览器,否则,nginx会继续与uWSGI进行通信,获取动态内容(动态内容由uWSGI服务器和django框架通信获得),然后再返回给浏览器。
那么我们如何配置部署,才能使上述过程顺利进行呢?
1、首先,将项目MyWeb拷贝到/var/www/目录下。
2、然后,为项目MyWeb添加配置文件,并由nginx启动。
nginx相关的配置文件默然安装路径是/etc/nginx。在/etc/nginx/sites-available/目录下新建配置文件MyWeb.conf并由VIM编辑,命令如下:
sudo vi /etc/nginx/sites-available/MyWeb.conf
内容如下:
server { listen 80; # 监听端口 server_name 127.0.0.1; # 服务器名(多个域名用逗号分隔) charset utf-8; # 服务器字符集 client_max_body_size 5M; # 上传文件最大限制 location /media { # 媒体文件位置 alias /var/www/MyWeb/media; } location /static { # 静态文件位置 alias /var/www/MyWeb/static; } location / { # 为uwsgi协议提供支持(实现与uWSGI服务器通信) uwsgi_pass 127.0.0.1:8888; #为uWSGI服务器设置监听地址(套接字或sock文件) include /etc/nginx/uwsgi_params; # 为uwsgi请求增加参数。 } }
特别提示:为了便于理解,添加了注释,使用时请删除注释。
之后,将配置文件的快捷方式添加到/etc/nginx/sites-enabled/目录中,激活配置文件。命令如下:
sudo ln -s /etc/nginx/sites-available/MyWeb.conf
/etc/nginx/sites-enabled/MyWeb.conf
然后,启动nginx,加载配置文件。命令如下:sudo service nginx start。(另外,常用的命令还有sudo service nginx stop/restart/reload等)
特别说明:此时,根据配置文件的内容,访问127.0.0.1:80会报错。为什么?因为在配置文件中写明了,当访问127.0.0.1:80时,会交由uWSGI服务器处理,而uWSGI服务器还没有部署启动,所以报错。
3、使用配置文件启动uWSGI服务器。
uWSGI服务器可以通过独立命令或配置文件进行启动。使用配置文件启动,不但避免使用过长的命令,而且能增加更多的配置。
新建配置文件,并进行编辑。命令如下:
cd /var/www/MyWeb
sudo vi uwsgi.ini
配置文件内容如下:
[uwsgi] socket = 127.0.0.1:8888 # 监听地址(套接字或sock文件) chdir = /var/www/MyWeb/ # 项目根目录 wsgi-file = MyWeb/wsgi.py # wsgi文件路径 processes = 3 # 开启的工作进程数 threads = 5 # 每个工作进程的线程数 chmod-socket = 664 # 客户端访问MyWeb.sock文件的权限 chown-socket = www-data # 客户端请求的所有者 pidfile= /var/www/MyWeb/MyWeb.pid # 保存进程文件的路径 vacuum = true # 服务器退出时自动删除sock文件和pid文件
特别提示:为了便于理解,添加了注释,使用时请删除注释。
然后,通过配置文件启动uWSGI服务器。命令如下:
sudo uwsgi --ini uwsgi.ini
这时,浏览器访问127.0.0.1:80时,就能访问成功了。本质是:当浏览器访问127.0.0.1:80时,根据配置文件MyWeb.conf中location / … uwsgi_pass 127.0.0.1:8888,nginx将该HTTP请求交由uWSGI服务器处理,nginx与uWSGI的通信是由这个socket(127.0.0.1:8888)完成的。
特别说明1:MyWeb.conf中,uwsgi_pass 127.0.0.1:8888与 socket = 127.0.0.1:8888必须一致。
特别说明2:浏览器访问127.0.0.1:80时,由于路径为“/”,所以,nginx根据配置文件MyWeb.conf,将HTTP请求通过socket(127.0.0.1:8888)转发给uWSGI处理。但浏览器访问localhost:80时,会显示nginx测试成功页面,而不会交由uWSGI处理。
- 从零开始搭建个人网站(7)nginx+uWSGI部署Django项目(下)
- Python3 开发以及部署 RESTful API项目(Python3 + Django2.0 + Django REST FrameWork + Centos7 + uWsgi + Nginx
- Nginx+uWSGI或fastcgi部署Django项目
- 从零开始搭建个人网站(6)nginx+uWSGI部署Django项目(上)
- 基于nginx和uWSGI在Ubuntu系统上部署Django项目
- Ubuntu下Django+uwsgi+nginx项目部署
- django项目的生产环境部署,利用nginx+uwsgi
- ubuntu 14.04部署python项目(Nginx+uwsgi+django)
- uWSGI + Nginx 部署 Django 项目笔记
- 跨过Nginx上基于uWSGI部署Django项目的坑
- 使用uwsgi+nginx部署django项目
- 通过uwsgi和nginx部署django项目
- ngingx+uwsgi+django项目部署nginx找不到django应用
- nginx1.4.7+uwsgi+django1.9.2项目部署,liunx系统为ubuntu14.0.4
- 跨过Nginx上基于uWSGI部署Django项目的坑
- 基于Nginx和uWSGI在Ubuntu上部署Django项目
- 在服务器上uwsgi+nginx部署Django项目
- nginx-uWSGI-Django项目-阿里云部署
- 使用Nginx+uwsgi部署Django项目
- Ubuntu16.04下Nginx+uwsgi部署Django项目