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;
}

原文地址:https://www.cnblogs.com/imxiaoqi/p/10453096.html