• linux项目部署(非前后端分离crm)


    参考博客

    参考博客2---部署过程

    导论:看参考博客1

    WSGI是Web服务器网关接口。它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)

    一.crm项目部署(非前后端分离项目)

    1.项目部署技术栈

    nginx + uwsgi + django + 虚拟环境 + supervisor  + mysql

    2.面试题1

    django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?
    
    django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端
    是借助python内置的wsgi框架 wsgiref框架实现的
    wsgi是一个单机模块,单进程模块,性能很低,用wsgi来启动一个多线程、多进程的项目是不合适的
    
    因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动django
    uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件

    3.面试题2

    为什么要用nginx  和uwsgi?
    nginx  可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保障后台服务器安全等等
    
    为什么要用uwsgi
    因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件
    
    我们以后会收集所有的django项目静态文件,丢给nginx去处理

    4.准备crm代码

    5.进入第一层路径,查看wsgi.py文件

    vim wsgi.py
    
    从这个文件可以看出是调用django的wsgi,获取函数get_wsgi_application
    然后通过调用这个函数生成一个application对象
    
    在进行uwsgi启动django的时候,是需要找到wsgi.py这个文件模块的
    如果你报错提示 找不到application ,就是因为uwsgi  找不到wsgi.py 

    6.创建虚拟环境

    准备一个新的虚拟环境,去启动crm,使用virtualenvwrapper创建新的虚拟环境
       virtualenvwrapper工具的命令
            1.创建新的虚拟环境
            mkvirtualenv mycrm
            
            2.切换多个虚拟环境
            workon 虚拟环境的名字
            
            3.列出所有的虚拟环境目录
            lsvirtualenv 
            
            4.进入当前激活的虚拟环境的目录
            cdvirtualenv
    View Code
    1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题
        在windows本地 通过cmd窗口输入
    
        pip3 freeze > requirements.txt
    
        #就能将python3解释器中所有的模块导出到requirements.txt这个文件中 
        
    
        2.将这个 requirements.txt  文件传输到服务器上,虚拟环境下进行安装,就可以自动解决所有模块问题
        pip3 install -r requirements.txt  

    7.虚拟环境下安装uwsgi

    确保进入虚拟环境,然后安装uwsgi
    workon nginx_crm
    
    下载uwsgi
    pip3 install uwsgi 

    8.使用uwsgi命令启动django项目以及热加载

    uwsgi支持热加载的启动方式命令如下
    uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1 
    
    uwsgi启动django项目的命令如下:
    uwsgi --http :8088 --module Crm_Project.wsgi 
        --http指定http协议启动在 8088端口
        --module 找到项目第二层的目录,里面的wsgi.py文件
    
    如果你想启动一个http页面,提供测试访问,就用--http参数
    
    如果你结合了nginx反向代理,必须用--socket参数 
    uwsgi --socket :8000 --module Crm_Project.wsgi

    9.uwsgi.ini配置文件的引入

    由于参数过多,这里引入配置文件的概念 叫做 uwsgi.ini     这个文件放在项目的第一层路径下
    
    启动crm的配置文件如下 uwsgi.ini内容如下
    [uwsgi]
    # Django-related settings
    # the base directory (full path)
    #填写项目的绝对路径(第一层路径)
    chdir           = /opt/Crm_Project
    # Django's wsgi file
    #填写crm第二层目录下的wsgi.py文件的路径
    module          = Crm_Project.wsgi
    # the virtualenv (full path)
    #填写虚拟环境的绝对路径
    home            = /root/Envs/nginx_crm
    
    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    #基于uwsgi的多进程,根据cpu来优化 
    processes       = 4
    # the socket (use the full path to be safe
    
    #如果你用了nginx反向代理,就填写socket参数
    #如果你用了nginx反向代理,就填写socket参数
    #如果你用了nginx反向代理,就填写socket参数
    #如果你用了nginx反向代理,就填写socket参数
    #如果你用了nginx反向代理,就填写socket参数
    socket          = 0.0.0.0:8000
    
    #如果你没用nginx,想直接通过浏览器测试后端,使用http 
    #http = 0.0.0.0:8000
    
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    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
    uwsgi.ini

    10.此时通过uwsgi --ini  uwsgi.ini方式启动代码

    11.django的静态文件与nginx配置

    虚拟环境下
    编辑项目的settings.py 写入如下参数
    STATIC_ROOT= '/opt/crmstatic'

    12.执行命令,收集crm所有的静态文件

    命令如下
    python3 manage.py collectstatic

    #此时后端的配置完毕!!!!开始搞nginx
    #此时后端的配置完毕!!!!开始搞nginx
    #此时后端的配置完毕!!!!开始搞nginx
    #此时后端的配置完毕!!!!开始搞nginx
    #此时后端的配置完毕!!!!开始搞nginx

    13.配置nginx,一是支持反向代理,二是支持静态文件加载

    配置nginx,一是支持反向代理,二是支持静态文件加载
    修改nginx.conf 
    
    代码如下
            #当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
            location / {
              uwsgi_pass  0.0.0.0:8000;  #8000为django运行的端口
              include uwsgi_params;  #固定写法
            }
    
            #这个location是解决crm的静态文件的问题的
    location /static  {
        #alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
        alias   /opt/crmstatic;  #这里的crmstatic就是STATIC_ROOT= '/opt/crmstatic'这个
    }

    14.重启nginx,由于有热加载,项目已经启动

    15.批量管理软件的启停supervisor

    supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,
    而且一旦程序错误导致进程退出的话,系统也无法自动重载任务。

    16.安装supervisor

    在非虚拟环境下安装supervisor
    
    supervisor只能用python2来安装,不能用python3来安装
    1.安装easy_install pip3是python3的软件包管理工具 easy_install 是python2的软件包管理工具 yum install python-setuptools 2.安装supervisor easy_install supervisor

    17.supervisor的配置文件

    1.创建supervisor的配置文件,在项目第一层路径下面输入下面代码
        
        echo_supervisord_conf >  /etc/supervisor.conf 
    
    2.修改supervisor的配置文件,添加启动uwsgi的命令
        
        supervisor其实就是帮咱们执行了,需要手动执行的命令而已 
        vim /etc/supervisor.conf
        写入如下内容,在最底部写
    [program:s18crm]
    command=/root/Envs/nginx_crm/bin/uwsgi  --ini /opt/Crm_Project/uwsgi.ini
    stopasgroup=true
    killasgroup=true

    18.测试用supervisor启动uwsgi 

    测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
    .测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
    .测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
    .测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
    
    
    虚拟环境下,输入下面两条命令    
    supervisord -c  /etc/supervisor.conf   #这是启动supervisor服务端命令
    
    supervisorctl -c /etc/supervisor.conf     #这是supervisor客户端管理命令
    
    
    学习supervisor的命令
        
        status s18crm #查看状态  #s18crm来自[program:s18crm]
        start s18crm  #启动任务
        stop  s18crm #停止任务
        
        start all  
        stop  all  #启停所有的任务
    1.crm部署 nginx + uwsgi + django + mysql 
    
    crm是一个单体的应用,前端代码和后端代码,融合在了一起
    
    linux默认终端有7个 
    按住ctrl + alt 从 f1-f7是7个终端   f1是图形化终端,f2-f7是黑屏
    我们用的是xshell远程连接,连接到linux,可以有N个终端
    
    1.先去启动后端,uwsgi + django 
    2.先准备项目  xftp  lrzsz  
    3.先准备虚拟环境
    4.安装uwsgi 
    5.用uwsgi启动crm项目
        -一是命令 +  参数   (不建议使用,请用配置文件 uwsgi.ini)
            uwsgi --http  :8000 --module  crm.wsgi  
            解释:--http  就是直接可以通过浏览器访问,不通过nginx
            uwsgi --socket :8000 --module crm.wsgi 
            解释:  --socket 是必须用nginx去反向代理,才能找到,浏览器直接访问找不到
    
        正确的方式:
            二,用配置文件uwsgi.ini 
                    [uwsgi]
                    # Django-related settings
                    # the base directory (full path)
                    #填写项目的绝对路径(第一层路径)
                    chdir           = /opt/Crm_Project
                    # Django's wsgi file
                    #填写crm第二层目录下的wsgi.py文件的路径
                    module          = Crm_Project.wsgi
                    # the virtualenv (full path)
                    #填写虚拟环境的绝对路径
                    home            = /root/Envs/nginx_crm
    
                    # process-related settings
                    # master
                    master          = true
                    # maximum number of worker processes
                    #基于uwsgi的多进程,根据cpu来优化 
                    processes       = 4
                    # the socket (use the full path to be safe
    
                    #如果你用了nginx反向代理,就填写socket参数
                    #如果你用了nginx反向代理,就填写socket参数
                    #如果你用了nginx反向代理,就填写socket参数
                    #如果你用了nginx反向代理,就填写socket参数
                    #如果你用了nginx反向代理,就填写socket参数
                    socket          = 0.0.0.0:8000
    
                    #如果你没用nginx,想直接通过浏览器测试后端,使用http 
                    #http = 0.0.0.0:8000
    
                    # ... with appropriate permissions - may be needed
                    # chmod-socket    = 664
                    # clear environment on exit
                    vacuum          = true
                    
            三,通过配置文件,启动crm,启动后端!!!!找到项目里的uwsgi.ini后再输入命令
            uwsgi --ini uwsgi.ini 
            
            四。关闭防火强
            iptables -F  #清空规则
            systemctl stop firewalld  #关闭防火墙服务
            systemctl disable firewalld  #禁止开机自启
     
            五,收集crm的静态文件
            修改settings.py 写入
            STATIC_ROOT= '/opt/crmstatic'
    
            六:用命令收集静态文件,在虚拟环境中做这个操作
            python3 manage.py collectstatic
    
    2.准备数据库,启动
    #保证mariadb已经安装了  
    yum install mariadb-server mariadb -y 
    
    systemctl start mariadb   #启动数据库
    
    
    
    3.准备nginx,进行反向代理
        1.安装nginx 
        2.修改nginx的配置文件  nginx.conf 
        3.修改代码如下,截取的片段代码如下,参照着修改
        
    upstream  mycrm {
        server  0.0.0.0:8000;
    }
        #nginx的虚拟主机参数
        server {
            #第一个虚拟主机,监听的80端口
            listen       80;
            #填写的是你自定义的域名 或者服务器的ip地址,或者写locathost
            server_name  192.168.226.128;
    
            #当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
            location / {
            uwsgi_pass  http://mycrm;
            include uwsgi_params;
            }
    
            #这个location是解决crm的静态文件的问题的
            #只要请求url是192.168.226.128/static/admin/admin.css
    location /static  {
    #alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
    alias /opt/crmstatic;
    }
    
    
    4.还差一个supervisor 
        1.下载安装
        2.修改supervisor的配置文件
        写入任务
        3.这里有个坑,坑是必须关闭nginx才能开启supervisor
        
        我们用supervisor,其实就是帮咱们执行了一下启动uwsgi的命令而已
        
        4.注意后台不能启动过uwsgi
    crm项目部署总结
  • 相关阅读:
    easyui tree 搜索
    easyui combotree不让父级选中
    jquery设置按钮disabled
    JavaScript中清空数组的三种方式
    JavaScript 与 PHP 的语法区别
    URL参数转换对象
    easyui form validate总是返回false原因
    jquery文字填写自动高度
    SQL Server 附加数据库提示5120错误
    jQuery – 鼠标经过(hover)事件的延时处理
  • 原文地址:https://www.cnblogs.com/l1222514/p/11415997.html
Copyright © 2020-2023  润新知