Linux-10-wsgi、uWSGI、uwsgi+django+nginx、nginx+uwsgi+django+pythonav

一、什么是wsgi

wSGl,全称Web Server Gateway Interface是为Python语言定义的Web服务器和Web应用程序之间的一种简单通用的接口。
WSGl的官方定义,the Python Web Server Gateway Interface。从名字就可以看出来,这是一个Gateway网关。那么网关的作用就是在协议之间进行转换。
也就是说,WSGI就像是一座桥梁,一边连着web服务器,另一边连着web应用程序。
在这里插入图片描述

二、什么是uWSGI

uWSGl实现了WSGI、http等数据交换协议。简单来说:我们将项目通过uwsgi方式运行,就可以直接对外提供服务,而无需依托于Nginx。
在这里插入图片描述

三、uWSGI为什么需要nginx?

通常情况下Python中的Django框架或Flask框架可以通过Uwsgi方式对外提供服务。为什么还需要Nginx?
1.安全:后端服务直接以http对外提供访问,往往会暴露后端的真实服务,如果使用nginx可以很好的隐藏后端的
服务,并且nginx能够实现安全限制、Rewrite、HTTPS等功能。(这些都是uwsgi无法实现的。)
2.效率:nginx可以直接处理静态资源,然后将动态内容通过uWSGI协议转发给后端Django,实现动静分离,提供更好的请求与响应。

四、配置uwsgi+django运行demo

步骤一、安装 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

步骤二、安装 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

步骤三、配置Django工程

[root@oldboy-pythonedu demosite]# cd /opt/
[root@oldboy-pythonedu opt]# django-admin.py startproject demosite
[root@oldboy-pythonedu opt]# cd demosite/

[root@cwj-python demosite]# vim demosite/settings.py       # 如果出现ALLOWED_HOSTS报错
ALLOWED_HOSTS = ['*']

[root@oldboy-pythonedu demosite]# python3 manage.py runserver 0.0.0.0:9999		# 启动测试

步骤四、配置uWSGI、配置Nginx

[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          

# 配置Nginx,将用户发送的http请求, 通过uwsgi_pass 传递给  Uwsgi 服务端
[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;
    }
}

nginx -t
systemctl reload nginx

域名解析:

10.0.0.200 uwsgi.oldboyedu.com

五、nginx + uwsgi + django + pythonav

cd /code/
wget http://cdn.xuliangwei.com/pythonav.zip
unzip pythonav.zip
# 1.安装该项目所需的依赖包软件
pip3 install -i https://pypi.doubanio.com/simple/ -r /code/pythonav/requirements.txt

# 2.登录202服务器创建一个pythonav的库:
create database pythonav charset=utf8;

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',
    }
}
cd /code/pythonav
# 3. 初始化数据库
python3 manage.py makemigrations
python3 manage.py migrate
# 4. 创建超级管理员用户
python3 manage.py createsuperuser
# 5.收集静态资源至指定位置存储
python3 manage.py collectstatic

# 6.配置uwsgi启动Django项目
[root@cwj-python pythonav]# 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

# 7.启动uwsgi
	uwsgi --ini /code/pythonav/pythonav_uwsgi.ini
	netstat -lntp

# 8.配置nginx Uwsgi反向代理
[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;
    }
}

	nginx -t
  	systemctl reload nginx

停止:

kill $(ps -ef |grep bbs_uwsgi | grep -v grep  | awk '{print $2}' | xargs )

ps aux
pkill -f uwsgi -9

运行自己的项目:

1.安装模块
2.配置数据库连接
3.初始化数据库
4.配置uwsgi
5.配置nginx

tar xf blog.tar.gz  -C /code/
ls /code/
cd /code/blog_sever/
pip3 install -i https://pypi.doubanio.com/simple/ -r packages.txt 
vim blog_progect/settings/develop.py 			#创建数据库要指定utf8
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blog',
        'USER': 'all',
        'PASSWORD': 'Oldxu.com123',
        'HOST': '10.0.0.202',
        'PORT': '3306',
        'OPTIONS': {
            "init_command": "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}

vim /usr/local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py +146
	# 修改为 encode

python3 manage.py migrate
python3 manage.py createsuperuser
python3 manage.py collectstatic

cat /code/blog_sever/blog_uwsgi.ini 
[uwsgi]
#uwsgi监听的端口
socket = 127.0.0.1:8989
chdir = /code/blog_sever
wsgi-file = blog_progect/wsgi.py
#uwsgi启动进程数
processes = 4
threads = 10
#最大接收的请求数
max-requests = 1000
#buffer缓冲区大小
buffer-size = 30000
#进程pid存放路径
pidfile = /run/uwsgi-blog.pid
#uwsgi日志存储路径
daemonize = /var/log/uwsgi-blog.log

uwsgi --ini /code/blog_sever/blog_uwsgi.ini 
netstat -lntp

cat /etc/nginx/conf.d/pyblog.oldboyedu.com.conf 
server {
    listen 80;
    server_name pyblog.oldboyedu.com;
    client_max_body_size 100M;
    
	location /static {
		alias /code/blog_sever/static;
	}

    location / {
        uwsgi_pass 127.0.0.1:8989;
        include uwsgi_params;
    }
}

nginx -t
systemctl reload nginx

猜你喜欢

转载自blog.csdn.net/qq_45957580/article/details/109051596