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




原文地址:https://www.cnblogs.com/xuanan/p/7760973.html