Django + Apache2 + Nginx + mod_wsgi на FirstVDS

11645 4

Установка 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 

Комментарии

12 июля 2013 г. 20:07 owlman
1) Nginx работает фронтэнд-сервером. Апач бэкэнд-сервером. Так быстрее работает.

2) По идее можно. Поскольку ISPmanager и phpmyadmin в составе его батареек работают без проблем. Могу только предполагать, но скорее всего все упирается в настройки отдельных сайтов в апаче. Смотрите форум, FirstVDS там помоему такое уже обсуждали.
11 июля 2013 г. 1:27 хб
поясните пожалуйста, не могу понять,


1) а зачем вообще в описываемой схеме нужен nginx?

2) Если на vds несколько сайтов (несколько доменов и каждый привязан к своей папке на vds), то можно ли сделать так, чтобы на одном сайте был джанго, а остальные оставались на php?

Чето не догоняю как это сделать?
25 декабря 2012 г. 8:28 owlman
Конфиги nginx на FirstVDS серверах формируются автоматом и врядли подойдут в чистом виде не пользователям этого провайдера.
При установке django на FirstVDS, манипуляции с данными конфигами минимальны и касаются только путей.
Все остальные вопросы по конфигам nginx, включая оптимизцию, выходят за рамки данного поста.
24 декабря 2012 г. 23:53 des
Выложите еще сюда конфиги nginx

Контактные данные

 Россия, г. Москва