CherryPy - Развертывание приложения
В этой главе основное внимание будет уделено приложению на основе CherryPy. SSL, включенному через встроенный HTTP-сервер CherryPy.
Конфигурация
В веб-приложении требуются разные уровни настроек конфигурации -
Web server - Настройки, связанные с HTTP-сервером
Engine - Настройки связанные с хостингом движка
Application - Приложение, которым пользуется пользователь
Развертывание
Развертывание приложения 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 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/