Как развертываются веб-приложения, написанные на Python?

StackOverflow https://stackoverflow.com/questions/6319180

  •  27-10-2019
  •  | 
  •  

Вопрос

Я бывший разработчик PHP, и я изо всех сил пытаюсь смириться с мыслью, что я могу написать конфигурационный скрипт nginx, создать каталоги, запустить nginx + PHP-FPM, загрузить свой код и позволить ему работать.Я хочу начать играть с Python, чтобы разобраться в нем и начать создавать веб-приложения, но я немного не понимаю, как заставить все это работать.

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

Я наткнулся на сравнение веб-серверов Python, и похоже, что gevent - это то, что я ищу.Но как все это сочетается вместе?Нужен ли мне по-прежнему nginx (за исключением статического содержимого) в качестве обратного прокси-сервера или мне сделать что-то другое?Я сталкиваюсь со "слепотой новичка" и изо всех сил пытаюсь понять, как все это сочетается друг с другом.

Это было полезно?

Решение

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

Самый простой способ начать - просто создать исполняемый скрипт на python (.py) и поместить его в ваш cgi-bin.Затем вы можете получить к нему доступ через yourhost.com/cgi-bin/your_script.py.Простой в исполнении, удобный в использовании для обработки форм и прочего.

Некоторые серверы потребуют от вас перезапуска сервера, прежде чем он сможет "увидеть" новый скрипт .py, что может быть довольно неприятным для быстрой разработки.Это одна из причин, по которой многие люди используют промежуточное программное обеспечение, такое как WSGI.Вот как я изменил свою конфигурацию Apache, чтобы включить WSGI:

LoadModule wsgi_module libexec/apache2/mod_wsgi.so

<VirtualHost *:80>

WSGIScriptAlias /myapp /Library/WebServer/wsgi-scripts/views.wsgi

<Directory /Library/WebServer/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

views.wsgi - это просто скрипт на Python.Теперь, если я перейду на localhost / myapp / anything, он перенаправит на views.wsgi.Рекомендуется не помещать этот файл в свой корневой каталог, иначе вы не сможете ссылаться на статические файлы.

Простое приложение может выглядеть примерно так:

def application(environ, start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    return ['Hello world!']

environ содержит информацию о пути, по которому пользователь пытается перейти, поэтому идея заключается в том, что вы можете настроить список URL-адресов и указать вашей программе, какую функцию вызывать, на основе того, какой URL-адрес был запрошен.Что - то вроде этого:

 path      = environ.get('PATH_INFO','')
 if path.startswith('/helloworld'):
  # call your function that returns HTML code

Я еще мало имел дело с фреймворками (такими как Django), но я думаю, что одно из их преимуществ заключается в том, что они упрощают заполнение HTML-шаблонов с использованием любых переменных, передаваемых из вашего скрипта.Шаблонизатор Django позволяет включать переменные, а также логику (if, for и т.д.), Смешанные с вашим HTML.Когда функция вызывается, все, что она возвращает, отправляется клиенту.

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

Другие советы

С Python все немного иначе, чем с PHP.Хорошая особенность Python в том, что в стандарте определен общий интерфейс, который позволяет использовать различные приложения Python с одной стороны и разные веб-серверы с другой.Он называется WSGI, и вы можете прочитать о нем подробнее здесь

И здесь это хороший пост о развертывании приложения Django через ngnix.

Вам нужно какое-нибудь программное обеспечение, которое будет выполнять ваш pyton-код..

Вы можете попробовать 100%-ный стек python с торнадо

Или вы можете использовать Apache, Nginx или Lighttpd (я думаю, все написано на C), а затем использовать какой-нибудь мод (mod_wsgi, fgci или uWSGI), чтобы заставить эти веб-серверы запускать ваш код с помощью wsgi интерфейс.Этот второй вариант похож на то, что apache + some_mod делают для запуска вашего PHP-кода..

У меня есть производственные сайты, работающие на Apache + mod_wsgi и Nginx + uWSGI

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top