nginx+uwsgi+djangos部署项目完整
1、基本信息
Linux 版本:SentOS7.4
Python 版本:3.7.1
2、下载 uWSGI
pip3 install uwsgi
uwsgi 主要的任务是座位分发路由的服务器。
先写一个测试文件,测试 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
3、测试
然后用 uwsgi 启动测试文件
uwsgi --http :8000 --wsgi-file test.py
然后访问 127.0.0.1:8000 端口,即可收到 hello word 。证明 uwsgi 启动成功。
重点来了:用 uwsgi 使用配置文件启动 Django 项目。
4、启动 Django
先不要急,先用 Django 项目自带的 wsgi.py 文件启动一下 django 试试。
uwsgi --http :8000 --wsgi-file djangp/wsgi.py
访问 127.0.0.1:8000
OK,启动成功。
接下来的任务就是写配置文件了,可以设置更加详细的参数。
文件 wsgi.ini:
[uwsgi]
# django 相关配置
# 必须全部为绝对路径
# 项目执行的端口号
# http = :8000 # 用 uwsgi 启动项目用 http
socket = :8001 # 用 nginx 启动用 socket
# 项目路径
chdir = 项目路径
# Django 的 wsgi 文件的相对路径
# wsgi-file = 项目路径/wsgi.py
module = mysite.wsgi
# python 虚拟环境的 路径
home = /root/pythonEnvs/virtualenvName
# 进程相关设置
# 主进程
master = True
# 最大数量工作进程
processes = 4
# socket文件地址,绝对路径(不用手动创建,额nginx链接后自动创建)
#socket =
# 设置socket权限
#chmod-socket=666
# 守护进程的方式运行,log日志存在log文件里
deamonize = 项目路径/uwsgi.log
# 退出时清理环境
vacuum=True
现在用这个文件通过
uwsgi --ini wsgi.ini
就可以启动 django 项目了。
关于其中的 http 和 socket 字段,当只用 uwsgi 启动 django 项目的时候,用 http 字段,因为是通过 http 请求服务器的。
如果还要使用 nginx 就使用 socket 字段。
好啦,现在 uwsgi 也配置好了。
接下来配置 nginx
5、配置 nginx
首先下载 nginx
yum install nginx
下载成功后执行 nginx
命令直接启动。
然后访问本地地址可以看到 nginx 的欢迎页面。
OK,接下来接入 nginx 就可以了,先来写 nginx 的配置文件。
events {
worker_connections 1024;
}
http {
upstream django {
server 127.0.0.1:8001;
}
server {
# the port your site will be served on
listen 8000 ; # 端口号
# the domain name it will serve for
server_name 0.0.0.0; # 服务器 ip 或是域名
charset utf-8;
# Django media
location /media {
alias 项目路径/media; # 媒体文件所在文件夹
}
location /static {
alias 项目路径/static; # 静态文件所在文件夹
}
# max upload size
client_max_body_size 75M; # adjust to taste
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /uwsgi_params; #uwsgi_params 路径
}
}
}
其中用到一个 uwsgi_params 文件,这个文件是用来链接 nginx 和 uwsgi 的。
自己建一个文件就可以,内容如下:
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 REQUEST_SCHEME $scheme;
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;
6、启动项目
先来部署一下静态文件,如果你的 app 下有多个静态文件的话(我没用到)。
python manage.py collectstatic
STATIC_ROOT 一定要设置好。
启动 nginx:
nginx -c 配置文件地址
配置文件地址一定要写绝对路径。
启动 uWSGI:
uwsgi --ini wsgi.ini
OK,到这里 nginx+uWSGI+Django 项目部署就完成啦。
大家好,我是冬冬杨~