美文网首页
在 Windows 平台部署 Flask

在 Windows 平台部署 Flask

作者: Stone0823 | 来源:发表于2019-12-04 16:27 被阅读0次

    之前写过一篇博文:如何在 CentOS 6.5 上部署 Flask,介绍了在 Linux 上通过 nginx + uwsgi 部署 Flask 的方法。由于平时开发的时候在 Windows 平台,Flask 本身带的 web server 功能太弱,所以考虑 nginx 是否可以在 Windows 平台应用。经过在网上的查找,找到解决方案:Flask + Tornado + nginx。以下是 nginx 在 Windows 部署的方法。

    下载和安装

    下载地址:https://nginx.org/en/download.html,选择 Windows 版本,下载后解压缩到目标位置即可。

    启动和关闭

    此时,进入 nginx 安装目录,通过下面的命令:

    start nginx
    

    可以启动 nginx,由 nginx 提供 http 服务。使用

    nginx -s stop
    

    快速停止 nginx 服务。但因为并没有对 nginx 进行配置,所以没有什么实际的作用。接下来我们需要对 nginx 进行配置,让 nginx 作为 Flask 的 http 服务器。在 Linux 操作系统中,可以使用 gunicorn 或 uwsgi 作为 WSGI 服务器,但 Windows 不能使用,所以使用 tornado 充当 wsgi。

    Tornado 作为 wsgi

    我们用一个非常简单的 Flask 工程来进行测试, Flask 工程包含两个文件:

    myflask/
        app.py
        server.py
    

    app.py 为 Flask 程序,代码如下:

    from flask import Flask
     
    app = Flask(__name__)
     
    @app.route('/')
    def index():
        return 'hello flask'
    

    server.py 是一段 Tornado 代码,让 Tornado 作为 wsgi 服务器:

    from tornado.httpserver import HTTPServer
    from tornado.wsgi import WSGIContainer
    from app import app
    from tornado.ioloop import IOLoop
    
    s = HTTPServer(WSGIContainer(app))
    s.listen(9900) # 监听 9900 端口
    IOLoop.current().start()
    

    然后在当前目录下通过 python server.py 可以启动 Flask 程序。Tornado 监控 9900 端口。

    配置 nginx

    接下来配置 nginx,当用户在浏览器中输入 http://localhost,nginx 自动转发到 9900 端口,这样就可以关联到 Tornado 充当的 WSGI 服务器。

    nginx 的配置文件 nginx.conf 在安装目录下 conf 子文件加下,打开该文件,进行如下配置:

    http {   
        server {
            listen       80;
            server_name  localhost;
            server_name  127.0.0.1;     
            charset     utf-8;           
    
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass  http://localhost:9900;
            }
            # other configurations
      }
    

    配置完成后,重新启动 nginx ,当用户在浏览器中输入 http://localhost,nginx 将请求转发到 9900 端口,从而关联到我们的 Flask 程序。

    将 nginx 加载 Windows 服务

    通过 start nginx 启动 nginx 服务,缺点是当关闭 command 窗口,这个服务就终止了。在 Windows 操作系统中,我们可以使用 winsw 将 nginx 加载到 Windows 服务。

    winsw 是一个一个开源的项目,可以将一个自定义进程包装为一个 Windows 服务,项目地址:Github,下载地址:WinSW

    下载后,将 exe 文件放到 nginx.exe 相同的文件夹下,并且将 winsw.exe 改名为 nginx-service.exe。改名的目的是为了后续在服务中容易找到,并不是必须的。

    然后在相同的文件夹下创建一个 nginx-service.xml 文件。文件的内容在 https://github.com/kohsuke/winsw/blob/master/doc/xmlConfigFile.md 中有说明。比如,需要配置 nginx,xml 文件的内容如下:

    <service>
        <id>nginx</id>
        <name>Nginx Service</name>
        <description>Nginx Service</description>
        <logpath>C:\Programs\nginx-1.17.5\logs</logpath>
        <log mode="roll-by-size">
          <sizeThreshold>10240</sizeThreshold>
          <keepFiles>8</keepFiles>
        </log>
        <executable>C:\Programs\nginx-1.17.5\nginx.exe</executable>
        <startarguments>-p C:\Programs\nginx-1.17.5\nginx</startarguments>
        <stopexecutable>C:\Programs\nginx-1.17.5\nginx.exe</stopexecutable>
        <stoparguments>-p C:\Programs\nginx-1.17.5\nginx -s stop</stoparguments>
      </service>
    

    另外,为了支持 .net 4.0,还需要在相同的目录下创建一个 nginx-service.exe.config 文件,注意这两个配置文件的名称是跟着 nginx-service 来的,必须相同。文件的内容是固定的,如下所示:

    <configuration>
      <startup>
        <supportedRuntime version="v2.0.50727" />
        <supportedRuntime version="v4.0" />
      </startup>
      <runtime>
        <generatePublisherEvidence enabled="false"/> 
      </runtime>
    </configuration>
    

    完成配置后,在命令行窗口通过下面的命令进行安装:

    nginx-service.exe install
    

    安装之后,进入 Windows 服务,可以在服务中进行属性的设置和启动与停止的管理。



    将 nginx 安装为服务的好处是可以提供持久的服务。

    参考

    相关文章

      网友评论

          本文标题:在 Windows 平台部署 Flask

          本文链接:https://www.haomeiwen.com/subject/gqylgctx.html