Для запуска Django сервера можно использовать любой веб-сервер с поддержкой WSGI. В данной статье мы по шагам разберем процесс настройки веб-сервера для Django с использованием nginx и uWSGI. Те же принципы можно применить и при использовании другого веб-сервера.
Шаги для запуска веб-сервера для хостинга Django:
- Приобрести сервер
- Установить системные пакеты
- Подготовить виртуальное окружение
- Создать каталог и залить проект
- Установить необходимые зависимости
- Настроить веб-сервер и uWSGI
Если вы хотите разобраться в деталях настройки сервера для хостинга Python (Django) проекта — то я рекомендую прочесть статью http://itman.in/uwsgi-python-hosting/
Здесь же собраны только необходимые действия для запуска Django проекта на пустом Ubuntu сервере с использованием uWSGI.
Содержание
Выбор сервера для хостинга сайта
Приобретение сервера сейчас не составляет сложности. Для хостинга простого сайта подойдет любой виртуальный сервер (VPS), для более сложных могут понадобится собственные сервера.
В этой статье рассмотрен вариант настройки сервера с операционной системой Ubuntu,
Установите нужные системные пакеты
В начале нужно обновить установленные на сервере системные пакеты. В Ubuntu для этого нужно выполнить две команды:
apt-get update apt-get upgrade
Теперь можно установить необходимые для настройки сервера пакеты
apt-get install python-dev python-virtualenv git nginx
Создайте каталог и загрузите код проекта
Если ваш сервер используется для хостинга нескольких сайтов, то лучше выделить отдельный каталог для каждого проекта. Я использую каталог /data, в котором будут находится каталоги проектов.
mkdir -p /data/mysite; cd /data/mysite
Загрузка кода проекта на сервер
Если ваш проект в системе контроля версий GIT — это идеальный вариант — то достаточно выполнить git clone. Я использую для хранения исходного кода проекта Bitbucket:
git clone git@bitbucket.org:sharmazan/project.git
Если программный код у вас в виде архива файлов, то загрузите его на сервер с помощью scp. Под WIndows можно использовать программу WinSCP для подключения к Ubuntu серверу и загрузки файлов.
В дальнейшем предполагается следующая структура:
/data # Общий каталог для проектов на сервере -------- mysite # Каталог для сайта mysite -------- -------- conf # Конфигурационные файлы для веб-сервера -------- -------- project # Код проекта -------- -------- venv # Каталог для виртуального окружения
Подготовить виртуальное окружение
Сперва создадим каталог, в котором будет находится виртуальное окружение:
mkdir venv; cd venv
Теперь создадим виртуальное окружение командой virtualenv mysite:
virtualenv mysite New python executable in mysite/bin/python Installing distribute.............................................................................................................................................................................................done. Installing pip...............done.
Теперь в каталоге venv появился каталог mysite, в котором будут хранится версия Python и все установленные в виртуальное окружение приложения.
Для активации виртуального окружения нужно выполнить команду:
source /data/mysite/venv/mysite/bin/activate
После этого все Python приложения будут устанавливаться внутрь виртуального окружения, и не будут конфликтовать с системными версиями.
Если ваш сервер используется для хостинга только одного сайта, то можно обойтись без создания виртуального окружения.
Чтобы деактивировать виртуальное окружения и работать с системными библиотеками, выполните команду
deactivate
Установить необходимые зависимости
После активации виртуального окружения можно установить приложения, которые необходимы для запуска и работы сайта. Как правило их список приведен в файле requiments.txt в корневом каталоге проекта.
Для установки используйте
pip install -r requiments.txt
или установите приложения по одному:
pip install django
Настройка NGINX и uWSGI
Для запуска python приложения в качестве сайта нужен любой веб-сервер с поддержкой WSGI. В состав Django входит простой веб-сервер, который позволяет сразу просмотреть работу сайта в процессе разработки.
Но для работы на хостинге нужно более серьезное решение. Nginx — возможно лучший веб-сервер на момент написания статьи, уже установлен. Также нужно установить uWSGI. Перед установкой деактивируйте виртуальное окружение, чтобы пакет был установлен в системные каталоги и выполните:
sudo pip install uwsgi
Настройка вашего сайта в nginx
Создайте каталог /data/mysite/conf для хранение файлов конфигурации и разместите в нем файл mysite_nginx.conf следующего содержания:
# mysite_nginx.conf # the upstream component nginx needs to connect to # Если будете настраивать несколько django сайтов - измените название upstream upstream django { server unix:///data/mysite/mysite.sock; # for a file socket } # configuration of the server server { listen 80; # порт на котором будет доступен ваш сайт server_name .example.com; # доменное имя сайта charset utf-8; client_max_body_size 75M; # max upload size # Django media location /media { alias /data/mysite/project/media; } location /static { alias /data/mysite/project/static; } location / { uwsgi_pass django; include uwsgi_params; } }
Если файла /etc/nginx/uwsgi_params не существует, загрузите его с сайта https://github.com/nginx/nginx/blob/master/conf/uwsgi_params
Эта конфигурация сообщает nginx, что он должен сам отдать браузеру статические и загруженные пользователем файлы, доступные по адресу: www.example.com/static/filename.jpg или www.example.com/media/filename.jpg
Затем запрос будет передан для дальнейшей обработки Python программе через uWSGI, используя файл-сокет /data/mysite/mysite.sock.
Чтобы nginx использовал новый файл конфигурации, добавьте ссылку на него в каталог /etc/nginx/sites-enabled/
cd /etc/nginx/sites-enabled/ ln -s /data/mysite/conf/mysite_nginx.conf
Теперь нужно перезагрузить nginx командой
service nginx restart
или
/etc/init.d/nginx restart
Чтобы убедится, что ваш сайт работает, загрузите в каталог /data/mysite/project/media файл media.png и откройте в браузере http://mysite.com/media/media.png
Если картинка отобразится, значит nginx настроен корректно.
Настройка uWSGI
Создайте в каталоге /data/mysite/conf файл `mysite_uwsgi.ini`:
# mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /data/mysite/project # Django's wsgi file module = project.wsgi # the virtualenv (full path) home = /data/mysite/env/virtualenv # process-related settings # master master = true # maximum number of worker processes processes = 10 # the socket socket = /data/mysite/mysite.sock # ... with appropriate permissions - may be needed chmod-socket = 664 # clear environment on exit vacuum = true # account to start process uid = www-data gid = www-data # Output messages to log daemonize=/var/log/uwsgi/mysite.log
uWSGI будет выводить сообщения в файл /var/log/uwsgi/mysite.log. Для просмотра логов uwsgi можно использовать команду
tail -f /var/log/uwsgi/mysite.log
Чтобы uWSGI запускался при старте сервера, добавьте в файл /etc/rc.local строку
/usr/local/bin/uwsgi --ini /data/mysite/conf/mysite_uwsgi.ini
Перезагрузите сервер. После старта зайдя по адресу http://example.com — вы должны увидеть свой сайт.
502 bad gateway вышло
На каком этапе вы получили эту ошибку?
У меня тоже.
Ошибка возникала почти после каждого действия, но это из-за моей криворукости.
На последнем этапе не понял что делать, и тупо засунул весь свой проект на Django в папке /data/mysite/project
Сейчас ошибка 502…
Опишите по подробнее: как начать сам проект Django после всех действий?
В ближайшее время постараюсь записать видео по настройке хостинга (сервера) для Django
Я бы не рекомендовал начинать проект на сервере.
Обычно проект создается у себя на локальном компьютере, а затем его код переносится на сервер, как правило через систему контроля версий.
Если вам интересно подробнее узнать про старт проекта на Django, рекомендую посмотреть:
раздел по размещению проекта в курсе Djangogirls
http://tutorial.djangogirls.org/ru/deploy/index.html
уроки по Django:
http://itman.in/uroki-django/
Также сейчас у нас собирается новая группа для курса по Django, на котором мы разбираем все эти вопросы подробно:
http://itman.in/kurs-veb-programmirovaniya-s-nulya/
Где узнать про как загрузить django проект на nginx