CherryPy - 應用程式的部署
本章將更多地關注通過內建的 CherryPy HTTP 伺服器啟用基於 CherryPy 的應用程式的 SSL。
組態
Web 應用程式中需要不同級別的配置設定 -
-
Web 伺服器 - 連結到 HTTP 伺服器的設定
-
引擎 - 與託管引擎相關的設定
-
應用程式 - 使用者使用的應用程式
部署
CherryPy 應用程式的部署被認為是一個非常簡單的方法,可以從 Python 系統路徑獲得所有必需的包。在共享的 Web 託管環境中,Web 伺服器將駐留在前端,允許主機提供程式執行篩選操作。前端伺服器可以是 Apache
或 lighttpd
。
本節將介紹一些在 Apache 和 lighttpd Web 伺服器後面執行 CherryPy 應用程式的解決方案。
cherrypy
def setup_app():
class Root:
@cherrypy.expose
def index(self):
# Return the hostname used by CherryPy and the remote
# caller IP address
return "Hello there %s from IP: %s " %
(cherrypy.request.base, cherrypy.request.remote.ip)
cherrypy.config.update({'server.socket_port': 9091,
'environment': 'production',
'log.screen': False,
'show_tracebacks': False})
cherrypy.tree.mount(Root())
if __name__ == '__main__':
setup_app()
cherrypy.server.quickstart()
cherrypy.engine.start()
SSL
基於 CherryPy 的應用程式可以支援 SSL。要啟用 SSL 支援,必須滿足以下要求 -
- 在使用者的環境中安裝 PyOpenSSL 包
- 在伺服器上擁有 SSL 證書和私鑰
建立證書和私鑰
讓我們來處理證書和私鑰的要求 -
- 首先,使用者需要私鑰 -
openssl genrsa -out server.key 2048
- 此金鑰不受密碼保護,因此具有弱保護。
- 將發出以下命令 -
openssl genrsa -des3 -out server.key 2048
- 該程式將需要密碼。如果你的 OpenSSL 版本允許你提供空字串,請執行此操作。否則,輸入預設密碼,然後將其從生成的金鑰中刪除,如下所示 -
openssl rsa -in server.key -out server.key
- 證書的製作如下 -
openssl req -new -key server.key -out server.csr
- 此過程將要求你輸入一些詳細資訊。為此,必須發出以下命令 -
openssl x509 -req -days 60 -in server.csr -signkey
server.key -out server.crt
- 新簽署的證書有效期為 60 天。
以下程式碼顯示了其實現 -
import cherrypy
import os, os.path
localDir = os.path.abspath(os.path.dirname(__file__))
CA = os.path.join(localDir, 'server.crt')
KEY = os.path.join(localDir, 'server.key')
def setup_server():
class Root:
@cherrypy.expose
def index(self):
return "Hello there!"
cherrypy.tree.mount(Root())
if __name__ == '__main__':
setup_server()
cherrypy.config.update({'server.socket_port': 8443,
'environment': 'production',
'log.screen': True,
'server.ssl_certificate': CA,
'server.ssl_private_key': KEY})
cherrypy.server.quickstart()
cherrypy.engine.start()
下一步是啟動伺服器; 如果你成功,你將在螢幕上看到以下訊息 -
HTTP Serving HTTPS on https://localhost:8443/