Python+Flask+Tornado+Nginx服务器部署解决方案

Python+Tornado+Nginx服务器部署解决方案

上期文章,我们分享了flask的简单入门,哪里我们的代码都是运行在本机上面。flask作为一个web服务器,最后当然要部署在云服务器上

flask云服务器配置

* Serving Flask app "flaskweb" (lazy loading)
* Environment: productionWARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

这是上期文章中,flask提示的问题

WARNING: Do not use the development server in a production environment.这句话的意思是flask不要使用在生产环境中,由于flask是一个简单的web框架,flask 在正式的服务器上的表现能力确实不足,当然你的网站访问量不是很多的时候,完全可以使用flask来进行服务,我们来使用Tornado来部署服务器环境来代替flask的WSGI ,下图是网友整理的一个服务器相应一个浏览器处理的过程,主要是 如下:

1、浏览器输入网站进行网页请求

2、服务器端的Nginx 反向代理来监听网络的请求接口(一般是80(http)或者443端口(https))

3、nginx解析到服务器上的WSGI 服务

4、WSGI 服务托管flask web服务器的程序

5、flask web 服务器原路返回网页与数据

服务器处理流程

Tornado

Tornado是一个开源的网络服务器框架,它是基于社交聚合网站FriendFeed的实时信息服务开发而来的,Tornado使FriendFeed使用的可扩展的非阻塞Web服务器及其相关工具的开源版本,这个Web框架看起来有些像web.py或 Google的webapp,不过为了更加有效地利用非阻塞服务器环境,Tornado这个Web框架还包含了一些相关的有用工具和优化。

Tornado与现代主流的Web服务器框架有着明显的区别:它是非阻塞式的服务器,速度相当快。这得益于其非阻塞的方式和对epoll的运用。Tornado每秒可以处理数以千计的连接,对于实时Web服务来说Tornado确实是一个理想的Web框架

轻量级Web框架

异步非阻塞IO处理方式

Tornado采用的单进程单线程异步IO的网络模式,其高性能源于Tornado基于Linux的Epoll(UNIX为kqueue)的异步网络IO。

出色的抗负载能力

不依赖多进程或多线程

WSGI全栈替代产品

WSGI把应用(Application)和服务器(Server)结合起来,Tornado既可以是WSGI应用也可以是WSGI服务。

既是WebServer也是WebFramework

我们使用Tornado作为flask的WSGI服务来托管flask的网页,这样我们就可以部署大访问量的生产服务环境

参考上期的文章,我们新建一个web.py的flask web 代码

from flask import Flask, request
from flask import render_template
app = Flask(__name__)@app.route('/')
def index():
return render_template('index.html')
@app.route('/powers')
def powers():
return 'hello word, hello flask!'
if __name__ == '__main__':
app.run()

在flask web.py 文件夹下,新建一个tornadoweb.py文件,里面配置Tornado

当然,在配置以前你需要在服务器上安装tornado,直接使用pip install 安装即可

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from web import app#web是我們flask代码的名称web.py
from tornado.ioloop import IOLoop
s = HTTPServer(WSGIContainer(app))s.bind(5000,"0.0.0.0")#监听5000端口,作为服务器这里配置成0.0.0.0,服务器就可以监听所有浏览器的访问了。
s.start(1)
IOLoop.instance().start()

以上几句简单的代码便可以使用tornado来托管flask,个人感觉tornado的入门简单,比其它web服务器代理配置简单方便的多。这里需要注意,我们不再运行web.py而是运行tornadoweb.py这个脚本

tornado主要跟本地服务器打交道,而跟浏览器打交道的便是nginx

nginx配置

Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。

Nginx 使用基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接。高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊)。Nginx 是一个跨平台服务器,可以运行在 Linux、Windows、FreeBSD、Solaris、AIX、Mac OS 等操作系统上。这些优秀的设计带来的极大的稳定性。

Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。

Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。

nginx可以提供的服务

web 服务.负载均衡 (反向代理)web cache(web 缓存)

nginx 的优点

高并发。静态小文件占用资源少。2万并发、10个线程,内存消耗几百M。功能种类比较多。web,cache,proxy。每一个功能都不是特别强。支持epoll模型,使得nginx可以支持高并发。nginx 配合动态服务和Apache有区别。(FASTCGI 接口)利用nginx可以对IP限速,可以限制连接数。配置简单,更灵活。

nginx是免安装的,你只需要到官网上下载对应的版本即可,小编的服务器系统是win系统,下载压缩文件到本地服务器上,解压缩,就可以看到nginx.exe文件,双击就可以打开一个nginx服务,在打开服务之前,我们需要配置一下(conf),修改nginx.conf的配置文件

    server {
        listen  80;# 监听80端口
        server_name  39.106.000.00;#服务器的IP地址
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            proxy_pass http://127.0.0.1:5000;# 本机5000端口上的flask 服务
        }

我们主要使用nginx来做反向代理,主要来监听不同浏览器进行的80或者443端口的访问,当接受到一个请求后,nginx会反向代理给配置的本地端口上,我们配置的是5000端口,然而5000端口正是我们运行的tornado托管的flask服务器,配置完成后,在nginx.exe文件夹下打开cmd命令框,输入nginx.exe,便打开了nginx服务

现在我们服务器上已经部署好了一个web服务,总结一下,主要是三个配置

1:flask python原始文件,这里主要处理网页代码以及网站数据 >>>web.py

2:tornado服务器,这里主要托管我们的flask的原始网站>>>tornadoweb.py

3:nginx反向代理服务器,这里主要监听外来ip的访问 >>>nginx.exe

ok,我们的服务都搭建完成了,输入服务器的地址与我们代码中的路由,便可以看到我们搭建的网站了

let's try it

这里是小编的服务器地址,当然你需要注册一个域名,然后让你的域名解析到你的服务器上,就可以输入域名看到我们搭建的网站了

Nginx 的https的配置

以上便是服务器端的完整部署方案,只是我们只监听了80端口,但是https监听的是443端口,我们需要修改一下nginx服務配置监听443端口

server {
listen       443 ssl;
server_name  39.106.000.00;#服务器的IP地址;
ssl_certificate      cert.pem; SSL的证书
ssl_certificate_key  cert.key;
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
location / {
       proxy_pass http://127.0.0.1:5000;
  }
}

修改后需要nginx重新reload一下,服务才能生效

在nginx的文件夹中打开cmd命令框,输入nginx -s reload

服务便可以生效

https nginx

代码调试过程中若想关闭nginx ,需要在cmd命令框中输入nginx -s quit

以上配置完成后就可以使用https來进行访问了

nginx中的证书大家可以到域名注册商哪里免费下载ssl的证书

更多transformer,VIT,swin tranformer
参考头条号:人工智能研究所
v号:启示AI科技
微信中复制如下链接,打开,免费体验chatgpt
 
https://wx2.expostar.cn/qz/pages/manor/index?id=1137&share_from_id=79482&sid=24

动画详解transformer