Pyramid 部署

2023-03-30 17:59 更新

到目前為止,本教程中開(kāi)發(fā)的Pyramid應(yīng)用程序的例子都是在本地機(jī)器上執(zhí)行的。為了使其能夠公開(kāi)訪問(wèn),必須將其部署在一個(gè)能夠滿足WSGI標(biāo)準(zhǔn)的生產(chǎn)服務(wù)器上。

許多WSGI兼容的http服務(wù)器可用于此目的。例如 –

  • waitress
  • paste.httpserver
  • CherryPy
  • uWSGI
  • gevent
  • mod_wsgi

我們已經(jīng)討論了如何使用Waitress服務(wù)器來(lái)托管一個(gè)Pyramid應(yīng)用程序。它可以在擁有公共IP地址的機(jī)器的80(HTTP)和443(HTTPS)端口上提供服務(wù)。

mod_wsgi

Apache服務(wù)器是一個(gè)流行的開(kāi)源HTTP服務(wù)器軟件,由Apache軟件基金會(huì)發(fā)布。它為互聯(lián)網(wǎng)上的大多數(shù)網(wǎng)絡(luò)服務(wù)器提供動(dòng)力。 mod_wsgi (由 Graham Dumpleton 開(kāi)發(fā))是一個(gè)Apache模塊,為在Apache上部署基于Python的web應(yīng)用程序提供了一個(gè)WSGI接口。

在本節(jié)中,我們將逐步解釋在Apache服務(wù)器上部署Pyramid應(yīng)用程序的過(guò)程。在這里,我們將使用XAMPP,一個(gè)流行的開(kāi)源Apache發(fā)行版。它可以從https://www.apachefriends.org/download.html 下載。

mod_wsgi模塊是通過(guò)PIP安裝程序安裝的。在安裝之前,將MOD_WSGI_APACHE_ROOTDIR環(huán)境變量設(shè)置為Apache可執(zhí)行文件所在的目錄。

C:\Python310\Scripts>set MOD_WSGI_APACHE_ROOTDIR=C:/xampp/apache
C:\Python310\Scripts>pip install mod_wsgi

接下來(lái),在命令終端運(yùn)行以下命令。

C:\Python310\Scripts>mod_wsgi-express module-config
LoadFile "C:/Python310/python310.dll"
LoadModule wsgi_module "C:/Python310/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
WSGIPythonHome "C:/Python310"

這些是mod_wsgi模塊的設(shè)置,要納入Apache的配置文件。打開(kāi)你的XAMPP安裝的 httpd.conf 文件,將上述命令行的輸出復(fù)制到其中。

接下來(lái),為我們的應(yīng)用程序創(chuàng)建一個(gè)虛擬主機(jī)配置。Apache在 httpd-vhosts.conf 文件中存儲(chǔ)虛擬主機(jī)信息,該文件在C:\XAMPP\Apache\conf\extra\文件夾中找到。打開(kāi)該文件并在其中添加以下幾行

<VirtualHost *>
   ServerName localhost:6543
   WSGIScriptAlias / e:/pyramid-env/hello/production.ini
   <Directory e:/pyramid-env/hello>
      Order deny,allow
      Allow from all
      Require all granted
   </Directory>
</VirtualHost>

這里假設(shè)使用Cookiecutter工具構(gòu)建了一個(gè)Hello Pyramid項(xiàng)目。這里使用的是生產(chǎn)環(huán)境中使用的PasteDeploy配置文件。

這個(gè)虛擬主機(jī)配置需要被納入Apache的httpd.conf文件中。這可以通過(guò)在文件中添加以下幾行來(lái)完成

# Virtual hosts
   Include conf/extra/httpd-vhosts.conf

我們現(xiàn)在必須將以下代碼保存為 pyramid.wsgi 文件,該文件返回Pyramid WSGI應(yīng)用程序?qū)ο蟆?/p>

from pyramid.paster import get_app, setup_logging
ini_path = 'e:/pyramid-env/hello/production.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')

執(zhí)行上述程序后,重新啟動(dòng)XAMPP服務(wù)器,我們應(yīng)該能夠在Apache服務(wù)器上運(yùn)行Pyramid應(yīng)用程序。

在Uvicorn上部署

Uvicorn是一個(gè)兼容ASGI的服務(wù)器(ASGI是指異步網(wǎng)關(guān)接口)。由于Pyramid是一個(gè)基于WSGI的Web框架,我們需要將WSGI應(yīng)用對(duì)象轉(zhuǎn)換為ASGI對(duì)象,借助于 asgiref.wsgi 模塊中定義的 WsgiToAsgi() 函數(shù)。

from asgiref.wsgi import WsgiToAsgi
from pyramid.config import Configurator
from pyramid.response import Response

def hello_world(request):
   return Response("Hello")

with Configurator() as config:
   config.add_route("hello", "/")
   config.add_view(hello_world, route_name="hello")
   wsgi_app = config.make_wsgi_app()

app = WsgiToAsgi(wsgi_app)

將上述代碼保存為app.py。用pip工具安裝Uvicorn。

pip3 install uvicorn

在ASGI模式下運(yùn)行Pyramid應(yīng)用程序。

uvicorn app:app

同樣,它也可以使用 daphne 服務(wù)器來(lái)提供服務(wù)。

daphne app:app


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)