本文环境
操做系统: Ubuntu 16.04.3
Python版本: 3.5.2
Django版本: 2.0.4
nginx版本: 1.10.3html
本文平台为腾讯云1核1G系统
个人项目文件名为:dgutpsy
sudo apt-get install python3-pip
安装成功后运行
pip3
将会出现
pip install uwsgi
新建文件test.py
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"]
有些教程说是return "hello world"
可是这样其实会出现访问空白的状况, 个人是Python3的环境,须要对hello world进行编码.
而若是你是Python2的环境,你应该写return "hello world"
uwsgi --http :8000 --wsgi-file test.py
此语句的意思是,
使用uwsgi运行test.py文件, 采用http模式, 端口8000
好啦,能够看到亲切的hello world 就说明uwsgi运行成功了
TIPS: 若是你访问不了,请先检查腾讯云安全组端口是否开放8000端口
pip3 install Django
如在python3里面import django没有报错则安装成功.
如今咱们开始上传项目代码
使用MobaXterm的sftp工具拖进来,[笑着哭]不要问我为何不用ftp,这个方便.
切进项目目录,运行
python3 manage.py runserver 0.0.0.0:8000
不太对?这是由于设置了ALLOWED_HOSTS的缘由
咱们在setting.py里设置一下
ALLOWED_HOSTS = ['*']
OK!
uwsgi --http :8000 --chdir /home/ubuntu/dgutpsy --wsgi dgutpsy.wsgi
这个语句的意思与上类似,只不过是多了一个工做路径和wsgi文件
![]()
开什么玩笑? 你以为没变化?
咱们能够暂定如下内容
接下来, 咱们开始配置nginx
sudo apt-get install nginx
nginx 安装成功
文件路径
"/etc/nginx/sites-enabled/default"
别再费力找nginx.conf啦,新版本已经没有这个文件的.python
个人
upstream django { server 127.0.0.1:8001; #web的socket端口 } server { listen 80 default_server; listen [::]:80 default_server; index index.html index.htm index.nginx-debian.html; server_name _; location / { root /home/ubuntu/dgutpsy; #项目目录 uwsgi_pass django; include /home/ubuntu/dgutpsy/uwsgi_params; #uwsgi_params文件的地址 } }
完整的uwsgi_params文件内容应该是nginx
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;
没有这个文件,或者这个文件写错是会报错的哦.
这是由于咱们的socket通讯还没开始呢!
先使用hello world测试
uwsgi --socket :8001 --wsgi-file test.py
至此: nginx 与 uwsgi通讯成功!web
TIPS: 这里你是没法经过在浏览器里面访问8001端口来判断是否启动的,由于它是socket协议
这样虽然看似能够, 可是当你关闭ssh时,又会出现502了!这是由于当你关闭这个ssh进程时,uwsgi进程也被终止了.
并且,每次启动都要输一串好长的命令,好不麻烦!shell
这个时候,咱们须要用到一个东西, 那就是ini配置文件启动.
其中daemonize = /home/ubuntu/dgutpsy/test.log
的意思就是后台运行并规定日志输出目录。django
[uwsgi] socket = 127.0.0.1:8001 wsgi-file = /home/ubuntu/dgutpsy/test.py daemonize = /home/ubuntu/dgutpsy/test.log
uwsgi --ini test.ini
[uwsgi] socket = 127.0.0.1:8001 chdir = /home/ubuntu/dgutpsy module = dgutpsy.wsgi master = true processes = 1 threads = 2 max-requests = 6000 daemonize = /home/ubuntu/dgutpsy/run.log
而后运行ubuntu
uwsgi --ini dgutpsy.ini
添加域名>解析consult.psyannabel.cn
浏览器
Q&A:
Q: 能用manage.py运行的,为何要用uwsgi?安全A: 单进程的manage.py, 能和web服务器uwsgi比maQ: 能用uwsgi的,为何还要用nginx?服务器
A: uwsgi虽然是web服务器, 可是它在处理静态文件时, 并无nginx来得优秀.Q: 大体流程?
A: nginx运行web处理http请求, nginx使用socket与uwsgi通讯,将动态部分转让交给uwsgi处理Q: 为啥个人test.py运行不了?
A: 若是端口开放没有问题,那么请检查Python版本对应的return