• uwsgi+nginx项目上线


    一、基础环境配置
       1、Linux安装配置
           1、设置IP地址

    [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
                    DEVICE=eth0            # 网卡名
                    BOOTPROTO=static       # 静态指定IP地址,也可以动态,但是建议是静态。
                    ONBOOT=yes             # 是否是开机启动
                    TYPE=Ethernet          # 类型(默认即可)
                    IPADDR=192.168.31.123  # IP地址
                    NETMASK=255.255.255.0  # 掩码
                    GATEWAY=192.168.31.1   # 网关


             2、 ssh DNS解析 (为了安全-判断IP是否有效IP) 

          # /etc/ssh/sshd_config  # UseDNS no
             3、 iptables 防火墙关闭

         /etc/init.d/iptables stop  # 关闭iptables
                [root@localhost ~]# chkconfig iptables off  # 关闭机起动级别(开机不启动)
                [root@localhost ~]# chkconfig --list iptables
                iptables           0:off    1:off    2:off    3:off    4:off    5:off    6:off
    

            4、selinux 安全模块-用不到关闭
                      # vim /etc/selinux/config    # SELINUX=disabled
               5、设置dns

      [root@localhost ~]# cat /etc/resolv.conf
                    nameserver 192.168.31.1      # nameserver  Dns地址和真机保持一致即可
    

           6、注意事项:
               #/etc/udev/rules.d/70-persistent-net.rules  ( 6.2版本和ubuntu 会有这个文件,这个文件是记录网口和 MAC地址关系的)
      2、Linux 下Python安装[用是升级不影响现有Python/多版本共存]
           1、下载Python

          略
           2、安装Python依赖包
                  yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
                3、解压和安装软件包
                  tar -xzvf /opt/Python-3.6.1.tgz -C /usr/local/src/  # src目录是存放源码的目录解压到src目录( .tar.xz 文件解压:xz -d   ***.tar.xz   然后 tar -xvf  ***.tar    或者tar xvJf  ***.tar.xz直接解压
                  cd /usr/local/src/Python-3.6.1
                  ./configure --prefix=/usr/local/python3
                  make && make install
                4、 添加环境变量
                  vim /etc/profile
                  export PATH="$PATH:/usr/local/python3/bin"
                  source ../profile  # 重载文件
                  echo $PATH  # 查看当前环境变量是否添加
      3、代码上传 xshell / Git 简单的Git命令
            yum -y install git
            git clone 你的git url

    二、uwsgi+nginx部署

      1、上传项目至目标服务器并安装项目所需的模块,保证项目能正常通过runserver启动并且检查没有问题。
        python3 manage.py runserver 172.18.9.66:80

        注释:如果启动出现错误那么很有可能是数据库没有初始化,所以python3 manage.py migrate初始化下数据库即可
      2、安装uwsgi 并使用uWSGI启动这个服务(执行这条命令的时候:一定要在这个项目目录中~ )
        uwsgi --http 192.168.31.123:80 --file teacher/wsgi.py --static-map=/static=static

        


      3、使用配置文件启动uWSGI[ini]
     

       [uwsgi]
        socket=8080
        # 项目目录
        chdir=/opt/project_teacher/teacher/
        # 启动uwsgi的用户名和用户组
        uid=root
        gid=root
        # 指定项目的application
        module=teacher.wsgi:application
        # 指定sock的文件路径
        socket=/opt/project_teacher/script/uwsgi.sock
        # 启用主进程
        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.ini
        ps -ef |grep -i uwsgi
       关闭:uwsgi --stop uwsgi.pid
         只要启动uwsgi,就会自动生成uwsgi.ini和uwsgi.pid两个文件
       这个脚本的目的并不能使我们访问django服务,而是使nginx监控该配置文件端口,然后把客户端访问的请求转发到该端口的django上。


      4、设置Nginx的yum源

    vim /etc/yum.repos.d/nginx.repo
        [nginx]
        name=nginx repo
        # 下面这行centos根据你自己的操作系统修改比如:OS/rehel
        # 6是你Linux系统的版本,可以通过URL查看路径是否正确
        baseurl=http://nginx.org/packages/centos/6/$basearch/
        gpgcheck=0
        enabled=1
    

      5、安装nginx

    yum -y install nginx
    # 添加配置文件
    vim teacher.conf # 这个名字随便起,最好是和项目一个名字
    server {
                    listen 80;   #django服务端口,端口转发
                    server_name 127.0.0.1 ;
                    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;
                    }
    
    }
    

      6、添加默认静态文件目录

    vim ../teacher/teacher/settings.py
    STATIC_ROOT = os.path.join(BASE_DIR, "static_all")
    
    python3 manage.py collectstatic --noinput
    

      7、Nginx配置静态文件简单修改

        将nginx中的配置文件中的static改为static_all

      8、添加管理脚本

    cd /etc/init.d/
    vim manage_teacher
        #! /bin/sh
        # chkconfig: 345 85 15
        # 上面一行注释:哪些Linux级别需要启动manage_teacher(3,4,5);启动序号(85);关闭序号(15)。
        # description: manage script is the teacher daemon.
        # Author: luotianshuai
        # 指定项目目录
        PROJECT_DIR="/opt/project_teacher/teacher"
        # 指定脚本目录在哪里
        SCRIPTS_DIR="/opt/project_teacher/script"
        # 描述
        DESC="teacher daemon"
        # 名称
        NAME="teacher"
        # 脚本名称
        SCRIPT_FILENAME="manage_teacher.sh"
        # 脚本目录名称
        SCRIPTNAME=`pwd`/$SCRIPT_FILENAME
    
        # PID
        PID="uwsgi.pid"
    
        # 启动函数
        d_start(){
        # 进入到项目目录
        cd $SCRIPTS_DIR
        # 判断这个PID是否存在
        if [ ! -f $PID ];then
        echo -e "
    33[34m$NAME项目启动中........33[0m"
        # 如果不存在执行
        uwsgi --ini uwsgi.ini
        killall nginx
        /etc/init.d/nginx start
        # 自动收集静态文件
        cd $PROJECT_DIR && python3 manage.py collectstatic --noinput
        echo -e "
    33[32m$NAME 项目启动完成........33[0m"
        exit 0
        fi
        echo -e "
    33[33m$NAME 项目已启动请勿重复启动33[0m"
        }
        # 关闭函数
        # 关闭项目
        d_stop(){
        # 进入脚本目录
        cd $SCRIPTS_DIR
        # 判断这个pid文件是否存在
        if [ ! -f "uwsgi.pid" ];then
        # 这个项目已经关闭了
        echo -e "
    33[33m$NAME 项目已经关闭了请先启动33[0m"
        fi
        echo -e "
    33[34m$NAME 项目关闭中........33[0m"
        echo -e "
    Stop $DESC: $NAME"
        # 如果没有关闭
        uwsgi --stop uwsgi.pid
        # 是否停掉Nginx根据实际需要来操作~~!因为Nginx有对静态文件缓存[注意]
        killall nginx
        /etc/init.d/nginx start
        echo -e "
    33[32m$NAME 项目关闭完成........33[0m"
        }
    
        d_restart(){
        d_stop
        sleep 1
        d_start
        }
    
        case "$1" in
        start)
        echo -e "
    starting $DESC: $NAME"
        d_start
        ;;
        stop)
        echo -e "
    Stop $DESC: $NAME"
        d_stop
        ;;
        restart)
        echo -e "
    Restart $DESC: $NAME"
        d_restart
        ;;
        *)
        echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
        exit 3
        ;;
        esac
    

       9、设置开机自启动

    # 添加服务
    chkconfig --add manage_teacher
    # 开机启动
    [root@localhost init.d]# chkconfig manage_teacher on
    # 查看启动级别
    [root@localhost init.d]# chkconfig --list manage_teacher
    manage_teacher     0:off    1:off    2:on    3:on    4:on    5:on    6:off
    
    # 然后就可以通过命令
    [root@localhost ~]# service manage_teacher start
    [root@localhost ~]# service manage_teacher stop
    [root@localhost ~]# service manage_teacher restart
    




  • 相关阅读:
    机器学习框架之sklearn简介
    ubuntu 16.04下使用 python pip的安装问题。
    ubuntu 16.04 搭建git小型服务器
    使用config 来管理ssh的会话
    【linux】su、sudo、sudo su、sudo -i的用法和区别
    【python】确保文件写入结束
    【python】描述符descriptor
    【python】类(资料+疑惑)
    【pymongo】mongodb cursor id not valid error
    【python】继承关系和isinstance
  • 原文地址:https://www.cnblogs.com/xuanan/p/7760973.html
Copyright © 2020-2023  润新知