• Linux -- 项目部署


    一 . 负载均衡

      负载均衡其实就是把其中一个服务器用做反向代理, 然后通过访问这个服务器实现负载均衡.

    1.准备三台虚拟机
        192.168.81.130
        192.168.81.131
        192.168.81.132
    2.分别配置这三台机器
        通过修改nginx.conf文件来实现:
        130配置反向代理
        131,132分别返回页面
    3.配置关键点如下:
        130负载均衡配置修改nginx.conf:
        # 添加负载均衡地址池的参数
            #默认是轮询方式,两台服务器
        upstream s18django {           #  和server同一级别  upstream 是关键字
            server  192.168.81.131;
            server  192.168.81.132;
    }
        # 添加反向代理参数如下
          # 要写在server里面
        location / {
            proxy_pass  http://s18django        #  proxy_pass是关键字, 这个http后的参数就是upstream后面的参数
    }

      当访问192.168.81.130这个负载均衡器的时候,他会找upstream中的地址池的ip,然后轮询

      nginx负载均衡算法

    # 1.轮询方式,你一次我一次
    # 2.加权轮询(权重大的机会大)
    upstream s18django {
            server 192.168.226.128 weight=2;
            server 192.168.226.130 weight=8;
    }
    # 3.ip_hash方式,对你访问的ip进行hash,不能与加权公用
    upstream s18django {
            server 192.168.226.128;
            server 192.168.226.130;
        ip_hash;
    }

    二 . crm项目部署

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

        2.关闭防火墙

    # 一定要关闭防火墙,不然在你进行访问的时候,会连接不上
    iptables -F  #清空规则
    systemctl stop firewalld  #关闭防火墙服务
    systemctl disable firewalld  #禁止开机自启

        3.django的启动方式为什么 python3  manage.py  runserver 为什么不能在生产环境中用?

    django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端
    是借助python内置的wsgi框架 wsgiref框架实现的
    它是一个单机模块,单进程模块,性能很低
    # 因此在线上需要借助通过C语言编写的uwsgi这个web服务器软件,启动django
    
    python框架按照性能从高到底排序
       1.sanic
       2.tornado
       3.flask
       4.django

      4.在进行uwsgi启动django的时候,是需要找到wsgi.py这个文件模块的

    如果你报错提示 找不到application ,就是因为uwsgi  找不到wsgi.py 
    解决: 要进入自己的项目(cd /opt/crm)  # 然后在执行uwsgi --http :8088 --module Crm_Project.wsgi

      5.为什么要用nginx 和 uwsgi?

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

      6.准备crm代码

      7.准备一个新的虚拟环境,去启动crm, 使用virtualenvwrapper创建新的虚拟环境(mkdir  nginx_crm)

      

    1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题,
    在windows本地 通过
    pip3  freeze > requirements.txt
    # 这样就将python3解释器中所有模块导出到这个文件中
    
    2.创建虚拟环境 mkvirtualenv  nginx_crm
    
    3.将这个 requirements.txt  文件传输到服务器上,进行安装,就可以自动解决所有模块问题
    pip3 install  -r  requirements.txt

      8.安装uwsgi

    # 一定要确保进入虚拟环境(nginx_crm)
    workon  nginx_crm
    # 下载uwsgi
    pip3  install  uwsgi

      9.使用uwsgi命令启动django项目

    # 自己测试用
    uwsgi支持热加载的启动方式命令如下
    uwsgi --http :8000 --module  Crm_Project.wsgi --py-autoreload=1 
    
    uwsgi --http :8088 --module Crm_Project.wsgi    # 这个Crm_Project在第二层
        --http指定http协议启动在 8088端口
        --module 找到项目第二层的目录,里面的wsgi.py文件
    # 测试就用--http参数

    三 . 正式启动环境

    # 如果结合了nginx反向代理就需要用的--socket, 为了一劳永逸, 把他写到项目下uwsgi.ini文件中去
    1. cd 到项目下  cd  /opt/Crm_Project
    2.创建uwsgi.ini
    3.把下述数据写到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参数
    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数据

      启动代码

    uwsgi --ini  uwsgi.ini

    四 . 配置crm收集所有crm的静态文件

    1. 在/opt下创建crmstatic文件夹
    2.编辑项目中的settings.py ,写入如下参数
    STATIC_ROOT= '/opt/crmstatic'
    3.收集crm所有的静态文件
    python3 manage.py collectstatic

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

      修改nginx.conf

    #当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
    location / {
            uwsgi_pass  0.0.0.0:8000;    # 这个8000端口是因为uwsgi.ini里面写的是8000
            include uwsgi_params;
    }
    
            #这个location是解决crm的静态文件的问题的
    location /static  {
    #alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
            alias /opt/crmstatic;
    }

    六 . 重启

      !!! 操作完事后一定要重启 (nginx -s  reload)

    七 . 配置supervisor工具

      !!! 注意要退出虚拟环境

    # 这个工具只能用python2下载
    1.安装easy_install
        # pip3是python3的软件包
        # easy_install是python2的软件包
    yum  install  python-setuptools
    2.安装supervisor
    easy_install  supervisor
    3.创建supervirsor的配置文件
    echo_supervisord_conf >  /etc/supervisor.conf 
    4.修改/etc/supervisor.conf的配置文件,添加启动uwsgi的命令
      # supervisor其实就是帮咱们执行了,需要手动执行的命令而已
    vim /etc/supervisor.conf
    # 写入如下内容,在最底部写  # command两边必须是绝对路径
    [program:s18crm]  
    command=/root/Envs/nginx_crm/bin/uwsgi  --ini /opt/Crm_Project/uwsgi.ini
    stopasgroup=true
    killasgroup=true

      !!! 测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出

    supervisord -c  /etc/supervisor.conf   #这是启动supervisor服务端命令
    supervisorctl -c /etc/supervisor.conf     #这是supervisor客户端管理命令

      supervisor的命令

    # 下面这些命令需要在执行supervisorctl -c /etc/supervisor.conf 后执行
    status s18crm #查看状态    status后面的参数就是写入到supervisor.conf中program后的参数
    start s18crm  #启动任务
    stop  s18crm #停止任务
        
    start all  
    stop  all  #启停所有的任务

      

      

  • 相关阅读:
    计算机程序的构造和解释 1.21 寻找素数因子
    迭代法对数计算B的N次方 SICP 计算机程序的构造和解释 1.16
    斐波那契算法的对数解法 计算机程序的构造和解释 习题1.19
    MS SQL SERVER数据库简单回顾
    SICP~计算机程序的构造和解释~ 1.12 c++实现
    论5级流水32bit risc cpu设计
    mdk编译器起到的boot作用详解
    处理器boot的简单概念及误区
    搬砖两年感受
    操作系统方面的两本好书
  • 原文地址:https://www.cnblogs.com/attila/p/10645752.html
Copyright © 2020-2023  润新知