Цель домашнего задания подготовить инфраструктуру для будущего проекта и научиться настраивать веб-серверы. Внимание! Вместо pupkin используйте свою фамилию.
Установите gunicorn
$ pip install gunicorn
Затем, пользуясь документацией Gunicorn, напишите конфигурационный файл который запустит ваше приложение askme_pupkin.wsgi с двумя процессам-воркерами.
Отдельно от вашего приложение создать простой WSGI-скрипт (функция или класс). Этот скрипт должен:
- зупускаться с помощью gunicorn;
- выводить список переданных GET и POST параметров;
- выполняеться при запросе localhost:8081;
- работать без использования Django.
Необходимо настроить nginx следующим образом. Все файлы с URL начинающимся с /uploads/ отдаются из ask_pupkin/uploads. Все файлы с расширением (.js .css .jpeg и т.д) — из директории ask_pupkin/static. Файлы должны отдаваться c заголовками, кэширующими файлы на стороне браузера. Файлы должны сжиматься на сервере для уменьшения размера передаваемых файлов. Размер конфига nginx не должен превышать 50 строк. Полученную конфигурацию необходимо запустить и проверить, для этого нужно разместить какой-либо файл (например sample.html) в директории static и загрузить его с помощью браузера localhost/sample.html.
- Настроить nginx для проксирования всех нестатических запросов (URL без расширения, например / или /login/) на gunicorn;
- Настроить upstream;
- Настроить proxy_cache и проверить его работу.
С помощью утилиты Apache Benchmark (ab, идет в комплекте с Apache, для Ubuntu пакет apache2-utils) или wrk сравните производительность nginx (отдача статики) и gunicorn (запуск wsgi скриптов).
Необходимо провести пять измерений:
- Отдача статического документа напрямую через nginx;
- Отдача статического документа напрямую через gunicorn
- Отдача динамического документа напрямую через gunicorn;
- Отдача динамического документа через проксирование запроса с nginx на gunicorn;
- Отдача динамического документа через проксирование запроса с nginx на gunicorn, при кэшировние ответа на nginx (proxy cache).
Размеры всех документов должны быть примерно одинаковыми. По результатам измерений необходимо ответить на вопросы:
- Насколько быстрее отдается статика по сравнению с WSGI?
- Во сколько раз ускоряет работу proxy_cache?
Результат выполнения домашнего задания является:
- директория с созданным проектом;
- конфиг nginx;
- конфиг gunicorn;
- результаты нагрузочного тестирования (вывод утилиты ab/wrk).
Настройка nginx для отдачи статического контента - 5:
- общее - 3;
- локейшен /uploads/ приоритетнее статики - 1;
- проксирование - 1.
Настройка gunicorn для запуска wsgi приложений - 2:
- общее - 2.
Создание WSGI-приложения - 2:
- наличие запускаемого скрипта - 1
- правильное отображение списка GET и POST параметров - 1.
Оценка производительности nginx и gunicorn - 5:
- статический документ напрямую через nginx и напрямую через gunicorn - 2;
- динамический документ напрямую через gunicorn - 1;
- динамический документ через nginx с проксирование на gunicorn, с кэшом и без кэша (proxy_cache) - 2;