您的位置:澳门新葡8455最新网站 > 编程教学 > Django安装和布置

Django安装和布置

发布时间:2019-12-09 15:19编辑:编程教学浏览(93)

    世家都学过了django,用django写了各类效能,写了bbs项目,写了路飞学城。

    uWSGI是为Python语言定义的通用网关接口,它担当python web框架(django、flask、web.py等)和web服务器(nginx、apache、lighttpd等)之间的中间层。

    我们都驾驭django是二个web框架,方便大家超快支付web程序,http诉求的动态数据正是由web框架来提供管理的。

        浏览器                      chrome、firefox、ie等
          |
        web服务器                  nginx、apache等
          |
        网关接口                    CGI、法斯特CGI、WSGI等
          |
        Python(程序、Web框架)    Django、Flask、Tornado等

    眼下邓超(dèng chāo卡塔尔国也对nginx简单的介绍了,本文将nginx、WSGI、uwsgi、uWSGI、django这多少个涉及梳理一下。

    python中自带的wsgiref正是意气风发种wsgi接口的正规落到实处,然而,由于百分百应用python达成等原因,导致wsgiref实在过于缓慢,只好用来测量检验和学习。分娩情状中大家需求使用质量更加高的服务器,近来常用的wsgi服务器有:uWSGI、Gunicorn、twisted.web。

    wsgi    全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则。
    运行在wsgi上的web框架有bottle,flask,django
    
    uwsgi    和wsgi一样是通信协议,是uWSGI服务器的单独协议,用于定义传输信息的类型
    
    uWSGI    是一个web服务器,实现了WSGI协议,uwsgi协议。a
    
    nginx    web服务器,更加安全,更好的处理处理静态资源,缓存功能,负载均衡,因此nginx的强劲性能,配合uWSGI服务器会更加安全,性能有保障。
    
    django 高级的python web框架,用于快速开发,解决web开发的大部分麻烦,程序员可以更专注业务逻辑,无须重新造轮子
    

    1 uWSGI的安装
    uWSGI是用C语言写的高质量WSGI服务器,安装uWSGI前大家供给安装Python和C编写翻译器(GCC)。推荐应用python包微型机pip安装uWSGI。

    逻辑图

    图片 1

    web服务器

    传统的c/s架构,请求的过程是
    客户端 > 服务器 
    服务器 > 客户端
    服务器就是:1.接收请求 2.处理请求 3.返回响应
    

    web框架层

    HTTP的动态数据交给web框架,例如django遵循MTV模式处理请求。
    HTTp协议使用url定位资源,urls.py将路由请求交给views视图处理,然后返回一个结果,完成一次请求。
    web框架使用者只需要处理业务的逻辑即可。
    

    比如将三次通讯转变为“对话”的历程

    Nginx:hello wsgi,作者刚收到多少个伸手,你筹算下然后让django来管理呢

    WSGI:好的nginx,小编立时安装境况变量,然后把乞求提交django

    Django:多谢WSGI,小编管理完伏乞立即给您响应结果

    WSGI:好的,小编在等着

    Django:解决啦,麻烦wsgi吧响应结果传递给nginx

    WSGI:太棒了,nginx,响应结果请收好,已经依据要求传递给您了

    nginx:好滴。作者把响应交给顾客。合营喜悦

    #安装新型牢固版
    pip install uWSGI
    #也得以设置长时间支撑版(LTS版本)
    #pip install
    在Ubuntu下得以运用apt-get来安装

    Django Nginx+uwsgi 安装配置

    在前边的章节中我们采取 python manage.py runserver 来运作服务器。那只适用测量检验蒙受中运用。

    标准公告的劳动,需求三个方可安静而不息的服务器。

    apt-get install uwsgi 

    功底开拓意况安排

    yum groupinstall "Development tools"
    yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
    

    在Fedora、RedHat、CentOS下使用yum安装

    超前设置好python3条件

    https://www.cnblogs.com/pyyu/p/7402145.html
    

    yum groupinstall "Development Tools"
    yum install python 

    virtualenv

    请确保你的虚拟环境正常工作
    https://www.cnblogs.com/pyyu/p/9015317.html
    

    编译安装,从github下载uwsgi代码,cd到目录下

    安装django1.11

    pip3 install django==1.11
    #创建django项目mysite
    django-admin startproject mysite
    #创建app01
    python3 manage.py startapp app01
    

    mysite/settings.py

    #settings.py设置
    ALLOWED_HOSTS = ['*']
    install app01
    

    mysite/urls.py

    from app01 import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^hello_django/', views.hello),
    ]
    

    app01/views.py

    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    def hello(request):
        print('request is :',request)
        return HttpResponse('django is ok ')
    

    python uwsgiconfig.py --build

    安装uWSGI

    进入虚拟环境venv,安装uwsgi
    (venv) [root@slave 192.168.11.64 /opt]$pip3 install uwsgi
    检查uwsgi版本
    (venv) [root@slave 192.168.11.64 /opt]$uwsgi --version
    2.0.17.1
    #检查uwsgi python版本
    uwsgi --python-version
    

    运作轻易的uWSGI

    #启动一个python
    uwsgi --http :8000 --wsgi-file test.py
    
    • http :8000: 使用http协议,端口8000
    • wsgi-file test.py: 加载内定的文件,test.py
    #test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"] # python3
    

    uWsgi热加载python程序

    在启动命令后面加上参数
    uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1 
    #发布命令
    command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi
    
    #此时修改django代码,uWSGI会自动加载django程序,页面生效
    

    运行django程序

    #mysite/wsgi.py  确保找到这个文件
    uwsgi --http :8000 --module mysite.wsgi
    
    • module mysite.wsgi: 加载钦赐的wsgi模块

    uwsgi配置文件

    图片 2图片 3

    uwsgi支持ini、xml等多种配置方式,本文以 ini 为例, 在/etc/目录下新建uwsgi_nginx.ini,添加如下配置:
    
    # mysite_uwsgi.ini file
    [uwsgi]
    
    # Django-related settings
    # the base directory (full path)
    chdir           = /opt/mysite
    # Django's wsgi file
    module          = mysite.wsgi
    # the virtualenv (full path)
    home            = /opt/venv
    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes       = 1
    # the socket (use the full path to be safe
    socket          = 0.0.0.0:8000
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    

    uwsgi.ini

    2 测量试验uwsgi是不是安装成功
    在尖峰中输入以下命令查看uwsgi的版本号,假使出口符合规律,表明uswgi已设置成功

    点名安顿文件运营命令

    uwsgi --ini  /etc/uwsgi_nginx.ini
    

    $ uwsgi --version
    2.0.11.1
    我们得以编写制定三个大致的wsgi应用来测量检验uwsgi是还是不是棉被服装置成功,首先创立几个test.py文件:

    配置nginx结合uWSGI

    配置nginx.conf

    worker_processes  1;
    error_log  logs/error.log;
    pid        logs/nginx.pid;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  logs/access.log  main;
        sendfile        on;
        keepalive_timeout  65;
       #nginx反向代理uwsgi
        server {
            listen       80;
            server_name  192.168.11.64;
            location / {
             include  /opt/nginx1-12/conf/uwsgi_params;
             uwsgi_pass 0.0.0.0:8000;
                root   html;
                index  index.html index.htm;
            }
          #nginx处理静态页面资源
          location /static{
            alias /opt/nginx1-12/static;   
             }
         #nginx处理媒体资源
         location /media{
            alias /opt/nginx1-12/media;   
    
             }
            error_page   500 502 503 504  /50x.html;
    
            location = /50x.html {
                root   html;
            }
        }
    }
    

    构造完运营nginx

    # test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"] # python3
        #return ["Hello World"] # python2
    运行uwsgi:

    supervisor

    supervisor 是依照 python 的职务管理工科具,用来机关运维各类后台任务,当然你也能间接选用 nohup 命令使职务自动后台运维,但借使要重启义务,每一次都要好手动 kill 掉任务进度,这样很麻烦,何况只要程序不当招致进度退出的话,系统也无从活动重载职责。

    那边邓超(dèng chāo卡塔尔要构造基于virtualenv的supervisor

    是因为supervisor在python3下超级小概使用,因而只可以用python2去下载!!!!!!

    #注意此时已经退出虚拟环境了!!!!!
    yum install python-setuptools
    easy_install supervisor
    

    由此命令生成supervisor的配支文件

    echo_supervisord_conf > /etc/supervisord.conf
    

    然后再/etc/supervisord.conf末尾增添上如下代码!!!!!!

    [program:my]
    #command=/opt/venv/bin/uwsgi --ini  /etc/uwsgi_nginx.ini  #这里是结合virtualenv的命令 和supervisor的精髓!!!!
    command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi
    #--home指的是虚拟环境目录  --module找到 mysite/wsgi.py
    
    directory=/opt/mysite
    startsecs=0
    stopwaitsecs=0
    autostart=true
    autorestart=true
    

    说起底运转supervisor,实现uWSGI运行django,nginx反向代理

    supervisord -c /etc/supervisord.conf #启动supervisor
    supervisorctl -c /etxc/supervisord.conf restart my  #重启my项目
    supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]
    

     重新加载supervisor

    一、添加好配置文件后
    
    二、更新新的配置到supervisord    
    
    supervisorctl update
    三、重新启动配置中的所有程序
    
    supervisorctl reload
    四、启动某个进程(program_name=你配置中写的程序名称)
    
    supervisorctl start program_name
    五、查看正在守候的进程
    
    supervisorctl
    六、停止某一进程 (program_name=你配置中写的程序名称)
    
    pervisorctl stop program_name
    七、重启某一进程 (program_name=你配置中写的程序名称)
    
    supervisorctl restart program_name
    八、停止全部进程
    
    supervisorctl stop all
    注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。
    

    uwsgi --http :8000 --wsgi-file test.py
    参数中,http :8000表示使用http契约,端口号为8000,wigi-file则象征要运转的wsgi应用程序文件。uwsgi运转后张开浏览器,访谈 ,大概是相应服务器地址的8000端口,就能够看来hello world 页面了。

      django的静态文件与nginx配置

    mysite/settings.py

    STATIC_ROOT='/opt/nginx1-12/static'
    STATIC_URL = '/static/'
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,"static"),
    ]
    

    上述的参数STATIC_ROOT用在哪?

    经过python3 manage.py collectstatic 搜集全数你接受的静态文件保留到STATIC_ROOT!

    STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来
    # 把这些文件放到一起是为了用nginx等部署的时候更方便
    

     

     

    参照他事他说加以考察文书档案:

     uwsgi热加载:

    上边的例证中,大家用浏览器直接访谈了uwsgi运转的python程序(独有贰个入口函数的wsgi测验应用test.py卡塔尔,其访谈布局如下所示。

        浏览器 <-> uWSGI <-> Python
    上述格局运维uWSGI服务的历程中,能够使用CT凯雷德L+C就可以甘休服务,在后续的章节中会讲到自动管理和安顿。

    3 nginx和django的配置
    nginx和django的安装不是本文的要害,故在这里略去,只谈谈安排部分。在此边,大家要得以完毕的功效如下:

        浏览器 <-> nginx <-> uWSGI <-> Django(python)
    uwsgi_params 配置文件
    uWSGI使用的商业事务不完全都以正规的WSGI公约,大家须要从Github下载uwsgi_paraments配置文件,并将该文件拷贝到项目路径中(比如:/user/home/pengquanxin/projects/mysite1/)。

    Nginx服务器配置
    接下去,要安排nginx服务器和uWSGI互通,能够利用unix套接字情势和TCP端口方式。在nginx配置文件夹(/etc/naginx/site-enabled 或 /usr/local/etc/nginx/sites-enabled)中新建网址的构造文件mystie_nginx.conf,输入以下内容:

    # mysite_nginx.conf

    # nginx供给三番两次的中游
    upstream django {
        server unix:///path/to/your/mysite/mysite.sock; # 使用unix套接字
        #server 127.0.0.1:8001; # 使用TCP端口请注释上生龙活虎行,并撤回本行注释,这里的端口指的是跑uwsgi的端口
    }

    # nginx服务器配置
    server {
        # 监听端口
        listen      80;
        # 域名
        server_name .example.com;
        # 编码
        charset    utf-8;

        # 最大上传大小
        client_max_body_size 75M; 

        # Django 的media路径
        location /media  {
            alias /path/to/your/mysite/media; 
        }

        # 静态文件路线
        location /static {
            alias /path/to/your/mysite/static;
        }

        # 将动态央求转载到uwsgi跑的django程序
        location / {
            uwsgi_pass  django;
            include    /path/to/your/mysite/uwsgi_params; # 从github上下载的uwsgi_params 文件路线
        }
    }
    您也能够把那些构造文件放在项目路径中,然后创立二个链接到nginx配置文件夹:

    sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
    配备静态文件
    在布局服务器在此以前,需求先将Django的静态文件安排到静态文件夹中,首先,编辑django网址的settings.py文件

    STATIC_ROOT = os.path.join(BASE_DIR, "static/")
    然后,运转以下命令

    python manage.py collectstatic
    4 运行服务
    在起步nginx以前,大家供给先运行uWSGI,步入项目目录然后输入以下命令,在那处大家应用unix套接字格局:

    #注:django1.6 前的版本须求手动增多wsgi.py
    uwsgi --socket mysite.sock
    意气风发经nginx和uwsgi跑在同等台服务器上,使用unix套接字就能够了,unix套接字方式品质要高超级多,但无法跨机器访谈。当nginx和uWSGI不在生龙活虎台服务器上时,就需求利用TCP端口情势(别忘了修正nginx配置文件,打消相应注释):

    uwsgi --socket :8001 --module mysite.wsgi --chmod-socket=664
    接下去,运行nginx服务器,就足以访谈django站点了。

    5 使用ini配置文件跑uWSGI
    到此处,大家早已把nginx+uWSGI+Django跑起来了,但uWSGI的参数超多的时候,每趟都要输入特别劳累,这个时候,我们得以在django项目目录下创立二个mysite.uwsgi.ini

    [uwsgi]
    # 项目根目录路径(full path卡塔尔(قطر‎
    chdir          = /path/to/your/project
    # Django的 wsgi 文件
    module          = mysite.wsgi
    # virtualenv目录 (full path)
    home            = /path/to/virtualenv

    master          = true
    # 最大工作进度数(CPU密集型建议设为CPU核心数,IO密集型建议设为CPU大旨数的两倍)
    processes      = 16
    # unix套接字文件路线
    socket          = /path/to/your/project/mysite.sock
    # socket文件权限
    # chmod-socket    = 664
    # 退出时清空情状
    vacuum          = true
    然后,直接依照铺排文件运营uwsgi就可以:

    uwsgi --ini mysite.uwsgi.ini
    6 管理uwsgi
    Emperor模式
    uWSGI的Epreror形式能够用来治本机器上安插的uwsgi服务,在这里种形式下,会有三个出奇的进程(皇帝)对其余安插的劳务(诸侯)进行监视。我们将兼具配置文件(ini或xml文件,如上大器晚成节中的mysite.uwsgi.ini)统大器晚成置于一个文本夹(如:/etc/uwsgi/vassals)中,然后运行Emperor形式:

    uwsgi --emperor /etc/uwsgi/vassals
    与此相类似,就能够自行读取文件夹中的配置文件,并自动监控那几个uwsgi服务: - 质量评定文件夹中有新的结构文件时,会运转新的uwsgi服务实例 - 检测到叁个配置文件发出转移,会自动重启该服务 - 检验到二个配备文件被移除,则自动终止该服务 - 要是多少个劳动死了(诸侯),天子进程会重启该服务 - 借使监控进度(天子)死了,全部服务(诸侯)都会终止

    用systemd管理uwsgi服务
    合营Eperor格局,在centos、fedora、archlinux中,大家能够用systemd来保管uwsgi,首先,创造一个systemd service文件(/etc/systemd/system/emperor.uwsgi.service)

    [Unit]
    Description=uWSGI Emperor
    After=syslog.target

    [Service]
    ExecStart=/root/uwsgi/uwsgi --emperor /etc/uwsgi/vassals
    Restart=always
    KillSignal=SIGQUIT
    Type=notify
    StandardError=syslog
    NotifyAccess=all

    [Install]
    WantedBy=multi-user.target
    那样大家就足以用systemd来管理uwsgi服务了。运维服务:

    $ systemctl start emperor.uwsgi.service
    查询服务运维情况:

    $ systemctl status emperor.uwsgi.service
    截至服务

    systemctl stop emperor.uwsgi.service
    Linux系统中,还应该有生龙活虎种通用的章程,正是在init.d 或 rc.d 中参与运转脚本,这种格局远远不足智能,而且网络资料超多,在那暂不商量。

    7 常用参数和采用
    关于参数的现实应用,能够翻阅官方文书档案 ,在那处列出部分常用的参数:

    chdir 项目目录
    home virtualenv目录(如未有运转virtualenv设想情状,则无需安装)
    socket 套接字文件或TCP套接字,举例:site1.uwsgi.sock 或 127.0.0.1:8000
    uid 用户id
    gid 用户组id
    processes 专门的工作进程数
    harakiri 进度当先该时间未响应就重启该进程(暗许单位为秒)
    module 要开动的wsgi模块入口,如:mysite.wsgi:application
    ini 内定ini配置文件
    xml 钦赐xml配置文件(与ini相近)
    file 钦命要运营的wsgi程序文件,如:test.py
    emperor Emperor模式
    so-keepalive 开启TCP KEEPALIVE(unix套接字情势下无效)
    vacuum 退出时清空情况

    越来越多参照他事他说加以考察

    Nginx+uWSGI+Supervisor在Ubuntu上部署Flask应用  http://www.linuxidc.com/Linux/2016-07/133064.htm

    uWSGI+Django+Nginx的劳作原理流程与结构进度 http://www.linuxidc.com/Linux/2017-03/141785.htm

    迅猛安排Python应用:Nginx+uWSGI配置详细明白  http://www.linuxidc.com/Linux/2016-12/137830.htm

    Nginx+uWSGI+Django+Python 应用构造布署  http://www.linuxidc.com/Linux/2015-10/124183.htm

    Ubuntu Server 14.04.2 LTS 配置 Nginx + Uwsgi + Django  http://www.linuxidc.com/Linux/2015-04/116397.htm

    Flask+uWSGI+Nginx+Ubuntu布署教程 http://www.linuxidc.com/Linux/2016-06/132690.htm

    Ubuntu 16.04下安装配备 Nginx+uWSGI+Django1.9.7  http://www.linuxidc.com/Linux/2016-07/133484.htm

    Nginx+uWSGI+Django在Ubuntu下的布置  http://www.linuxidc.com/Linux/2016-07/133490.htm

    Linux 上利用Nginx代理uWSGI处理Flask Web应用  http://www.linuxidc.com/Linux/2016-08/134164.htm

    正文恒久更新链接地址:http://www.linuxidc.com/Linux/2017-03/141822.htm

    图片 4

    本文由澳门新葡8455最新网站发布于编程教学,转载请注明出处:Django安装和布置

    关键词:

上一篇:没有了

下一篇:澳门新葡萄京娱乐场民用变量和私家方法