Установка Django на VDS от FirstVDS.
Этот хостинг на мой взгляд сейчас самый оптимальный по цене/качеству.
Процедура установки описана для конфигурации Debian-6.0-i386-ispmanager.
Поскольку хостинг "поставляется с батарейками" и все необходимые компоненты для старта присутствуют, то и установка джанги проходит довольно быстро.
А самое приятное это то, что в конфигурации присутствует не только Апач, но и Nginx.
При включении Nginx система управления автоматом делает его вполне нормально настроенным front-end`ом на 80 порту, а Апач переводит back-end`ом на 81. Т.е никаких танцев с конфигами нам не предстоит - спасибо хостеру.
ВНИМАНИЕ! с 03.02.2014 Панель управления ISPmanager Lite станет платной в связи с этим этот пост становится менее актуальным для начинающих джанговодов. Советую обратить внимание на вариант без панели управления: FirstVDS: Debian 7 Wheezy + NGINX + Django и другие. Вариант конечно сложнее, но добавляет свободы и плюсов в карму.
Баннер справа и ссылки на хостера под статьёй, дают 25% скидку при покупке VDS.
Также есть промокод, но по условиям партнерской программы, я должен его
распространять лично и оффлайн.
Итак начнем.
1. Скачиваем и ставим Django 1.4.2:
$ wget http://www.djangoproject.com/m/releases/1.4/Django-1.4.2.tar.gz
$ tar xzvf Django-1.4.2.tar.gz
$ cd Django-1.4.2
$ sudo python setup.py install
Проверяем как встало:
$ python -c "import django; print django.VERSION;"
Должны получить такое: (1, 4, 2, 'final', 0)
Удаляем ненужный архив Django-1.4.2.tar.gz и распакованную Джангу
2. Cтавим mod_wsgi:
$ apt-get install libapache2-mod-wsgi
3. Идем в ISPmanager и смотрим какая директория выделена нам под проект.
Или создаем доменное имя с WWW доменом под наш проект.
Получим путь к директории вида:
/var/www/myuser/data/www/myuser.fvds.ru
4. Создаем наш проект и необходимые директории:
$ cd /var/www/myuser/data/www/
$ django-admin.py startproject myuser_fvds_ru
Название с точками как формирует ISPmanager не дружит с обозначением модулей в Python.
Поэтому прийдется использовать имена проектов без точек.
Корректируем название модуля для корректного импорта:
$ sudo perl -pi -e 's/myuser_fvds_ru.urls/urls/g' myuser_fvds_ru/settings.py
директория для настроек wsgi:
$ mkdir -p /var/www/myuser/data/www/myuser_fvds_ru/deploy
директории для статики:
$ mkdir -p /var/www/myuser/data/www/myuser_fvds_ru/public
$ mkdir -p /var/www/myuser/data/www/myuser_fvds_ru/public/static
делаем символическую ссылку на статику админки Django:
$ sudo ln -s /usr/local/lib/python2.6/dist-packages/django/contrib/admin/static/admin /var/www/myuser/data/www/myuser_fvds_ru/public/static/admin
директория для логов:
$ mkdir -p /var/www/myuser/data/www/myuser_fvds_ru/logs
5. Настраиваем Апач:
Это можно делать или через конфиг WWW домена в ISP менеджере или непосредственно в файле настроек апача /etc/apache2/apache2.conf
Открываем наш конфиг или находим их в файле настройки апача и правим его для работы с django.
Должно получиться что-то подобное:
<VirtualHost XX.XX.XX.XX:81>
# Описание сервера
ServerName myuser.fvds.ru
DocumentRoot /var/www/myuser/data/www/myuser_fvds_ru
SuexecUserGroup myuser myuser
ServerAlias www.myuser.fvds.ru
ServerAdmin webmaster@myuser.fvds.ru
# Логи
CustomLog /var/www/myuser/data/www/myuser_fvds_ru/logs/apache_access.log combined
ErrorLog /var/www/myuser/data/www/myuser_fvds_ru/logs/apache_error.log
# wsgi-обработчик
WSGIScriptAlias / /var/www/myuser/data/www/myuser_fvds_ru/deploy/django.wsgi
# Параметры запуска wsgi (myuser — ник пользователя с доступом)
WSGIDaemonProcess myuser-site user=myuser group=myuser home=/var/www/myuser/data/www/myuser_fvds_ru/ \
processes=2 threads=4 maximum-requests=100 display-name=apache-myuser-wsgi
WSGIProcessGroup myuser-site
# Статические файлы для django-админки
Alias "/media-admin/" "/var/www/myuser/data/www/myuser_fvds_ru/public/static/admin"
# Статические файлы проекта
Alias "/static/" "/var/www/myuser/data/www/myuser_fvds_ru/public/static/"
<Location "/public/static/">
SetHandler None
</Location>
# Медиа файлы проекта
Alias "/media/" "/var/www/myuser/data/www/myuser_fvds_ru/public/media/"
<Location "/public/media/">
SetHandler None
</Location>
</VirtualHost>
В конфиге NGINX необходимо заменить myuser.fvds.ru на myuser_fvds_ru
6. Создаем файл:
/var/www/myuser/data/www/myuser_fvds_ru/deploy/django.wsgi
для связки wsgi нашего проекта и апача:
#/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys, os.path
# В python path добавляется директория проекта
sys.path.append("/var/www/myuser/data/www/myuser_fvds_ru/")
sys.stdout = sys.stderr
sys.path.insert(0, os.path.dirname(__file__))
# Установка файла настроек
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
# Запуск wsgi-обработчика
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
7. Перезапускаем апач с nginx и проверяем нашу работу:
$ /etc/init.d/apache2 restart
$ /etc/init.d/nginx restart
Если мы не допустили ошибок то сервер должен успешно перезапуститься. Может при этом пожаловаться на то, что не сконфигурирован виртуальный сайт по адресу *.80 но нам это пока не нужно.
Также должны поменяться пути к WWW домену в ISPmanager.
Смотрим наш сайт через браузер. Должны увидеть стандартную страницу приветствия Джанги:
It worked!
Congratulations on your first Django-powered page.
...
P.S.
Если вы делали директории как я из под root то для корректной работы django необходимо назначить владельца директории проекта:
$ chown -R myuser:myuser /var/www/myuser/data/www/myuser_fvds_ru/
И конечно нарезать права 755 для директорий, 644 для файлов:
$ chmod 755 /var/www/myuser/data/www/myuser.fvds.ru/*
$ find /var/www/myuser/data/www/myuser_fvds_ru/ -type f -exec chmod 644 {} \;
Все это можно сделать и из системы управления сервером, но мы же не ищем легких путей :о)
P.P.S
Поправил информацию от с учетом последнего опыта общения с FirstVDS.
Теперь проектами сайтов можно управлять средствами ISPmanager. Хотя пути конечно стали менее удобными чем в /home/.
Другие статьи об установке Django:
- Debian 8 + Python 3.5 + PostgreSQL + NGINX + virtualenv + Django
- FirstVDS: Debian 7 Wheezy + NGINX + Django и другие
- Debian 7 Wheezy + NGINX + UWSGI + Viartualenv + Django
- Django + WAMP без суеты
- Ставим LAMP для разработки на рабочей станции Ubuntu 11.04
Комментарии
1) а зачем вообще в описываемой схеме нужен nginx?
2) Если на vds несколько сайтов (несколько доменов и каждый привязан к своей папке на vds), то можно ли сделать так, чтобы на одном сайте был джанго, а остальные оставались на php?
Чето не догоняю как это сделать?
При установке django на FirstVDS, манипуляции с данными конфигами минимальны и касаются только путей.
Все остальные вопросы по конфигам nginx, включая оптимизцию, выходят за рамки данного поста.
2) По идее можно. Поскольку ISPmanager и phpmyadmin в составе его батареек работают без проблем. Могу только предполагать, но скорее всего все упирается в настройки отдельных сайтов в апаче. Смотрите форум, FirstVDS там помоему такое уже обсуждали.