zoukankan      html  css  js  c++  java
  • CentOS6.8部署Python3.6.8的Django项目

    软件版本说明

    操作系统:CentOS 6.8 x64

    Python:3.6.8安装目录在/usr/local/python3

    pip:18.1

    virtualenv:16.4.0(当前适合该系统的最新版本,当前2019.02.20)

    我们用来存放我们编写的项目代码的目录:/site/project

    我们用来存放虚拟环境的目录:/site/venv

    准备基础环境

    yum -y install gcc gcc-c++ openssl-devel zlib-devel pcre pcre-devel ncurses-devel
    

    安装nginx、mysql

    安装python3.x

    # 下载Python3.6的源码包
    wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
    # 解压并进入源码目录
    tar zxvf Python-3.6.8.tgz
    cd Python-3.6.8
    # 编译安装
    ./configure --prefix=/usr/local/python3
    make && make install
    

    安装完后的python3的根目录在/usr/local/python3下,我们可以通过使用软连接的形式让python3和pip3命令直接使用

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

    检验Python的版本:

    python -V
    python3 -V
    

    虚拟环境

    virtualenv

    该模块可以用来建立一个独立的虚拟python环境(创建隔离的Python环境)。

    使用pip3安装,默认会安装到当前使用的python的模块目录中。(也可以直接用pip安装,但是Centos6默认环境不带pip,需要自行安装pip):

    # 这里临时使用了豆瓣的镜像源
    pip3 install virtualenv -i https://pypi.douban.com/simple/
    

    创建软连接(如果使用pip安装的可以不用这一步)

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

    查看virtualenv版本

    virtualenv --version
    

    指定python解释器创建项目虚拟环境,我们这里使用刚刚安装的python3,假如我们要创建的虚拟环境叫ss

    # 执行完会在当前目录创建一个ss的目录
    cd /site/venv
    virtualenv -p /usr/bin/python3 ss
    

    执行完上面的命令,将会在当前的目录中创建一个名ss的文件夹,这是一个独立的python运行环境,包含了Python可执行文件, 以及 pip库的一份拷贝,同时已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境了。

    激活(进入)ss虚拟环境

    source ss/bin/activate
    

    退出当前虚拟环境

    deactivate
    

    退出虚拟环境后,使用的python相关的命令都是系统默认的命令。退出deactivate前执行的进程,在退出后会继续执行。

    上传源码

    我们这里的Django项目叫:ky

    其实我们只需要上传:项目的配置目录以及各应用的目录即可,数据库建议从测试环境导入到线上环境(当然使用数据迁移也可以)

    我们这里为了简单,就全目录上传了

    上传步骤:(略)

    上传后的项目根目录为:/site/project/ky

    上传后需要将项目的配置文件这几个地方修改一下:

    DEBUG = False
     
    ALLOWED_HOSTS = ['*']
    

    导出本地依赖模块信息并在服务端安装

    # 查看测试环境安装的模块信息
    pip3 freeze > requirements.txt
    
    # 线上环境:从文件中读取要安装的模块并执行安装
    pip3 install -r requirements.txt
    

    安装配置uwsgi,并配置nginx

    安装uwsgi(这里只在当前Python中安装了,也可以全局安装)

    pip3 install uwsgi
    

    测试uwsgi

    定义测试文件test.py,编写内容:

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

    使用uwsgi运行测试文件,执行如下命令:

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

    尝试您的url能否正常访问:

    # example.com换成您的域名或者服务器ip
    http://example.com:8000
    

    配置nginx虚拟机

    打开配置文件

    vim /usr/local/nginx/conf/nginx.conf
    

    配置虚拟机

        server {
            listen       80;
            server_name  localhost;
            
            location / {
                include  uwsgi_params;
                uwsgi_pass 127.0.0.1:8000;
            }
        }
    

    然后重启nginx:/usr/local/nginx/sbin/nginx -s reload

    配置uwsgi

    在项目的根目录(/site/project/ky)创建配置文件:uwsgi.ini,然后在里面添加如下内容:

    [uwsgi]
    #项目的根目录
    chdir = /site/project/ky
    #项目的对接wsgi.pi文件
    #module = ky.wsgi
    module = ky.wsgi:application
    #项目执行的变口号,和nginx配置的要一致
    socket = 127.0.0.1:8000
    #是否以主进程模式允许
    master = true
    #开启的工作进程数量
    processes=4   
    #日志文件路径,前提是该文件要存在,且可写
    daemonize = /site/project/ky/run.log
    #表示不记录正常信息,只记录错误信息,否则你的日志可能很快就爆满
    disable-logging = true
    #当服务器退出的时候自动清理环境
    vacuum = true
    #进程信息文件路径(这里指项目的根目录)
    pidfile=%(chdir)/uwsgi.pid
    

    配完就可以运行起uwsgi了:

    uwsgi --ini uwsgi.ini
    
    # 关闭uwsgi
    uwsgi --stop ./uwsgi.pid
    # 重启
    uwsgi --reload ./uwsgi.pid
    

    然后访问我们的网站就可以了,不过以上配置虽然可以,但是我们其实并不需要使用django自己来处理静态文件,其实我们完全可以让nginx为我们处理,效率更高。下面我们针对网站的静态资源进行配置。

    如果使用Nginx处理静态资源,我们最好使用统一目录管理我们的Django静态资源。

    修改nginx配置

    # 其实就是让静态资源的请求在nginx层面就被响应了
    
    # 在Nginx配置中增加一段配置就可以了(这个静态文件的路径根据各个项目可能有所不同)
    location /static {
        alias /site/project/ky/static;
    }
    
    
  • 相关阅读:
    XPOSED优秀模块列表 反射
    XPOSED优秀模块列表 ENABLE CALL RECORDING (三星启用通话录音)
    sp_Rename批量修改数据表的列名
    我的第一个sql server function
    js传递参数时是按照值传递的
    TreeView 绑定到深度未知的数据源
    silverlight中WCF服务定义终结点后可以方便部署
    Jquery常用方法合集,超实用
    sql 触发器 if条件判断
    如何用js判断document里的一个对象是否存在?或是是否有效
  • 原文地址:https://www.cnblogs.com/imxiaoqi/p/10453096.html
Copyright © 2011-2022 走看看