这个部署,我真的是爬了好久的坑,才爬出来,所以给大家分享一下,避免入坑。
首先我们先了解一下相关知识:
wsgi:
一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。
利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了;
uwsgi:
同WSGI一样是一种通信协议
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,它与WSGI相比是两样东西。
uWSGI :一种python web server或称为Server/Gateway
uWSGI类似tornadoweb或者flup,是一种python web server,uWSGI是实现了uwsgi和WSGI两种协议的Web服务器,负责响应python 的web请求。
因为apache、nginx等,它们自己都没有解析动态语言如php的功能,而是分派给其他模块来做,比如apache就可以说内置了php模块,让人感觉好像apache就支持php一样。
uWSGI实现了wsgi协议、uwsgi协议、http等协议。 Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
其次了解一下项目流程:
1.首先客户端请求服务资源,
2.nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,
如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,
如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi,
3.wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
4.wsgi将返回值进行打包,转发给uWSGI,
5.uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。
*注:不同的组件之间传递信息涉及到数据格式和协议的转换
接下来请看详细的安装与配置步骤:
1.检测yum是否完好:yum list
2.安装python需要的依赖包:yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make (手敲,任何地方都别复制)
3.下载python包:
linux系统默认安装了python
我们需要的版本是python 3.6.2,在centos上进行python2和3并存
wget https://www.python.org/ftp/python /3.6.2/Python-3.6.2.tar.xz
在根目录的opt下可以查看下载好的python3.6.2的压缩包
4.在opt下解压python包: tar -Jxvf Python3.6.2.tar.xz
5.进行安装路径配置并编译安装:
首先切换路径:cd Python3.6.2
其次进行路径配置: ./configure prefix=/usr/local/python3
最后编译安装:make && make instal (需要挺长时间的)
6.进入根目录下的usr/local下创建爱你python3和pip3的软链接:
7.安装django
8.安装uwsgi
9.创建uwsgi的软链接:
先切入到opt下,然后创建uwsgi的软链接:
10.迁移我们自己的django项目:(我的项目是MyBlog)
我用的是xftp工具:
11.测试uwsgi和django的契合:
1.首先下关闭防火墙和selinux
2.切入到我们的项目目录下,然后用uwsgi命令启动项目:
--http ip端口传递
--file uwsgi文件位置
--static-map 静态文件路由
上面我们采用的是命令的方式使用uwsgi启动django,但是,不够完美。我们可以构造配置文件进行操作。
12.使用uwsgi脚本启动django
1.在/opt下创建script目录
2.在script目录下创建uwsgi.ini文件
3.配置uwsgi.ini文件
4.给uwsgi授权:
5.在script下启动项目: uwsgi --ini uwsgi.ini
可以看到这样也能启动此项目:
13.安装nginx:wget http://nginx.org/download/nginx-1.12.2.tar.gz
下载成功:
14.解压 nginx压缩包
15.编译安装nginx
16.进入/usr/local下查看nginx
17.创建nginx软链接
18.nginx和uwsgi通讯示意图:
19.修改nginx的配置文件:
配置内容:(红色的是与要修改的)
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; 日志的格式
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name Qshop; 服务的名称
charset utf-8; 编码格式
access_log logs/host.access.log main; 访问日志
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; 访问内容的类型
error_log /var/log/nginx/error.log error; 错误日志,默认没有,需要手动创建
location / {
include uwsgi_params; 加载uwsgi_params
uwsgi_connect_timeout 30; 连接的超时时间 不要加冒号不要加冒号不要加冒号
uwsgi_pass unix:/opt/script/uwsgi.sock; uwsgi.sock通讯的文件地址
}
location = /static/{
alias /opt/Qshop/static; 静态文件的目录
index index.html index.htm;
}
19.启动uwsgi和nginx(先杀死当前状态下的uwsgi和nginx)
kill -9 uwsgi
kill -9 nginx
先启动uwsgi
再启动nginx:
20.整个过程整理下来了,我觉得是非常详细了,希望大家不要入坑。
————————————————
版权声明:本文为CSDN博主「赵小七--」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43567965/article/details/89364046
来源:https://blog.csdn.net/weixin_43567965/article/details/89364046