因项目需求,需要部署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