Настраиваем Django 1.6 с python 3.3 под Apache2 на Ubuntu 12.04 Server

от автора

Приятного времени суток!
Возникла необходимость настроить на своём сервере с PHP под Apache поддержку Django. Думал это будет не сложно и всё пройдёт как по маслу, но получилось не совсем так. Дело в том, что я решил настроить последнюю версию фраемворка с поддержкой третьего питона. Тут то и начали всплывать подводные камни.

Основные возникшие проблемы:

  • Версия питона на Ubuntu Server 12.04 — 2.7, а мне хотелось использовать третью версию
  • Django поддерживает версию питона начиная с 3.2, в то время как mod_wsgi в стабильной версии не поддерживает версию 3.2
  • Отсутствие полного руководства для решению этих проблем

Собственно в основном из-за третьего пункта я и провозился достаточно долгое время и впоследствии решил написать эту статью.

Приступим

Сразу скажу, что я исхожу из того, что apache2 и PHP уже стоит на сервере. Мы лишь добавляем функциональность к тому, что у нас уже есть.

Для начала я для себя решил, что не плохо бы поставить самую последнюю версию питона — 3.3 (этот сервер больше для учебных целей, а учиться хочется на всём самом новом), но в Ubuntu 12.04 по умолчанию можно поставить только 3.2. Для того, чтобы добавить поддержку последней версии добавим новый репозиторий:

sudo add-apt-repository ppa:fkrull/deadsnakes sudo apt-get update 

Устанавливаем питон 3.3 и питон 3.3-dev (он нам понадобится для компиляции mod_wsgi чуть позже):

sudo apt-get install python3.3 sudo apt-get install python3.3-dev 

Следующим шагом установим mod_wsgi, он нужен для связки питона и apache. Нам не подойдёт имеющийся в дистрибутиве, доступный по команде aptitude, так как он не поддерживает питон версии 3.3. Но разработчики модуля работают над этим и в репозитории уже есть необходимый код, так что нам остаётся только собрать последнюю версию из исходников и добавить при компиляции адрес до только что установленного питона:

hg clone https://code.google.com/p/modwsgi/ cd ./modwsgi/mod_wsgi ./configure --with-python=/usr/bin/python3.3 make sudo make install 

Теперь переходим к установке Django 1.6. Нам вновь не подходит установка из репозитория, так как там версия 1.3, что сильно меньше, чем 1.6 и, к тому же, не поддерживает питон 3, так что вновь устанавливаем не на прямую:

wget https://www.djangoproject.com/download/1.6/tarball/ tar xzvf index.html cd Django-1.6 sudo python setup.py install 

И так, теперь у нас есть предустановленный apache, установлен последний питон, джанго и теперь нам осталось всё это сконфигурировать. Для начала создадим папку для нашего сайта и джанго приложение:

mkdir  -p ~/public_html/domain1.com cd ~/public_html/domain1.com django-admin.py startproject MyProject 
Создаём virtual host и WSGI файл

Создаём virtual host:

sudo nano /etc/apache2/sites-available/domain1.com 

Внутри этого файла пишем:

<VirtualHost *:80>         ServerName domain1.com         ServerAlias www.domain1.com         WSGIScriptAlias / /home/username/public_html/domain1.com/MyProject.wsgi </VirtualHost> 

Создаём WSGI файл:

nano ~/public_html/domain1.com/MyProject.wsgi 

Записываем настройки для нашего сайта:

import os import sys	 sys.path.append('~/public_html/domain1.com/') os.environ['DJANGO_SETTINGS_MODULE'] = 'MyProject.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 
Настройка апача

Теперь нужно отредактировать файл httpd.conf:

sudo nano /etc/apache2/httpd.conf 

Пишем в него:

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so  WSGIScriptAlias / /home/username/public_html/domain1.com/MyProject/MyProject/wsgi.py WSGIPythonPath /home/username/public_html/domain1.com/MyProject  <Directory /home/username/public_html/domain1.com> <Files wsgi.py> Order deny,allow Require all granted </Files> </Directory> 

Почти готово

Включаем virtual host, перезагружаем апач:

sudo a2ensite domain1.com sudo service apache2 restart 

Сейчас ваш новый сайт должен запуститься и радостно вам сообщить, что: «It worked!», и: «Of course, you haven’t actually done any work yet. Next, start your first app by running python manage.py startapp [appname].».

Вот и всё! Надеюсь у вас это получится гораздо быстрее, чем получилось у меня. Приятного кодинга!

ссылка на оригинал статьи http://habrahabr.ru/post/201644/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *