Легкий веб-сервер для 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) + веб-сервер? Тогда, возможно, взгляните и на Торнадо (хотя он может справиться гораздо больше, чем вы хотите).