软件版本说明
操作系统: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;
}