Приятного времени суток!
Возникла необходимость настроить на своём сервере с 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].».
Вот и всё! Надеюсь у вас это получится гораздо быстрее, чем получилось у меня. Приятного кодинга!
Автор: hasys