与女服务员和码头工人一起提供烧瓶应用程序

时间:2021-03-25 11:11:37

标签: python docker flask production waitress

我正在使用 docker 为 Flask 应用程序提供服务,但 docker logs 命令显示该应用程序正在 development 服务器上运行。我想通过 waitress 提供此应用。

该项目的结构如下。用于构建映像、公开端口并运行 docker-compose.yml 文件的 manage.py 文件

docker-compose.yml

  web:
    build: .
    image: web
    container_name: web
    ports:
      - 8080:5000
    command: python manage.py run -h 0.0.0.0

manage.py 文件导入 create_app 并将其提供到 FLaskGroup

from flask.cli import FlaskGroup
from project.server import create_app

app = create_app()
cli = FlaskGroup(create_app=create_app)

if __name__ == "__main__":
    cli()

project/server/__init__.py 文件导入 main_blueprint 并注册它。

from project.server.main.views import main_blueprint
from flask import Flask
import os

def create_app(script_info=None):

    app = Flask(
        __name__,
        template_folder="../client/templates",
        static_folder="../client/static",
    )

    app_settings = os.getenv("APP_SETTINGS")
    app.config.from_object(app_settings)

    app.register_blueprint(main_blueprint)

    app.shell_context_processor({"app": app})

    return app

project/server/main/views.py

from flask import render_template, Blueprint, jsonify, request

main_blueprint = Blueprint("main", __name__,)

@main_blueprint.route("/", methods=["GET"])
def home():
    return render_template("pages/home.html")


@main_blueprint.route("/test", methods=["GET"])
def parse():
    return jsonify({"result": "test"}), 202

如何修改现有代码以使用 flask 提供 waitress 应用程序?谢谢。

2 个答案:

答案 0 :(得分:0)

您使用 python manage.py run -h 0.0.0.0 运行,它使用经典的 flask run。您应该使用服务员命令来运行您的应用。

This doc 可能会对您有所帮助。

答案 1 :(得分:0)

我通过更改 docker-compose.yml 文件使其运行:

command

python manage.py run -h 0.0.0.0waitress-serve --call "project.server:create_app"

port

8080:50008080:8080

docker-compose.yml 文件现在如下所示:

  web:
    build: .
    image: web
    container_name: web
    ports:
      - 8080:8080
    command: waitress-serve --call "project.server:create_app"