运行

现在我们准备启动pygeoapi。

pygeoapi serve

这个 pygeoapi serve 命令使用Flask作为默认服务器启动实例。pygeoapi可以通过烧瓶供应 WSGI 或者是星状物 ASGI .

由于pygeoapi的核心是pythonapi,因此可以通过许多web服务器场景来为其提供服务。

注解

对pygeoapi或OpenAPI配置的更改需要重新启动服务器(为了提高性能,在服务器启动时加载一次配置)。

Flask WSGI

Web服务器网关接口(WSGI)是Web服务器如何与Python应用程序通信的标准。通过使用WSGI服务器,HTTP请求被处理成线程/进程以获得更好的性能。Flask是一个WSGI实现,pygeoapi使用它与核心API通信。

HTTP request <--> Flask (pygeoapi/flask_app.py) <--> pygeoapi API (pygeoapi/api.py)

Flask WSGI服务器的运行方式如下:

pygeoapi serve --flask
pygeoapi serve  # uses Flask by default

要将pygeoapi集成为另一个Flask应用程序的一部分,请使用Flask蓝图:

from flask import Flask
from pygeoapi.flask_app import BLUEPRINT as pygeoapi_blueprint

app = Flask(__name__)

app.register_blueprint(pygeoapi_blueprint, url_prefix='/oapi')


@app.route('/')
def hello_world():
    return 'Hello, World!'

因此,您的申请将在http://localhost:5000/和pygeoapi将在http://localhost:5000/oapi

Starlette ASGI

异步服务器网关接口(ASGI)是支持异步的web服务器、框架和用Python编写的应用程序之间的标准接口。ASGI提供了WSGI的优点以及异步功能。Starlette是一个ASGI实现,pygeoapi使用它以异步模式与核心API通信。

HTTP request <--> Starlette (pygeoapi/starlette_app.py) <--> pygeoapi API (pygeoapi/api.py)

Starlette ASGI服务器的运行方式如下:

pygeoapi serve --starlette

要将pygeoapi作为另一个Starlette应用程序的一部分进行集成,请执行以下操作:

from starlette.applications import Starlette
from starlette.responses import PlainTextResponse
from starlette.routing import Route
from pygeoapi.starlette_app import app as pygeoapi_app


async def homepage(request):
    return PlainTextResponse('Hello, World!')

app = Starlette(debug=True, routes=[
    Route('/', homepage),
])

app.mount('/oapi', pygeoapi_app)

因此,您的申请将在http://localhost:5000/和pygeoapi将在http://localhost:5000/oapi

在生产环境运行

运行 pygeoapi serve 不建议或不建议在生产中使用。首选方案如下所述。

参见

Docker 用于集装箱生产装置。

Apache和modwsgi

通过部署pygeoapi mod_wsgi 提供了在Apache中启用的简单方法。

要使用mod_wsgi进行部署,您的Apache实例必须在Apache中启用mod_wsgi。此时,设置以下Python WSGI脚本:

import os

os.environ['PYGEOAPI_CONFIG'] = '/path/to/my-pygeoapi-config.yml'
os.environ['PYGEOAPI_OPENAPI'] = '/path/to/my-pygeoapi-openapi.yml'

from pygeoapi.flask_app import APP as application

现在在Apache中配置:

WSGIDaemonProcess pygeoapi processes=1 threads=1
WSGIScriptAlias /pygeoapi /path/to/pygeoapi.wsgi process-group=pygeoapi application-group=%{GLOBAL}

<Location /pygeoapi>
  Header set Access-Control-Allow-Origin "*"
</Location>

Gunicorn

Gunicorn (对于UNIX)是可用于生产环境的几个pythonwsgihttp服务器之一。

HTTP request --> WSGI or ASGI server (gunicorn) <--> Flask or Starlette (pygeoapi/flask_app.py or pygeoapi/starlette_app.py) <--> pygeoapi API

注解

Gunicorn易于安装 pip install gunicorn

注解

有关WSGI服务器实现的完整列表,请参见 WSGI server list .

Gunicorn 和 Flask

Gunicorn和Flask操作简单:

gunicorn pygeoapi.flask_app:APP

注解

有关端口绑定、工作线程和日志记录等其他配置参数,请参阅 Gunicorn settings .

Gunicorn 和 Starlette

与Starlette一起运行Gunicorn需要 Uvicorn 它与Gunicorn一起提供异步功能。Uvicorn包含一个Gunicorn worker类,允许您运行ASGI应用程序,具有Uvicorn的所有性能优势,同时还为您提供了Gunicorn的全功能流程管理。

很容易从命令中运行,例如:

gunicorn pygeoapi.starlette_app:app -w 4 -k uvicorn.workers.UvicornWorker

注解

Uvicorn的安装与 pip install guvicorn

总结

根据您的需求,pygeoapi有许多部署方法。选择一个适合您的,并相应地进行修改。

注解

欢迎并鼓励采用其他方法;见 贡献 有关如何帮助和改进文档的更多信息