Python3+Django+uwsgi+nginx部署及遇到的问题解决方案
注意:部署之前应该设置:settings.py DEBUG = True ALLOWED_HOSTS = ['*']部署从三个方面: uwsgi nginx 静态文件相关概念的介绍: CGI:(Common Gateway Inteface): 字面意思就是通用网关接口,它是外部应用程序与Web服务器之间的接口标准,意思就是它用来规定一个程序该如何与web服务
注意:部署之前应该设置:settings.py
DEBUG = True
ALLOWED_HOSTS = ['*']
部署从三个方面:
uwsgi nginx 静态文件
相关概念的介绍:
CGI:(Common Gateway Inteface): 字面意思就是通用网关接口,它是外部应用程序与Web服务器之间的接口标准,意思就是它用来规定一个程序该如何与web服务器程序之间通信从而可以让这个程序跑在web服务器上。当然,CGI 只是一个很基本的协议
WSGI:WSGI是一种通信协议。
uwsgi:是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
部署过程:
1.安装uwsgi
pip install uwsgi
2.在项目的跟目录下创建uwsgi.ini文件,简单配置如下:
[uwsgi]
socket=127.0.0.1:8888
#http=127.0.0.1:8888
chdir=/Users/weifulong/study_python/django_project/fruitday/fruitday
wsgi-file=fruitday/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log
参数说明:
socket:使用nginx时配置
http: 直接访问服务器时候配置
chdir: 项目的根目录
wsgi-file: wsgi.py的相对路径
processes , threads, master 默认就好
pidfile 在manage.py的同级会创建一个uwsgi.pid文件用来保存此次运行的pid‘
daemonize : 运行的日志文件,同样在和manage.py同一级生成
3.使用uwsgi启动服务器
- 启动:uwsgi --ini uwsgi.ini
- 停止:uwsgi --stop uwsgi.pid
- 重启:uwsgi --reload uwsgi.pid
4.访问127.0.0.1:8888
如果成功,则会呈现和你使用python3 manage.py runserver的一样,但是静态资源无法加载,稍后会解决这个问题
注意:此处可能出现异常如下:
*** Operational MODE: preforking+threaded *** Traceback (most recent call last): File "fruitday/wsgi.py", line 12, in <module> from django.core.wsgi import get_wsgi_application ModuleNotFoundError: No module named 'django' unable to load app 0 (mountpoint='') (callable not found or import error) *** no app loaded. going in full dynamic mode ***
这是因为使用了虚拟环境的原因,解决方案如下:
在uwsgi.ini中将虚拟环境的路径添加进去
pythonpath=/Users/weifulong/study_python/env/env3.6_fruitday/lib/python3.6/site-packages
这是我的本项目虚拟环境的路径,实际中改成自己的即可,注意要写到site-packages,重新启动uwsgi,问题解决
到此uwsgi部署完成,接下来部署nginx
Nginx的部署和配置:
nginx的作用:
1、静态HTTP服务器
首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。
2、反向代理服务器
什么是反向代理?
客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。
3、负载均衡
当网站访问量非常大,网站站长开心赚钱的同时,也摊上事儿了。因为网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
Nginx可以通过反向代理来实现负载均衡。
4、虚拟主机
有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。
例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。
5、FastCGI
Nginx本身不支持PHP等语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理(例如PHP、Python、Perl)
1.默认下在位置和使用源码编译安装位置不同,请自己查看位置,我使用的是默认安装,配置文件位置:
/usr/local/etc/nginx
默认安装位置:
/usr/local/Cellar/nginx/1.13.10/bin
启动:sudo ./nginx
重启:sudo ./nginx -s reload
2.编辑nginx.conf文件如下:在server中添加
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8888;
}
3.启动服务,在浏览器输入127.0.0.1:80就可以看到效果了,和你使用uwsgi时呈现的效果一样,表示成功
4.配置静态文件路径
1.在server中添加静态文件路径
location /static {
alias /var/www/fruitday/static/;
}
2.创建/var/www/fruitday/static,注意此处必须修改static的权限,负责无法采集静态文件
sudo chmod 777 static
3.设置settings.py文件,添加:
STATIC_ROOT= ’/var/www/fruitday/static/‘
4.采集静态文件,运行python3 manage.py collectstatic,输入yes(也有可能不用输入)
5.采集成功从新启动uwsgi和nginx,再次访问,就会发现此时和你直接使用./manage.py runserver看到的效果一样了
到此部署完成
更多推荐
所有评论(0)