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 项目部署就完成啦。