CherryPy - Distribuzione dell'applicazione

Questo capitolo si concentrerà maggiormente sull'applicazione basata su CherryPy SSL abilitata tramite il server HTTP CherryPy integrato.

Configurazione

Ci sono diversi livelli di impostazioni di configurazione richieste in un'applicazione web:

  • Web server - Impostazioni collegate al server HTTP

  • Engine - Impostazioni associate all'hosting del motore

  • Application - Applicazione che viene utilizzata dall'utente

Distribuzione

La distribuzione dell'applicazione CherryPy è considerata un metodo abbastanza semplice in cui tutti i pacchetti richiesti sono disponibili dal percorso del sistema Python. Nell'ambiente ospitato sul Web condiviso, il server Web risiederà nel front-end che consente al provider host di eseguire le azioni di filtro. Il server front-end può essere Apache olighttpd.

Questa sezione presenterà alcune soluzioni per eseguire un'applicazione CherryPy dietro i server web Apache e lighttpd.

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

SSL (Secure Sockets Layer)può essere supportato nelle applicazioni basate su CherryPy. Per abilitare il supporto SSL, devono essere soddisfatti i seguenti requisiti:

  • Avere il pacchetto PyOpenSSL installato nell'ambiente dell'utente
  • Avere un certificato SSL e una chiave privata sul server

Creazione di un certificato e una chiave privata

Affrontiamo i requisiti del certificato e della chiave privata -

  • Per prima cosa l'utente ha bisogno di una chiave privata -
openssl genrsa -out server.key 2048
  • Questa chiave non è protetta da password e quindi ha una protezione debole.
  • Verrà emesso il seguente comando:
openssl genrsa -des3 -out server.key 2048
  • Il programma richiederà una passphrase. Se la tua versione di OpenSSL ti consente di fornire una stringa vuota, fallo. Altrimenti, inserisci una passphrase predefinita e quindi rimuovila dalla chiave generata come segue:

openssl rsa -in server.key -out server.key
  • La creazione del certificato è la seguente:
openssl req -new -key server.key -out server.csr
  • Questo processo ti chiederà di inserire alcuni dettagli. Per fare ciò, deve essere emesso il seguente comando:

openssl x509 -req -days 60 -in server.csr -signkey
server.key -out server.crt
  • Il certificato appena firmato sarà valido per 60 giorni.

Il codice seguente mostra la sua implementazione:

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()

Il passo successivo è avviare il server; se hai successo, vedrai il seguente messaggio sullo schermo:

HTTP Serving HTTPS on https://localhost:8443/