Pull to refresh

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

Reading time3 min
Views28K
Приятного времени суток!
Возникла необходимость настроить на своём сервере с 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].».

Вот и всё! Надеюсь у вас это получится гораздо быстрее, чем получилось у меня. Приятного кодинга!
Tags:
Hubs:
Total votes 18: ↑8 and ↓10-2
Comments10

Articles