【Python3.7 Centos服务部署从0开始】Nginx & uWSGI 必知必会

Nginx 概述

不依赖第三方服务搭建网站服务器及功能

Nginx 作为反向代理器

Nginx不直接处理请求,而是在云主机中有一个Real Server,Nginx只是把请求转发给Real Server,等待Real Server请求处理完成后,再将请求返回给客户端

Nginx 作为负载均衡器

在环境中存在 Nginx, Real Server No.1, Real Server No.2......
Nginx一样执行请发转发,但是在 Nginx 挑选 Real Server 的时候,权重是不一样的,Nginx 中自己的一套逻辑,这套逻辑就是为了负载均衡

假设:Real Server No.1 的权重是3,Real Server No.2 的权重是1,在4个请求过来后,很可能 Real Server No.1 会收到3个请求,Real Server No.2会收到一个请求

CentOS && Nginx

安装 Nginx

yum install nginx

Nginx 常用指令

1.启动Nginx

sudo nginx

判断是否启动成功
在浏览器中输入公网的IP,出现如下的页面则为启动成功

image

2.停止Nginx

快速停止Nginx

sudo nginx -s stop

3.退出Nginx

与上面的 stop 相比会更加优雅一下

sudo nginx -s quit

4.重新加载Nginx的配置文件

在修改完配置后执行该命令

sudo nginx -s reload

5.重新打开Nginx的日志文件

sudo nginx -s reopen

修改Nginx的配置文件

文件存放的位置

cd /etc/nginx/
主配置文件:nginx.conf

Nginx关键配置模块

  • events 配置域:网络连接相关配置(I/O模型等)
  • server 配置域:相关服务节点配置
  • location 配置域:资源路由配置
  • http 配置域:Nginx作为网页服务器时的配置(#mail)
  • upstream 配置域:反向代理配置域

配置存在层级关系

# nginx.conf 五大配置域相关层次关系
events {
    ...
}

http {
    ...
    upstream {
        ...
    }
    
    server {
        ...
        location {
            ...
        }
    }
}

# mail {
#    ...
# }

WSGI 协议概述

全称:Web Server Gateway Interface
是 Web Server 和 Web Application 通信的规范

image

uWSGI概述

  • 实现了WSGI协议
  • Web服务器
  • 接收客户端请求通过协议传达给Django应用

centOS 中安装 python3.7

1.查找python的位置:

whereis python

2.安装相关包,用于下载编译python3

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make 

3.默认的,centos7也没有安装pip

#运行这个命令添加epel扩展源
yum -y install epel-release

#安装pip
yum install python-pip

4.用pip装wget

pip install wget

5.用wget下载python3的源码包

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz

6.手动安装

#解压
xz -d Python-3.7.0.tar.xz
tar -xf Python-3.7.0.tar

#进入解压后的目录,依次执行下面命令进行手动编译
./configure prefix=/usr/local/python3
make && make install

7.添加软链接

#将原来的链接备份
mv /usr/bin/python /usr/bin/python.bak

#添加python3的软链接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python

#测试是否安装成功了
python -V

8.更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用

vi /usr/bin/yum
# 把 #! /usr/bin/python修改为#! /usr/bin/python2

vi /usr/libexec/urlgrabber-ext-down
# 把 #! /usr/bin/python 修改为#! /usr/bin/python2

9.修改pip的python版本
原先的pip文件是以python2为默认版本

查找pip的位置
whereis pip => /usr/bin/pip # 这里面会有很多其他的pip,比如pip2,pip3,pip3.6等

vim /usr/bin/pip
#!/usr/bin/python2   ==>  #!/usr/bin/python3

centOS 中安装 uWSGI

1.通过pip安装 uWSGI

pip install uwsgi

如果出现
致命错误:Python.h:没有那个文件或目录
执行如下命令

yum install libffi-devel -y

2.添加软连接

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
ln -s /usr/local/python3/bin/uwsgi /usr/sbin/uwsgi

uWSGI的基础配置

  • chdir: WSGI 应用目录
  • module:WSGI 应用的模块名字
  • processes:uWSGI 进程数
  • (http-)socket:套接字路径、地址
  • max-requests:最大并发请求数
  • vacuum:当服务器退出时是否需要自动清理文件,删除相关的pid文件 socket文件 (Boolean)

uWSGI启动(两种方式)

1.通过命令行启动

将配置通过命令行写入,进而启动

uwsgi --chdir xxxx --socket :80 --max-requests 5000 --processes 4 --module xxx.wsgi

--chdir xxxx (指定 uwsgi 的应用目录)
--socket :80 (指定端口)
--max-requests (最大请求数)
--processes (处理的进程数)
--module (指定具体的wsgi模块)

2.使用配置文件启动

1.创建 uwsgi 的配置文件

vim uwsgi-demo.ini

2.写入配置文件

[uwsgi]

chdir = /xxxx/xx

http-scoket = :80

max-requests = 5000

processes = 4

module = xxx.wsgi

3.通过命令行执行 wsgi 的配置

uwsgi --ini uwsgi-demo.ini

为什么需要uWSGI部署Django

  • Django runserver 可以直接对外服务,但是只用于测试,不安全且性能较差
  • uWSGI可以很好的进行多线程调用、进程监控,例如:uWSGI会监测django服务是否挂了,挂了会主动重启
  • uWSGI提供完善的请求日志处理

使用 uWSGI 部署测试

image

1.创建一个文件夹

mkdir deployment
cd deployment

2创建Python文件,定义uWSGI应用

touch uwsgi_test.py

3.写入相关配置

def application(env, start_response):
    start_response('200 OK', [('Content-type', 'text/html')])
    return [b'Hello World, Hello uWSGI']

4.运行 uwsgi

uwsgi --http :8000 --wsgi-file uwsgi_test.py

使用 uWSGI 部署 django

1.修改 django 的 setting

ALLOWED_HOSTS = ['*']  # 开启所有人都可以访问

2.找到 django 目录下的 wsgi文件执行
django_deployment.wsgi为对应django项目下的文件相对路径

uwsgi --http :8000 --module django_deployment.wsgi

你可能感兴趣的:(【Python3.7 Centos服务部署从0开始】Nginx & uWSGI 必知必会)