专栏首页Python研发Nginx+uWsgi生产部署Django

Nginx+uWsgi生产部署Django

部署得过程很简单,部署得核心在于,为什么要这样做,每一个参数代表什么意思,最终的目的是得了解,一些基概念性的东西。

uWsgi简介

说Uwsgi之前,先说一下Wsgi。

什么是Wsgi?  

WSGI: 是一种Web服务器网关接口,它是一个Web服务器(如Nginx) 与应用服务器(如uWSGI服务器)通信的一种规范。

uWSGI是一个Web服务器,它实现了WSGI协议,uwsgi,http等协议,Nginx中HttpUwsgiModul的作用是与uWSGI服务器进行交换

那么那些框架自带了Wsgi Server呢?

很多框架都自带了WSGI Server, 比如: Flask、 Webpy、 Dajngo、 CherryPy等等。当然性能都不好,自带的Web Server更多的是本地测试用途,发布时则使用生产环境的WSGI Server或者是联合Nginx做Uwsgi。

简单的来讲Wsgi就是,标准,

比如:  一个德国人跟一个法国人聊天,他们要想聊天可以通过一个标准的国际语言: 英语来进行交互。

要注意 WSGI/uWSGI/uwsgi 这三个概念的区分。

WSGI是一种通讯协议

uwsgi同WSGI一样是一种通信协议

而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

为什么uWSGI还需要nginx,应为Nginx具备了优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样就实现了,动静分离。 也可以更好的达到客户端的效果。

常见的Python Http服务器

早期的Web Server

早期的时候,只能访问静态的内容, 在那时Web开发还很简单,开发这经常会去操作Web服务器,并且写一些HTML页面放到服务器指定的文件夹下(www)下,这些Html页面,就在浏览器请求页面时使用,

随着时间的发展,问题就出现了,你只能获取到静态的内容,如果想访问者看到有多少其他访问者访问了这个网站,或者想让访问者提交一些包含邮箱姓名,地址的表单,这个就比较麻烦了。

中期的WebServer

到了中期,就可以访问一些动态的数据了,  当浏览器访问Webserver的时候, 就可以调用后台的一些数据了, 写小程序的人很多,各种人都有,然后统一了一个标准,CGI,随着时间的演变,到了05年左右,进入了Web应用时代,

现在的Web Server

实际部署过程

安装nginx

yum install nginx

Nginx安装完成之后安装uWsgi。

pip install uwsgi

以上两项安装完成之后,现在开始配置uwsgi,  进入项目的根目录,注意:项目不要放在root目录下。 

执行一下命令,来测试项目是否可以被uwsgi启动。

uwsgi --http 192.168.31.123:80 --file teacher/wsgi.py --static-map=/static=static

192.168.31.123: 你的ip地址  

启动成功之后

进入项目跟目录之后,在同级目录创建一个空的文件夹:

mkdir script

创建完成之后,在目录中创建uwsgi.ini文件。

vim uwsgi.ini

 创建ini文件完成之后,将一下内容放进文件夹中。

   [uwsgi]
   # 项目目录
    chdir=/opt/project_teacher/teacher/
    # 启动uwsgi的用户名和用户组
    uid=root
    gid=root
    # 指定项目的application
    module=teacher.wsgi:application
    # 指定sock的文件路径
    socket=/opt/project_teacher/script/uwsgi.sock      # sock文件是由uwsgi.ini文件启动之后自动生成
    # 启用主进程
    master=true
    # 进程个数
    workers=5
    pidfile=/opt/project_teacher/script/uwsgi.pid
    # 自动移除unix Socket和pid文件当服务停止的时候
    vacuum=true
    # 序列化接受的内容,如果可能的话
    thunder-lock=true
    # 启用线程
    enable-threads=true
    # 设置自中断时间
    harakiri=30
    # 设置缓冲
    post-buffering=4096
    # 设置日志目录
    daemonize=/opt/project_teacher/script/uwsgi.log 

以上配置完成之后,启动uwsgi.ini文件,并查看进程。

uwsgi到此为止,那么恭喜你,uwsgi已经配置完成了, 现在开始配置nginx, 进入以下目录修改default.conf文件:

cd /etc/nginx/conf.d/


vim default.conf

进入文件之后讲一下,代码,贴近文件中:

    server {
                    listen 80;
                    server_name 10.129.205.183 ;       # 域名
                    access_log  /var/log/nginx/access.log  main;
                    charset  utf-8;
                    gzip on;
                    gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;

                    error_page  404           /404.html;
                    error_page   500 502 503 504  /50x.html;
                    # 指定项目路径uwsgi
                    location / {
                        include uwsgi_params;
                        uwsgi_connect_timeout 30;
                        uwsgi_pass unix:/opt/project_teacher/script/uwsgi.sock;
                    }
                    # 指定静态文件路径
                    location /static/ {
                        alias  /opt/project_teacher/teacher/static/;
                        index  index.html index.htm;
                    }

    }

启动ngxin

启动nginx之后,在启动uwsgi,此时你打开浏览器,输入你设置的server_name,是不是就可以访问出你的项目了,

项目截图,最近本人想搭建自己的一个简单的博客,基本页面,和功能已经完成,后期还会加一些,高级一点的东西,毕竟现在里边还什me都没有,博客截图如下:

上传博客内容,是集成百度的,Ueditor, 之前是在Django的admin中来集成的Django-Ueditor, 想了想,还是自己写了一个添加文章的地方。  

git源码地址: 

https://github.com/Mrwyc/DjangoBlog

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 五分钟学会centos配置gitlab

    修改gitlab配置文件,访问IP:端口,   如果不修改默认80端口,进入文件之后,找到

    Wyc
  • 装饰器

    Wyc
  • Django之admin

     django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,

    Wyc
  • 手把手教你用图灵机器人做微信公众号自动回复助手 手把手教你用图灵机器人做微信公众号自动回复助手

    创建成功后,会自动跳转到机器人设置界面,在这里你可以对机器人进行个性化定制。其实,图灵机器人提供简单的方法,快速接入微信公众号,这太没有挑战性了,对于喜欢搞...

    尾尾部落
  • 深度 | 为了让iPhone实时运行人脸检测算法,苹果原来做了这么多努力

    AI 科技评论按:苹果从iOS11开始正式在系统中带有机器学习API,同步提供了许多基于机器学习/深度学习的手机功能。其实这之前苹果就已经做了很多研究和开发,但...

    AI科技评论
  • 斐波那契数列

    用户3003813
  • spring框架思维导图,简约概括

    使用Spring MVC构建Web应用程序

    java思维导图
  • 云计算决策指南:解析医疗的7大解决方案

    为了帮助你计划,这份云计算买家指南着眼于四大IaaS供应商:亚马逊、微软、谷歌和IBM。一份来自协同作用调查组织(Synergy Research Group)...

    静一
  • spring框架思维导图,简约概括

    Spring之旅 简化java开发 激发pojo的潜能 依赖注入 应用切面 使用模版消除样板式代码 容纳你的bean 与应用上下文共事 bean的生命周期 俯翰...

    java思维导图
  • 这些保护Spring Boot 应用的方法,你都用了吗?

    Spring Boot大大简化了Spring应用程序的开发。它的自动配置和启动依赖大大减少了开始一个应用所需的代码和配置量,如果你已经习惯了Spring和大量X...

    Java知音

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动