zoukankan      html  css  js  c++  java
  • nginx + uwsgi 部署django项目

    因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式

    环境:

    centos7

    python3.5.4

    django2.1.4

    uwsgi2.0.18

    nginx1.1.10

    具体步骤及注意事项:

    1、在centos中兼容安装py3.5.4

    首先安装依赖包

    yum -y groupinstall "Development tools"
    yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

    建立一个空文件夹,然后根据自己需求下载不同版本的Python3,我下载的是Python3.5.4

    mkdir /usr/local/python3

    wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

    如果速度不够快,可以直接去官网下载,利用WinSCP等软件传到服务器上指定位置,我的存放目录是/usr/local/python3,使用命令:

    然后解压压缩包,进入该目录,安装Python3

    tar -xvJf  Python-3.6.2.tar.xz
    cd Python-3.6.2
    ./configure --prefix=/usr/local/python3
    make && make install

    最后创建软链接

    ln -s /usr/local/python3/bin/python3 /usr/bin/python3
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

    在命令行中输入python3测试

    2、在centos中安装py3的虚拟环境

    pip install virtualenv

    3、在虚拟环境下还原系统第三方包(利用requirement.txt)

    pip install –r requirement.txt

    4、在虚拟关键下安装uwsgi(也可以在第3节统一安装)

    pip install uwsgi

    测试uwsgi:

    创建脚本test.py

    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"]

    此代码为py3版本测试代码

    进入到该文件目录:

    uwsgi --http :8001 --wsgi-file test.py

    打开浏览器访问:127.0.0.1:8001 返回指定字符串即通过测试

    注意,如果是用虚拟机别忘了开端口号

    5、安装及配置nginx

    (1)安装make、安装g++:

    yum -y install gcc automake autoconf libtool make
    yum install gcc gcc-c++

    (2)选定安装文件目录

    cd /usr/local/src

    (3)安装PCRE库

    wget    ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz 
    tar -zxvf pcre-8.37.tar.gz
    cd pcre-8.34
    ./configure
    make && make install

    (4)安装zlib库

    # 进入目录中
    cd /usr/local/src
    # 下载安装文件
    wget http://zlib.net/zlib-1.2.11.tar.gz
    # 解压文件
    tar -zxvf zlib-1.2.11.tar.gz
    cd zlib-1.2.11
    ./configure
    Make && make install

    (5)安装openssl(某些vps默认没装ssl)

    cd /usr/local/src
    wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
    tar -zxvf openssl-1.0.1t.tar.gz

    (6)安装nginx

    cd /usr/local/src
    wget http://nginx.org/download/nginx-1.1.10.tar.gz
    tar -zxvf nginx-1.1.10.tar.gz
    cd nginx-1.1.10
    ./configure
    Make && make install

    注:这里可能会出现报错

     

    yum -y install openssl openssl-devel

    (7)配置nginx (niginx目录下的nginx.conf)

    几个注意点:

    server {
            listen       8089;  # nginx对外暴露的端口
            server_name  127.0.0.1;  # 暴露外部ip,也可以用访问域名代替ip: www.xxx.com
         #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {  #uwsgi配置
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8000;  # 与uwsgi配置相对应
                uwsgi_read_timeout 2;
            }
        
        location /static {
            alias /usr/local/py3workspace/pro/dboxStandard/staticfile/;  # nginx 访问django系统的静态文件地址
            break;
        }

    (8)启动nginx

    到nginx的安装目录的/sbin中:   ./nginx

    (9)重启

    在nginx安装目录的sbin/中 nginx –s reload 可以重启nginx

    也可以:

    查询uwsgi和nginx端口对应的进程号杀掉

    netstat –nap |grep 80

    Kill -9 进程号

    再重启uwsi和nginxs

    6、注意事项

    (1)项目根目录须有requestment.txt用来还原python虚拟环境的第三方包

    生成requirement.txt: 

    pip freeze > requirement.txt

    还原第三方库:  

    pip install –r requirement.txt

    (2)项目根目录建立uwsgi.ini 配置文件

    # uwsgi.ini
    [uwsgi]
    
    # When using nginx connection
    socket = 127.0.0.1:8000
    # When doing web server directly
    # http=127.0.0.1:8000
    
    # the base directory (full path)
    chdir = /usr/local/py3workspace/pro/dboxStandard
    
    # Django s wsgi file
    module = dboxStandard.wsgi
    
    # existence master
    master = true
    
    # clear environment on exit
    vacuum = true
    
    # Save the file that started the main process PID
    pidfile = /usr/local/py3workspace/pro/dboxStandard/uwsgi.pid
    
    # As daemon output, save log information to uwsgi.log. log and run in the background
    daemonize = /usr/local/py3workspace/pro/dboxStandard/uwsgi.log
    
    # maximum number of worker processes
    processes = 4
    
    # Specify a virtual environment
    virtualenv = /usr/localpy3workspace/env/dbox_matching_env

    socket:   uwsgi对外地址(nginx配置文件需要与之对应)

    chdir:     Django 项目根目录

    master:  是否存在主进程

    vacuum: 退出时清空

    module: 项目名称.wsgi; 

    daemonize:  是uwsgi日志所在

    processes:    最大进程数目

    virtualen:      python虚拟环境目录

    (3)Django系统的setting.Py 配置文件中末尾需要添加:

    STATIC_ROOT = os.path.join(BASE_DIR, "staticfile") 配合6.7节访使得nginx能够找到django的静态文件(否则没有前台样式渲染)

    Staticfile是项目静态文件存放真实目录

    (4)Django系统中不同app或包之间的相互调用在windows中需要在虚拟环境中添加.pth目录文件,Linux系统部署同样需要,存在目录

    (5)访问系统时可能会因为防火墙限制访问,需要开放端口

    (6)亲测一个小坑,如果不用nginx 直接用uwsgi 挂载dajngo,本地地址不要写成http=127.0.0.1:8000 要用http=0.0.0.0:8000, 访问可以是127.0.0.1

    如果,配合nginx 则要写成socket=127.0.0.1:8000

    7、访问django系统

    nginx配置的对外地址:ip/域名:端口/系统路径

    如:127.0.0.1:8089/index

    附上目录结构

    以上就是我在部署django系统过程的全部过程,其中涉及的数据库和消息队列等没有提及,其中会涉及django配合数据库安装版本

    如果是用到celery 在启动系统前,需要先启动它

    celery -A Celery_pro worker -l info -P eventlet

    看见一个还不错的留着备用:https://blog.csdn.net/pysense/article/details/100063015

  • 相关阅读:
    经典测试工程师面试题(一)
    python面试题2
    python面试题1
    软件测试面试题2
    软件测试面试题1
    python读写csv文件
    死亡还是合并?和李开复聊聊走投无路创业公司(转)
    项目如何开始:怎样和客户谈需求(转)
    [转载]给IT人员支招:如何跟业务部门谈需求分析?
    VS2013的一些常用快捷键
  • 原文地址:https://www.cnblogs.com/fclbky/p/11235923.html
Copyright © 2011-2022 走看看