Подтвердить что ты не робот

Как вы развертываете свое приложение WSGI? (и почему это лучший способ)

Развертывание приложения WSGI. Есть много способов обмануть этого кота. В настоящее время я использую apache2 с mod-wsgi, но я вижу некоторые потенциальные проблемы с этим.

Итак, как это можно сделать?

  • Apache Mod-wsgi (другой mod-wsgi, похоже, не стоит того)
  • Веб-сервер Pure Python, например, паста, вишня, нерест, Twisted.web
  • как 2, но с обратным прокси от nginx, apache2 и т.д., с хорошей статической обработкой файлов.
  • Преобразование в другой протокол, такой как FCGI с мостом (например, Flup) и запуск на обычном веб-сервере.

Далее

Я хочу знать, как вы это делаете, и почему это лучший способ сделать это. Я бы полностью любил, чтобы рассказать мне о деталях о том, что и что, о конкретных приложениях и т.д. Я подниму любой безумный ответ.

4b9b3361

Ответ 1

Как всегда: это зависит; -)

Когда мне не нужны какие-либо функции apache, я собираюсь использовать чистый веб-сервер python, например, вставку и т.д. Какой именно вопрос зависит от вашего приложения, я думаю, и его можно решить, выполнив некоторые тесты. Я всегда хотел кое-что сделать, но так и не пришел. Я предполагаю, что у Spawning могут быть некоторые преимущества в использовании неблокирующего IO из коробки, но у меня были проблемы с ним из-за его исправления.

Вы всегда можете поставить лак спереди, а также, конечно.

Если требуется Apache, я обычно собираюсь с решением 3, чтобы я мог поддерживать процессы отдельно. Вы также можете легко перемещать процессы на другие серверы и т.д. Мне просто нравится держать вещи в отдельности.

Для статических файлов я использую сейчас отдельный сервер для проекта, который просто служит для статических изображений /css/js. Я использую lighttpd в качестве веб-сервера, который обладает большой производительностью (в этом случае у меня больше нет лака).

Другим полезным инструментом является supervisord для контроля и мониторинга этих служб.

Я также использую buildout для управления моими развертываниями и изолированными программными программами (вместе с virtualenv).

Ответ 2

Абсолютно проще всего развертывать CherryPy. Ваше веб-приложение также может стать автономным веб-сервером. CherryPy также довольно быстрый сервер, учитывая, что он написан на чистом Python. С учетом сказанного это не Апач. Таким образом, я считаю, что CherryPy является хорошим выбором для веб-приложений с более низким объемом.

Кроме этого, я не думаю, что есть правильный или неправильный ответ на этот вопрос. На технологиях, о которых вы говорите, было построено множество сайтов большого объема, и я не думаю, что вы можете ошибаться ни в одном из этих способов (хотя я скажу, что согласен с mod-wsgi, который не доходит до табака на каждом сервер не-apache).

Кроме того, я использовал isapi_wsgi для развертывания приложений python в IIS. Это менее идеальная настройка, но она работает, и вы не всегда можете выбирать, когда будете жить в мире, ориентированном на окна.

Ответ 3

Я бы очень хотел, чтобы ты меня рассказывал с подробностями о Whats и Whys, конкретных приложениях и т.д.

Хо. Ну, вы просили об этом!

Как и Даниэль, я лично использую Apache с mod_wsgi. Это еще достаточно новое, что развертывание его в некоторых средах может быть борьбой, но если вы все-таки собираете все самостоятельно, это довольно легко. Я нашел его очень надежным, даже в ранних версиях. Подкрепление Грэма Дамплтона за то, что он сам по себе контролирует его.

Однако для меня важно, чтобы приложения WSGI работали на всех возможных серверах. На данный момент в этой области есть немного дыры: у вас есть стандарт WSGI, рассказывающий вам, что делает WSGI (приложение), но нет стандартизации развертывания; нет единого способа сообщить веб-серверу, где найти приложение. Также нет стандартизованного способа перезагрузки сервера при его обновлении.

Подход, который я принял, заключается в том, чтобы поставить:

  • вся логика приложения в модулях/пакетах, предпочтительно в классах

  • все настраиваемые для веб-сайта настройки выполняются путем подклассификации основного приложения и переопределения элементов

  • все параметры развертывания для сервера (например, подключение к базе данных factory, настройки ретрансляции почты) в качестве параметров класса __init __()

  • один верхний уровень application.py script, который инициализирует класс Application с правильными параметрами развертывания для текущего сервера, затем запускает приложение таким образом, что он может работать в качестве CGI script, mod_wsgi WSGIScriptAlias ​​(или Пассажир, который, по-видимому, работает одинаково) или может быть связан с командной строкой

  • вспомогательный модуль, который заботится о проблемах с развертыванием и позволяет перезагружать приложение, когда модули, на которые приложение использует изменения

Итак, как выглядит application.py в конце, это что-то вроде:

#!/usr/bin/env python

import os.path
basedir= os.path.dirname(__file__)

import MySQLdb
def dbfactory():
    return MySQLdb.connect(db= 'myappdb', unix_socket= '/var/mysql/socket', user= 'u', passwd= 'p')

def appfactory():
    import myapplication
    return myapplication.Application(basedir, dbfactory, debug= False)

import wsgiwrap
ismain= __name__=='__main__'
libdir= os.path.join(basedir, 'system', 'lib')
application= wsgiwrap.Wrapper(appfactory, libdir, 10, ismain)

wsgiwrap.Wrapper проверяет каждые 10 секунд, чтобы узнать, обновлен ли какой-либо из модулей приложения в libdir, и если это так, то некоторые неприятные магии sys.modules позволяют надежно разгрузить их. Затем appfactory() будет вызван снова, чтобы получить новый экземпляр обновленного приложения.

(Вы также можете использовать инструменты командной строки, такие как

./application.py setup
./application.py daemon

для запуска любых перехватчиков настроек и фоновых задач, предоставляемых вызываемым приложением, - немного похоже на работу distutils. Он также отвечает на запуск/останов/перезапуск, как init script.)

Другим трюком, который я использую, является установка параметров развертывания для нескольких серверов (разработка/тестирование/производство) в том же приложении application.py script и sniff 'socket.gethostname(), чтобы решить, какой набор параметров для конкретного сервера для использования.

В какой-то момент я могу упаковать wsgiwrap и высвободить его (возможно, под другим именем). Тем временем, если вы заинтересованы, вы можете увидеть версию развития dogfood на http://www.doxdesk.com/file/software/py/v/wsgiwrap-0.5.py.

Ответ 4

Обратный прокси Nginx и статический общий доступ к файлам + XSendfile + uploadprogress_module. Ничто не сравнится с этой целью.

На стороне WSGI либо Apache + mod_wsgi, либо cherrypy server. Мне нравится использовать сервер wergi wsgi для приложений на серверах с меньшим объемом памяти и меньше запросов.

Рассуждение:

Я сделал тесты с различными инструментами для различных популярных решений.

У меня больше опыта работы с TCP/IP более низкого уровня, чем с веб-разработкой, особенно с реализациями HTTP. Я уверен, что могу распознать хороший http-сервер, чем я могу распознать хорошую веб-инфраструктуру.

Я знаю, что Twisted намного больше, чем Django или Pylons. HTTP-стек в Twisted все еще не соответствует этому, но он будет там.

Ответ 5

Я использую Google App Engine для приложения, которое я разрабатываю. Он запускает приложения WSGI. Здесь несколько бит информации об этом.

Это первое веб-приложение, над которым я когда-либо работал, поэтому у меня нет основы для сравнения, но если вы поклонник Google, вам может понадобиться изучить его. Мне было очень весело использовать его как основу для обучения.

Ответ 6

TurboGears (2.0)

TurboGears 2.0 оставляет бета-версию в течение следующего месяца (был в ней достаточно времени). 2.0 улучшается на 1.0 серии и пытается дать вам лучший в своем классе стек WSGI, поэтому для вас вы можете выбрать по умолчанию, если вам нужна наименьшая проблема.

у него есть инструменты tg* для тестирования и развертывания в серии 1.x, но теперь они преобразуются в эквиваленты paster в серии 2.0, которые, похоже, знакомы, если вы экспериментировали с pylons.

tg-admin quickstart —> paster quickstart
tg-admin info —> paster tginfo
tg-admin toolbox –> paster toolbox
tg-admin shell –> paster shell
tg-admin sql create –> paster setup-app development.ini

Пилоны

Вы бы хотели быть более гибкими в своем стеке WSGI (выбор ORM, выбор шаблона, выбор формы), Pylons становится консолидированным выбором. Это был бы мой рекомендуемый выбор, поскольку он предлагает отличную документацию и позволяет экспериментировать с различными компонентами.

С удовольствием работать в результате и работать под Apache (производственное развертывание) или автономно (полезно для тестирования и экспериментальной стадии).

так что вы можете сделать оба с Pylons:

  • 2 для этапа тестирования (python автономный)

  • 4 для масштабируемых производственных целей (FastCGI, предполагая, что выбранная вами база данных может не отставать)

Интерфейс администратора Pylons очень похож на TurboGears. Здесь игрушка автономный пример:

$ paster create -t pylons helloworld
$ cd helloworld
$ paster serve --reload development.ini

для развертывания производственного класса вы можете обратиться к руководству по настройке Apache + FastCGI + mod_rewrite, которое доступно здесь. это будет соответствовать большинству потребностей.

Ответ 7

Apache httpd + mod_fcgid с помощью web.py(который является приложением wsgi).

Работает как шарм.

Ответ 8

Мы используем чистую пасту для некоторых наших веб-сервисов. Его легко развернуть (с нашим внутренним механизмом развертывания, мы не используем Paste Deploy или что-то в этом роде), и приятно минимизировать разницу между производственными системами и тем, что работает на рабочих станциях разработчиков. Предостережение: мы не ожидаем низкой латентности из самой Пасты из-за тяжелого характера наших запросов. В некотором сыром бенчмаркинге мы не получали фантастических результатов; это только закончилось тем, что было спорным из-за расхода нашего типичного обработчика запросов. До сих пор он работал нормально.

Статические данные обрабатывались полностью отдельными (и несколько "органически" выращенными) стеками, включая использование S3, Akamai, Apache и IIS различными способами.

Ответ 9

Apache + mod_wsgi,

Простой, чистый. (только четыре строки конфигурации веб-сервера), легко для других sysadimns, чтобы их вокруг.