Django使用nginx部署
本文默认已经安装django和pip
Django使用nginx部署需要用到python uwsgi模块。 可能遇到的问题:需要安装pythonX.Y-dev,安装uwsgi编译时依赖。Centos叫做pythonX.Y-devel。
pip install uwsgi
1.安装完成之后一个基本的测试,测试uwsgi是否工作正常:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
#return ["Hello World"] # python2
使用uwsgi启动
uwsgi --http:8000 --wsgi-file test.py
参数含义:
- http:8000 使用http协议占用8000端口
- wsgi-file test.py 加载文件 test.py
在浏览器中访问 http://127.0.0.1:8000 应该能够看到 hello world显示在网页上。 程序访问流程:网页->uwsgi->python ** 目前为止,uwsgi工作正常。
2.测试Django项目
Django目前的项目结构大致如下:
website - Django startserver生成的整体项目文件
manage.py website - Django startserver生成的整体项目文件 app - Django startapp生成的应用项目文件
先确保Django项目运行无异常,这时应该能够看到Django访问正常的界面
python manage.py runserver 0.0.0.0:8000
如果 http://127.0.0.1:8000 访问正常,那么接下来使用uwsgi启动Django
uwsgi --http :8000 --module website.wsgi
- module website.wsgi 加载wsgi模块,此命令需要在website目录下执行,其他目录加全路径也会报内部错误
** 目前为止,uwsgi+django工作正常。
3.测试nginx+wsgi
安装nginx,创建website.conf配置文件,并放置到文件夹/etc/nginx/servers或者/usr/local/etc/nginx/servers下,为什么要放到此路径下,是因为/etc/nginx/nginx.conf或者/usr/local/etc/nginx/nginx.conf中有一句include servers/*,这样配置比较方便。
# website.conf
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # 后面用到
server 127.0.0.1:8000; # 监听的ip及端口
}
server {
listen 9000; # 监听端口9000
server_name 127.0.0.1;
charset utf-8;
client_max_body_size 75M; # 最大上传文件大小
# 测试文件夹
location /media {
alias /path/to/your/website/media; # 静态文件文件夹
}
location / {
uwsgi_pass django;
include /path/to/your/mysite/uwsgi_params; # 一般可以直接使用nginx路径下的uwsgi_params,路径一般在/etc/nginx/uwsgi_params或者/usr/local/etc/nginx/uwsgi_params
}
}
此时文件结构
website - Django startserver生成的整体项目文件
manage.py website - Django startserver生成的整体项目文件 app - Django startapp生成的应用项目文件 media - 静态文件夹,可以向其中添加一些图片测试用
启动nginx
nginx
打开网页 http://127.0.0.1:9000/media/pic.png 应该能够看到一张图片 ** 目前为止 nginx工作正常 启动uwsgi
uwsgi --socket :8000 --wsgi-file test.py
- socket :8000 使用uwsgi协议,端口8000
与之前的不同是,此处使用socket通讯,因为nginx与uwsgi的协议必须使用socket 打开网页 http://127.0.0.1:9000 应该能够hello world界面。 打开网页 http://127.0.0.1:8000 应该看到网页加载失败。
** 目前为止 nginx+uwsgi工作正常
4.django+uwsgi+nginx
使用网络端口sock不是很好,更好的办法是使用文件socket,下面使用文件socket启动。 使用uwsgi启动django
uwsgi --socket website.sock --wsgi-file test.py
- website.sock会在命令执行的时候自动创建
同时修改 website.conf中的文件
upstream django {
server unix:///path/to/your/mysite/mysite.sock; # 连接uwsgi启动时创建的website.sock
# server 127.0.0.1:8000; # 监听的ip及端口
}
接下来使用uwsgi启动django,推荐也采用配置文件的方式: 配置文件如下django.ini
[uwsgi]
chdir = /path/to/your/mysite/ # 工作路径
module = website.wsgi # 文件不存在,这样写就行
socket = /path/to/your/mysite/website.sock # 文件可以不存在,uwsgi启动时创建
chmod-socket = 664 # 没有权限的时候添加,没有权限问题可以去掉
master = true # 是否有守护进程
processes = 8 # 启动多少个进程
vacuum = true # 退出的时候是否删除运行时产生的临时文件
daemonize = /path/to/your/mysite/log.log # 指定日志文件,启动的时候后台启动
pidfile = /path/to/your/mysite/pidfile.pid # pid文件,感觉十分必要,不然uwsgi关闭非常费劲,指定pid文件之后可以使用uwsgi --stop /path/to/your/mysite/pidfile.pid 关闭uwsgi启动的进程
使用uwsgi启动django项目:
uwsgi –ini /path/to/your/mysite/django.ini
至此打开 http://127.0.0.1:9000 就能看到django正常的界面。