部署django到服务器
部署
服务器环境配置
-
在本地的虚拟环境中,项目根目录下,执行命令收集所有的包
- pip freeze > plist.txt
-
安装并创建虚拟环境,如已创建则跳过此步 sudo apt-get install python-virtualenv
-
sudo apt-get install python-virtualenv sudo easy_install virtualenvwrapper mkvirtualenv [虚拟环境名称]
workon [虚拟环境名称]
pip install -r plist.txt -
更改settings.py文件
-
DEBUG = False ALLOW_HOSTS=['*',]#表示可以访问服务器的ip
-
启动服务器,运行正常,但静态文件无法加载
WSGI
-
在生产环境中使用WSGI
-
WSGI:Web服务器网关接口,英文为python web server gateway interface,缩写wsgi,是python应用程序或框架和web服务器之间的一种接口,被广泛接受
-
WSGI没有官方的实现,因为WSGI更像是一个协议,只要遵照这些协议,WSGI应用都可以在任何服务器上运行
-
命令
django-admin startproject
会生成一个简单的wsgi.py文件,确定了settings、application对象- application对象:在python模块中使用application对象与应用服务器交互
- settings模块:Django需要导入settings模块,这里是应用定义的地方
uWSGI
-
uwsgi实现了wsgi的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器
-
uWSGI代码完全用C编写
-
安装uWSGI
pip install uwsgi
[uwsgi] socket=外网ip:端口(使用nginx连接时,使用socket) http=外网ip:端口(直接做web服务器,使用http) chdir=项目根目录 wsgi-file=项目中的wsgi.py文件的目录,相对于项目根目录 processes=4 threads=2 master=True pidfile=uwsgi.pid daemonize=uswgi.log
- 停止:uwsgi --stop uwsgi.pid
- 重启:uwsgi -- reload uwsgi.pid
- 使用http协议查看网站运行情况,运行正常,但是静态文件无法加载
- socket 和http 地址选一个即可,另外一个注掉,另外需要注意端口占用
nginx
-
使用nginx的作用
- 负载均衡:多台服务器轮流处理请求
- 反射代理:隐藏真实服务器
-
实现构架:客户端请求nginx,再由nginx请求uwsgi,运行django框架下的python代码
-
nginx+uwsgi也可以用其他框架的python web代码,不限于django
-
到官网下载nginx压缩文件或通过命令安装
-
sudo apt-get nginx
-
这里以下载压缩文件为例
解压缩: tar zxvf nginx-1.6.3.tar.gz 进入nginx-1.6.3目录依次执行如下命令进行安装: ./configure make sudo make install
-
查看版本:sudo sbin/nginx -v
-
启动:sudo sbin/nginx
-
停止:sudo sbin/nginx -s stop
-
重启:sudo sbin/nginx -s reload
-
通过浏览器查看nginx运行结果
-
指向uwsgi项目:编辑conf/nginx.conf文件
sudo conf/nginx.conf 在server下添加新的location项,指向uwsgi的ip和端口 location /{ include uwsgi_params;将所有的参数转到uwsgi下 uwsgi_pass uwsgi的ip和端口; }
逆风的方向更适合飞翔,不怕千万人阻挡,只怕自己投降!