• 部署django项目


    uWSGI + nginx django + virtualenv + supervisor发布web服务器

    项目部署步骤

    1.项目准备阶段

    1.准备项目代码,从本地拷贝
    
    2.将项目上传到linux服务器中,也就是拖进linux中...
    
    3.执行命令解压缩项目文件 

     2.解决项目运行的环境问题

    1.通过命令导出开发机器的所有模块,可以在windows下通过命令,导出模块文件
    
    pip3  freeze  > requirements.txt     #这是开发者约定俗成的文件名
    
    2.将这个文件上传linux上.进行安装
      pip3 install -i https://pypi.douban.com/simple -r requirements.txt 

    3.数据库操作

    1.准备需要使用的数据库db  #例如mysql    没有就下载
        yum install mariadb-server  mariadb  -y
    
    2.启动数据库
        systemctl   start maridb
    
    3.修改项目中settings.py中配置文件,修改mysql数据库驱动,还有ALL_HOSTS = [" * "],允许所有网段访问
    
    4.创建数据库和项目对应的库名

     4.virtualenv虚拟环境配置

    1.配置好python3虚拟环境
    2.进入虚拟环境安装uwsgi pip3 install uwsgi

     python3虚拟环境配置虚拟环境,参照 --->https://www.cnblogs.com/CrazySheldon1/p/10488249.html

    5.uwsgi准备和配置

    uwsgi.ini配置参考这个博友https://blog.51cto.com/wangfeng7399/2341281

    通过uwsgi启动django项目

    #1. 首先进入项目的第一层    cd   项目名
    
    #2.执行命令启动
        django     uwsgi --http :8000 --module 项目名.wsgi
    
       #也可以执行热加载命令: uwsgi --http :8000 --module 项目名.wsgi --py-autoreload=1     #--py-autoreload=1   就是检测到项目中修改代码后进行自动重启进行同步
    
    #3.使用nginx的话就需要通过配置文件启动uwsgi,在项目第一层创建一个uwsgi.ini的文件      touch  uwsgi.ini
    
    4.手动配置uwsgi.ini文件 
    [uwsgi]
    # Django-related settings # the base directory (full path) #这里写入项目的绝对路径 chdir= /opt/项目名 # Django's wsgi file #写入django的第二层文件夹,和wsgi.py文件 module = 项目名.wsgi # the virtualenv (full path) #虚拟环境的绝对路径 home= /root/Envs/虚拟环境名 # process-related settings # master master= true # maximum number of worker processes processes= 1 #如果你没用nginx,想直接访问django后台,可以使用http协议 #http = 0.0.0.0:8000 #如果你用了nginx进行反向代理,请使用socket协议,注释掉http协议 socket= 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket= 664 # clear environment on exit vacuum= true
     

    6.nginx配置结合uwsgi启动

    1.修改nginx配置文件.nginx.conf
        #如下nginx的反向代理
        location /{
            include  uwsgi_params;
            uwsgi_pass  0.0.0.0:8000;
        }
        
       #http://192.168.11.250/static/admin/css/base.css#当请求url,从 
        static路径开始时,我们就让他去找某一个文件夹解决静态文件的配置方式
        location /static{
            alias   /opt/自定义名称 #(存放static静态文件)
        }
    
    2.修改django的settings.py,收集静态资源
          STATIC_ROOT = '/opt/project_name_static' #在settings.py中添加(自定义名称)
        #同时保证以下两个配置存在
               STATIC_URL = '/static/'
                STATICFILES_DIRS = [
                os.path.join(BASE_DIR, 'static')
            ] 
    3.使用命令收集django的静态文件
        python3  manage.py collectstatic  #注意在manage.py同级目录执行 

    7.使用supervisor启动uwsgi

    #1.首先退出虚拟环境,安装supervisor, 注意python3不支持supervisor,因此要使用物理环境的python2进行安装,
        #yum - install python-setuptools
        #easy_install supervisor
    
    #2.安装完毕后,生成配置文件
    
        echo_supervisord_conf  > /etc/supervisord.conf
    
    #3.在配置文件中,添加任务,管理uwsgi
        vim /etc/supervisord.conf #在最底行,写入配置如下
    
        [program:自定义名称]
        command=/root/Envs/虚拟环境名称/bin/uwsgi   --ini          
        /opt/项目名称/uwsgi.ini
        stopasgroup=true      
        killasgroup=true  
    
    #4.启动supervisor服务
        supervisord -c  /etc/supervisord.conf 
    
    #5.通过命令进行管理uwsgi
        supervisorctl -c /etc/supervisord.conf
    
    #6.学习管理supervisor的命令
        start 任务名
        stop 任务名
        stop all 
        start all 
        status 任务名 

    此时项目部署完毕,如果没有差错,便可以通过ip正常跑起来了...

    项目细节部分

    不用nginx也能实现项目部署,通过uwsgi热加载也可以启动django项目,为什么要用nginx?

    • 安全问题:程序不能直接被浏览器访问,而是通过nginx,nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在nginx上加上安全性限制,可以达到保护程序的作用
    • 负载均衡问题:一个uwsgi 很可能不够用,即使开了多个work也不行,毕竟一台机器的cpu内存是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡
    • 静态问题:使用django或是uwsgi来负责静态文件是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个静态文件的处理都直接由nginx完成.

    ...

  • 相关阅读:
    谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family
    谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
    【Web动画】SVG 实现复杂线条动画
    【Web动画】SVG 线条动画入门
    引人瞩目的 CSS 变量(CSS Variable)
    谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器
    ROW_NUMBER() OVER函数的基本用法
    PL SQL笔记(三)
    pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新
    无聊的人用JS实现了一个简单的打地鼠游戏
  • 原文地址:https://www.cnblogs.com/CrazySheldon1/p/10489718.html
Copyright © 2020-2023  润新知