Учебники

CherryPy — Развертывание приложения

В этой главе основное внимание будет уделено SSL-приложению на основе CherryPy, включенному через встроенный HTTP-сервер CherryPy.

конфигурация

В веб-приложении требуются разные уровни настроек конфигурации —

  • Веб-сервер — настройки, связанные с HTTP-сервером

  • Engine — Настройки, связанные с хостингом движка

  • Приложение — приложение, которое используется пользователем

Веб-сервер — настройки, связанные с HTTP-сервером

Engine — Настройки, связанные с хостингом движка

Приложение — приложение, которое используется пользователем

развертывание

Развертывание приложения CherryPy считается довольно простым способом, когда все необходимые пакеты доступны по системному пути Python. В общедоступной веб-среде веб-сервер будет находиться во внешнем интерфейсе, что позволяет провайдеру хоста выполнять действия по фильтрации. Внешний сервер может быть Apache или lighttpd .

В этом разделе будет представлено несколько решений для запуска приложения CherryPy на веб-серверах Apache и 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) может поддерживаться в приложениях на основе CherryPy. Чтобы включить поддержку SSL, должны быть выполнены следующие требования:

  • Установите пакет PyOpenSSL в среде пользователя
  • Наличие SSL-сертификата и закрытого ключа на сервере

Создание сертификата и закрытого ключа

Давайте разберемся с требованиями сертификата и закрытого ключа —

  • Сначала пользователю нужен закрытый ключ —
openssl genrsa -out server.key 2048
  • Этот ключ не защищен паролем и поэтому имеет слабую защиту.
  • Следующая команда будет выполнена —
openssl genrsa -des3 -out server.key 2048
  • Программа потребует пароль. Если ваша версия OpenSSL позволяет вам предоставить пустую строку, сделайте это. В противном случае введите парольную фразу по умолчанию, а затем удалите ее из сгенерированного ключа следующим образом:

Программа потребует пароль. Если ваша версия 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 дней.

Вновь подписанный сертификат будет действителен в течение 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()

Следующим шагом является запуск сервера; Если вы добились успеха, вы увидите следующее сообщение на вашем экране —