Легкий веб-сервер для Django с небольшими рабочими нагрузками

Я пишу небольшое приложение в Django, которое будет использоваться в качестве интерфейса администратора для набора приложений, обычно настраиваемых с помощью текстовых файлов. Это не будет иметь большого значения (анализ пользовательского ввода, преобразование записей БД в плоские файлы и отображение красивых таблиц с информацией) и, скорее всего, будет использоваться максимум одним пользователем за раз.

Единственным ограничением является то, что сервер, на котором он будет работать, имеет низкую производительность (Pentium M 1,8 ГГц, 512 МБ ОЗУ), и я хочу, чтобы большая часть его вычислительной мощности была доступна для управляемых приложений, а не интерфейса управления. Для записи я использую CentOS 5.

Какой веб-сервер я могу использовать? Пока что я собрал следующие варианты и мнения:

  • Apache может быть большим для такого рода развертывания
  • lighttpd + FCGI - может быть нестабильным
  • lighttpd/nginx как rev proxy + веб-сервер django - мне кажется странным, так как я думал, что веб-сервер django предназначен для целей разработки / отладки

Можете ли вы порекомендовать мне хорошее решение для такой среды? Я не сосредоточен на больших рабочих нагрузках или параллелизме (как большинство людей, задающих подобные вопросы), я просто хочу, чтобы он использовал как можно меньше оперативной памяти и процессорного времени в режиме ожидания или для отдельных сеансов.

Кроме того, обратите внимание, что у меня нет большого опыта в развертывании веб-серверов, обратных прокси-серверов и т. Д. (Хотя я знаю основы и могу разобраться с Google), поэтому я был бы очень признателен за помощь от людей, которые имеют опыт с такого рода проблемами.

5 ответов

Решение

Одно из самых простых решений для установки, которое, на мой взгляд, работает достаточно хорошо, nginx вместе с gunicorn,

Для "gunicorn" вам нужно всего лишь сделать что-то вроде:

$ cd path/to/yourdjangoproject
$ gunicorn_django --workers=4

И довольно стандартная настройка nginx для этого

server {
    ...

    location / {
        proxy_pass http://127.0.0.1:8000;
        break;
    }
}

Конечно, лучше, чем использовать fcgi и зависеть от флюпа, но если вы не против испачкать руку, я бы посоветовал вам попробовать nginx+uwsgi как предложил zaub3r3r.

Учитывая ваш недостаток опыта и великолепный интерфейс управления, я рекомендую Cherokee. Быстрый, простой в использовании веб-сервер со встроенным мастером настройки проекта Django.

Используйте Apache и отключите ненужные модули и убедитесь, что вы не запускаете слишком много процессов для начала.

Идея о том, что ядро ​​Apache в некотором смысле тяжеловесное, является своего рода мифом - он может быть таким же громоздким или легким, как вам нужно, благодаря модульному дизайну.

Это дает дополнительное преимущество работы с существующей системой распространения и обновления дистрибутива.

PS: ОС с радостью заменяет неиспользуемые страницы на диск, когда приложения запущены, но интерфейс администратора веб-сервера не доступен. Доверьтесь ОС, чтобы она оставалась резидентной в том, что ей нужно, когда это необходимо

PPS: 2 ГБ DIMM стоит меньше, чем время, потраченное на ввод этого запроса. Потратьте некоторое время, чтобы провести метаанализ вашего вопроса.

Решением non plus ultra, на мой взгляд, является nginx+uwsgi (его немного сложнее настроить, потому что вам нужно скомпилировать его самостоятельно и настроить больше). Самый простой и рекомендуемый - Apache+mod_wsgi. Я думаю, что хорошо настроенный Apache2 с mod_wsgi - правильный выбор для вас.

Джанго (Python) + веб-сервер? Тогда, возможно, взгляните и на Торнадо (хотя он может справиться гораздо больше, чем вы хотите).

Другие вопросы по тегам