day66:Linux:nginx+uwsgi+django跑python项目
目录
2.nginx+uwsgi+django跑pythonav项目
0.uwsgi简述
1.什么是wsgi
WSGI,全称Web Server Gateway Interface,是作为python语言定义的web服务器和web应用程序之间的一种简单通用的接口。
WSGI的官方定义,the Python Web Server Gateway Interface。从名字就可以看出来,这是一个Gateway网关。name网关的作用就是在协议之间进行切换
也就是说,WSGI就像是一座桥梁,一边连着web服务器,另一边连着web应用程序
2.什么是uWSGI
uWSGI实现了WSGI、HTTP等数据交换协议、简单来说,我们将项目通过uwsgi方式运行,就可以直接对外提供服务,而无需依托于nginx。
3.uWSGI为什么需要nginx?
通常情况下Python中的django框架或Flask框架可以通过uwsgi方式对外提供服务。为什么还需要nginx呢?
1.安全:后端服务直接以http对外提供访问,往往会暴露后端的真实服务,如果使用nginx可以很好的隐藏后端的服务,并且nginx能够实现安全限制、Rewrite、HTTPS等功能。(这些都是uwsgi无法实现的)
2.效率:nginx可以直接处理静态资源,然后将动态内容通过uwsgi协议转发给后端django,实现动静分离,提供更好的请求与响应。
1.使用uwsgi+django运行demo
step1.安装python3环境
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel \
sqlite-devel gcc gcc-c++ openssl-devel zlib zlib-devel python3 python3-devel -y
step2.安装django框架和uwsgi
pip3 install -i https://mirrors.aliyun.com/pypi/simple/ --upgrade pip pip3 install -i https://mirrors.aliyun.com/pypi/simple/ django==2.1.8 pip3 install -i https://mirrors.aliyun.com/pypi/simple/ uwsgi
step3.配置django工程
[root@oldboy-pythonedu demosite]# cd /opt/ [root@oldboy-pythonedu opt]# django-admin.py startproject demosite [root@oldboy-pythonedu opt]# cd demosite/ [root@oldboy-pythonedu demosite]# python3 manage.py runserver 0.0.0.0:9999 # 启动测试
step4.配置uwsgi
[root@oldboy-pythonedu opt]# cat /opt/demosite/uwsgi.ini [uwsgi] #uwsgi监听的端口 socket = 127.0.0.1:9999 #uwsgi启动进程数 workers = 2 #最大接收的请求数 max-requests = 1000 #buffer缓冲区大小 buffer-size = 30000 #进程pid存放路径 pidfile = /run/uwsgi.pid #uwsgi日志存储路径 daemonize = /var/log/uwsgi.log [root@oldboy-pythonedu demosite]# uwsgi --ini /opt/demosite/uwsgi.ini [root@oldboy-pythonedu demosite]# netstat -lntp | grep 9999 tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 9827/uwsgi
step5.配置nginx
[root@oldboy-pythonedu opt]# cat /etc/nginx/conf.d/uwsgi.oldboyedu.com.conf server { listen 80; server_name uwsgi.oldboyedu.com; client_max_body_size 100M; index index.html; #默认返回页面 location / { uwsgi_pass 127.0.0.1:9999; uwsgi_param UWSGI_CHDIR /opt/demosite; #工程所在的路径 uwsgi_param UWSGI_SCRIPT demosite.wsgi; #demosite/wsgi接口文件 include uwsgi_params; } }
2.nginx+uwsgi+django跑pythonav项目
step1.下载项目包文件
cd /code/ wget http://cdn.xuliangwei.com/pythonav.zip unzip pythonav.zip pip3 install -i https://pypi.doubanio.com/simple/ -r /code/pythonav/requirements.txt
step2.在10.0.0.202创建一个名字为pythonav的数据库
create database pythonav;
step3.更改pythonav项目的配置文件(配置数据库)
vim pythonav/pythonav/settings.py # ################### MySQL ################### DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'pythonav', 'USER': 'all', 'PASSWORD': 'Oldxu.com123', 'HOST': '10.0.0.202', 'PORT': '3306', } }
step4.更改pythonav项目的配置文件:ALLOW_HOST
ALLOW_HOST=['*']
step5.数据库迁移+创建超级用户+收集静态资源
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py createsuperuser
python3 manage.py collectstatic
step6.修改pythonav项目中的uwsgi的配置文件
vim pythonav_uwsgi.ini [uwsgi] #uwsgi监听的端口 socket = 127.0.0.1:8811 chdir = /code/pythonav/ wsgi-file = pythonav/wsgi.py #uwsgi启动进程数 processes = 4 threads = 10 #最大接收的请求数 max-requests = 1000 #buffer缓冲区大小 buffer-size = 30000 #进程pid存放路径 pidfile = /run/uwsgi-pythonav.pid #uwsgi日志存储路径 daemonize = /var/log/uwsgi-pythonav.log
step7.修改nginx配置文件
[root@oldboy-pythonedu pythonav]# cat /etc/nginx/conf.d/pythonav.oldboyedu.com.conf server { listen 80; server_name pythonav.oldboyedu.com; client_max_body_size 100M; location /static { alias /code/pythonav/static; } location / { uwsgi_pass 127.0.0.1:8811; include uwsgi_params; } }
Tip:一个停止指令
kill $(ps -ef |grep bbs_uwsgi | grep -v grep | awk '{print $2}' | xargs )
总结
当用Linux+nginx+uwsgi+django跑项目时,只需完成这五个步骤即可。
1.安装模块
2.配置数据库连接
3.初始化数据库
4.配置uwsgi
5.配置nginx