资讯专栏INFORMATION COLUMN

python3 + Django + uwsgi + nginx 配置部署笔记

ddongjian0000 / 1579人阅读

摘要:本文环境操作系统版本版本版本本文平台为腾讯云核系统我的项目文件名为安装的安装成功后运行将会出现安装测试运行状态新建文件有些教程说是但是这样其实会出现访问空白的情况我的是的环境,需要对进行编码而如果你是的环境,你应该写使用运行该文件

本文环境

操作系统: Ubuntu 16.04.3
Python版本: 3.5.2
Django版本: 2.0.4
nginx版本: 1.10.3

本文平台为腾讯云1核1G系统 
我的项目文件名为: dgutpsy
安装pip3(python3 的pip)
sudo apt-get install python3-pip

安装成功后运行pip3将会出现

安装uwsgi
pip install uwsgi

测试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运行该文件
uwsgi --http :8000 --wsgi-file test.py
此语句的意思是,使用uwsgi运行test.py文件, 采用http模式, 端口8000

访问页面
好啦,可以看到亲切的hello world 就说明uwsgi运行成功了

TIPS: 如果你访问不了,请先检查腾讯云安全组端口是否开放8000端口
安装Django
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!
uswgi运行项目
 uwsgi --http :8000 --chdir /home/ubuntu/dgutpsy  --wsgi dgutpsy.wsgi
这个语句的意思与上相似,只不过是多了一个工作路径和wsgi文件

开什么玩笑? 你觉得没变化?

至此
我们可以暂定以下内容

项目没问题.

项目配置没问题

uwsgi没问题

对项目的支持环境没问题


接下来, 我们开始配置nginx
安装nginx
sudo apt-get install nginx
测试nginx运行状态

nginx 安装成功
修改nginx配置
文件路径"/etc/nginx/sites-enabled/default"

别再费力找nginx.conf啦,新版本已经没有这个文件的.

我的
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文件内容应该是

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;
没有这个文件,或者这个文件写错是会报错的哦.
访问测试502

这是因为我们的socket通信还没开始呢!
nginx 与 uwsgi通信
先使用hello world测试
uwsgi --socket :8001 --wsgi-file test.py
访问测试页面


至此: nginx 与 uwsgi通信成功!

TIPS: 这里你是无法通过在浏览器里面访问8001端口来判断是否启动的,因为它是socket协议

让uwsgi后台运行
这样虽然看似可以, 但是当你关闭ssh时,又会出现502了!

这是因为当你关闭这个ssh进程时,uwsgi进程也被终止了.
而且,每次启动都要输一串好长的命令,好不麻烦!

这个时候,我们需要用到一个东西, 那就是ini配置文件启动.
其中daemonize = /home/ubuntu/dgutpsy/test.log的意思就是后台运行并规定日志输出目录。

新建test.ini
[uwsgi]
socket = 127.0.0.1:8001
wsgi-file = /home/ubuntu/dgutpsy/test.py
daemonize = /home/ubuntu/dgutpsy/test.log 
uwsgi --ini test.ini
niginx与Django项目通信 新建dgutpsy.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

然后运行

uwsgi --ini dgutpsy.ini
域名映射

添加域名>解析consult.psyannabel.cn

访问页面

后记:

Q&A:
Q: 能用manage.py运行的,为什么要用uwsgi?

A: 单进程的manage.py, 能和web服务器uwsgi比ma

Q: 能用uwsgi的,为什么还要用nginx?

A: uwsgi虽然是web服务器, 但是它在处理静态文件时, 并没有nginx来得优秀.

Q: 大致流程?

A: nginx运行web处理http请求, nginx使用socket与uwsgi通信,将动态部分转让交给uwsgi处理

Q: 为啥我的test.py运行不了?

A: 如果端口开放没有问题,那么请检查Python版本对应的return

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23756.html

相关文章

  • 基于python的种子搜索网站-项目部署

    摘要:本讲会对种子搜索网站的部署过程进行详细的讲解。配置数据库创建的数据库你的密码域名配置将你自己的域名写入到导入表结构创建超级用户创建文件在目录下,创建文件,并设置权限为运行配置配置位于配置,在下新建写入你的域名运行大功告成本讲会对种子搜索网站的部署过程进行详细的讲解。 网站演示: https://bt.mypython.me 源码地址: https://github.com/geeeeeee...

    番茄西红柿 评论0 收藏0
  • 测试格式

    摘要:首先要安装因为系统已经装了所以接下来直接装虚拟环境建立一个独立于系统的虚拟环境不会跟系统环境混淆运行环境退出环境运行虚拟环境,在环境中安装新建项目新建不用也可以进行接下来的操作官网安装在虚拟环境中检测是否正常工作在与同目录下写一个模拟 1. virtualvenv 2. django 3. uWSGI 4. nginx 1. virtualvenv virtualvenv in...

    y1chuan 评论0 收藏0
  • 在阿里云上Ubuntu环境通过nginx+uwsgi部署Django项目

    年前阿里云打折,1核1G的云服务器一年只要300多块,果断就租了1年的。既然服务器已经到手,怎么能不把自己写的项目部署上去呢,其实网上关于nginx+uwsgi部署Django项目的文章有很多,但是这些文章要不就是很久之前的,要不就是互相抄袭,一路过来都是坑,这里重点吧在部署时候遇到的坑着重介绍一下: 1.首先部署django项目 首先是django项目,由于我是使用Anaconda来进行版本控制...

    894974231 评论0 收藏0
  • 在阿里云上Ubuntu环境通过nginx+uwsgi部署Django项目

    年前阿里云打折,1核1G的云服务器一年只要300多块,果断就租了1年的。既然服务器已经到手,怎么能不把自己写的项目部署上去呢,其实网上关于nginx+uwsgi部署Django项目的文章有很多,但是这些文章要不就是很久之前的,要不就是互相抄袭,一路过来都是坑,这里重点吧在部署时候遇到的坑着重介绍一下: 1.首先部署django项目 首先是django项目,由于我是使用Anaconda来进行版本控制...

    asce1885 评论0 收藏0
  • Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器

    摘要:百度不行就用吧,中文不行就找英文的,最后,给我误打误撞的部署成功了。准备工作我使用的系统是版,官网下载地址安装的时候全部选择英文,记得以前选择中文的时候安装时出了问题,服务器组件一个不选,安装做的很贴心,基本上是一路回车,就不详细说明了。 Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 前不久为了部署Django项目,在百度上到处找教程,找...

    tracymac7 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<