Инструменты пользователя

Инструменты сайта


webserver-apache-wsgi-django

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
webserver-apache-wsgi-django [08.01.2012 11:11]
kpetrov создано
webserver-apache-wsgi-django [02.11.2014 23:49] (текущий)
Строка 1: Строка 1:
-====== Установка Django, Apache, mod_wsgi на VPS с Ubunu 11.04 ======+====== Установка Django, Apache, mod_wsgi на VPS с Ubuntu 11.04 ======
  
- ''# Обновляем список пакетов\\ +<code bash> 
-    $ sudo apt-get update\\  +# Обновляем список пакетов 
-\\ +$ sudo apt-get update 
-    # Обновляем пакеты\\ + 
-    $ sudo apt-get upgrade'' +# Обновляем пакеты 
 +$ sudo apt-get upgrade 
 +</code>
  
 Переменные:\\ Переменные:\\
 **project_name** — имя проекта\\ **project_name** — имя проекта\\
 **project.com** — домен проекта\\ **project.com** — домен проекта\\
 +**project_group_name** - группа доступа к проекту\\
 Заменить на соответствующие значения для Вашего проекта. Заменить на соответствующие значения для Вашего проекта.
  
Строка 19: Строка 22:
 Для установки последней версии необходимо скачать исходники и распаковать их:  Для установки последней версии необходимо скачать исходники и распаковать их: 
  
-''    $ sudo mkdir ~/django \\ +<code bash> 
-    $ cd ~/django \\ +$ sudo mkdir ~/django 
-    $ wget http://www.djangoproject.com/download/1.3.1/tarball/ \\ +$ cd ~/django 
-    $ mv index.html Django-1.3.1.tar.gz \\ +$ wget http://www.djangoproject.com/download/1.3.1/tarball/ 
-    $ tar xzf Django-1.3.1.tar.gz'' \\+$ mv index.html Django-1.3.1.tar.gz 
 +$ tar xzf Django-1.3.1.tar.gz 
 +</code>
  
 Далее, необходимо узнать, в какую директорию необходимо устанавливать пакеты, чтобы Python узнал об этом. Для этого необходимо выполнить:  Далее, необходимо узнать, в какую директорию необходимо устанавливать пакеты, чтобы Python узнал об этом. Для этого необходимо выполнить: 
  
-  ''$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"  +<code bash> 
-    **/usr/lib/python2.7/dist-packages**'' +$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"  
 +/usr/lib/python2.7/dist-packages 
 +</code>
  
 В данном случае видно, что основной версией является Python 2.7 и все дополнительные пакеты устанавливаются в директорию "/usr/lib/python2.7/dist-packages" В данном случае видно, что основной версией является Python 2.7 и все дополнительные пакеты устанавливаются в директорию "/usr/lib/python2.7/dist-packages"
Строка 34: Строка 41:
 Следующим шагом необходимо скопировать пакет  Django в папку с модулями и дать права на чтение:  Следующим шагом необходимо скопировать пакет  Django в папку с модулями и дать права на чтение: 
  
-  ''$ sudo cp -R ~/django/Django-1.3.1/django /usr/lib/python2.7/dist-packages/django  +<code bash> 
-    $ sudo chomd -R 644 /usr/lib/python2.7/dist-packages/django''+$ sudo cp -R ~/django/Django-1.3.1/django /usr/lib/python2.7/dist-packages/django  
 +$ sudo chomd -R 644 /usr/lib/python2.7/dist-packages/django 
 +</code>
  
 И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, необходимо добавить символическую ссылку:  И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, необходимо добавить символическую ссылку: 
  
-   ''$ sudo ln -s ~/django/Django-1.3.1/django/bin/django-admin.py /usr/local/bin''+<code bash> 
 +$ sudo ln -s ~/django/Django-1.3.1/django/bin/django-admin.py /usr/local/bin 
 +</code>
          
 ==== Проверка корректности установки Django ==== ==== Проверка корректности установки Django ====
 Чтобы убедиться, что Django нормально установлен, необходимо запустить интерпретатор Python и импортировать модуль django:  Чтобы убедиться, что Django нормально установлен, необходимо запустить интерпретатор Python и импортировать модуль django: 
- +<code bash> 
-   ''$ python -c "import django; print django.VERSION;"  +$ python -c "import django; print django.VERSION;"  
-    **(1, 3, 1, 'final', 0)**'' +(1, 3, 1, 'final', 0) 
 +</code>
  
 Все в порядке. Последняя версия Django корректно установлена.  Все в порядке. Последняя версия Django корректно установлена. 
Строка 52: Строка 64:
 Для работы с Django необходимы http-сервер Apache и модуль к нему - mod-wsgi. Модуль mod_wsgi пришел на смену mod_python и в настоящее время рекомендуется авторами Django как наиболее подходящее решение для использования в реальных условиях.  Для работы с Django необходимы http-сервер Apache и модуль к нему - mod-wsgi. Модуль mod_wsgi пришел на смену mod_python и в настоящее время рекомендуется авторами Django как наиболее подходящее решение для использования в реальных условиях. 
  
-==== Установка Apache и mod_wsgi====+==== Установка Apache и mod_wsgi ====
  
-    '''$ sudo apt-get install apache2 libapache2-mod-wsgi'''+<code bash> 
 +$ sudo apt-get install apache2 libapache2-mod-wsgi 
 +</code>
  
-===== Создание и настройка проекта в Django =====+=== Создание и настройка проекта в Django ===
 При создании проекта будем исходить из того, что код Django-проекта должен работать от имени отдельного системного пользователя.  При создании проекта будем исходить из того, что код Django-проекта должен работать от имени отдельного системного пользователя. 
  
-==== Создание проекта Django ====+== Создание проекта Django ==
 Далее приведен код создания Django-проекта и некоторых дополнительных директорий в нем:  Далее приведен код создания Django-проекта и некоторых дополнительных директорий в нем: 
 +<code bash>
 +# директория для django проектов 
 +$ sudo mkdir -p /home/django-projects/project_name 
  
-  ''директория для django проектов  +новый django-проект  
-    sudo mkdir -p /home/django-projects/project_name +cd /home/django-projects/project_name  
 +$ sudo django-admin.py startproject apps 
  
-    новый django-проект  +корректируем название модуля для корректного импорта  
-    cd /home/django-projects/project_name  +sudo perl -pi -e 's/apps.urls/urls/g' apps/settings.py 
-    $ sudo django-admin.py startproject apps +
  
-    корректируем название модуля для корректного импорта  +директория для настроек wsgi  
-    $ sudo perl -pi -e 's/apps.urls/urls/g' apps/settings.py +$ sudo mkdir -/home/django-projects/project_name/deploy 
  
-    # директория для настроек wsgi  +# директория для статики  
-    $ sudo mkdir -p /home/django-projects/project_name/deploy +$ sudo mkdir -p /home/django-projects/project_name/media 
  
-    # директория для статики  +# директория для логов  
-    $ sudo mkdir -p /home/django-projects/project_name/media +$ sudo mkdir -p /home/django-projects/project_name/logs 
 +</code>
  
-    # директория для логов  +== Создание пользователя для проекта ==
-    $ sudo mkdir -p /home/django-projects/project_name/logs''  +
- +
-==== Создание пользователя для проекта ====+
 Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), необходимо добавить в систему пользователя, от имени которого будет исполняться код проекта:  Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), необходимо добавить в систему пользователя, от имени которого будет исполняться код проекта: 
  
-  ''создается системная группа  +<code bash> 
-    $ sudo addgroup --quiet --system project_group_name +создается системная группа  
 +$ sudo addgroup --quiet --system project_group_name
  
-    # создается системный пользователь  +# создается системный пользователь  
-    $ sudo adduser --quiet --system --ingroup project_group_name --no-create-home --no-create-home project_group_name +$ sudo adduser --quiet --system --ingroup project_group_name --no-create-home --no-create-home project_group_name 
-    # новый владелец для проекта  +# новый владелец для проекта  
-    $ sudo chown django:www-data -R /home/django-projects/project_name +$ sudo chown project_group_name:www-data -R /home/django-projects/project_name 
  
-    # права доступа на проект. Право на чтение для www-data необходимо  +# права доступа на проект. Право на чтение для www-data необходимо  
-    # для корректной отдачи статики  +# для корректной отдачи статики  
-    $ sudo chmod u=rwx,g=rx,o= -R /home/django-projects/project_name'' +$ sudo chmod u=rwx,g=rx,o= -R /home/django-projects/project_name 
 +</code>
  
-==== Настройка виртуального хоста в Apache ====+=== Настройка виртуального хоста в Apache ===
 Далее, чтобы код проекта отзывался на какой-либо URL-адрес, необходимо настроить виртуальный хост Apache. Необходимо создать новый файл:  Далее, чтобы код проекта отзывался на какой-либо URL-адрес, необходимо настроить виртуальный хост Apache. Необходимо создать новый файл: 
 +<code bash>
 +# cтавим консольный текстовый редактор "nano" (если он отсутствует): 
 +$ sudo apt-get install nano 
  
-   ''# cтавим консольный текстовый редактор "nano" (если он отсутствует):  +# с помощью консольного текстового редактора создаём новый файл 
-   $ sudo apt-get install nano  +$ sudo nano /home/django-projects/project_name/deploy/project.com 
- +</code>
-   # с помощью консольного текстового редактора создаём новый файл +
-   $ sudo nano /home/django-projects/**project_name**/deploy/**project.com**'' +
  
 И добавить в него следующий код:  И добавить в него следующий код: 
- +<code apache> 
-''<VirtualHost **10.1.0.4**:80> +<VirtualHost 10.1.0.4:80> 
     # Описание сервера      # Описание сервера 
     ServerAdmin admin@project.com      ServerAdmin admin@project.com 
Строка 114: Строка 132:
     # Логи     # Логи
     LogLevel warn     LogLevel warn
-    ErrorLog /home/django-projects/**project_name**/logs/error_log  +    ErrorLog /home/django-projects/project_name/logs/error_log  
-    CustomLog /home/django-projects/**project_name**/logs/access_log common +    CustomLog /home/django-projects/project_name/logs/access_log common 
  
     # wsgi-обработчик (см. ниже)      # wsgi-обработчик (см. ниже) 
     WSGIPythonPath <здесь надо посмотреть это значение в /etc/apache2/mods-available/wsgi.conf >     WSGIPythonPath <здесь надо посмотреть это значение в /etc/apache2/mods-available/wsgi.conf >
-    WSGIScriptAlias / /home/django-projects/**project_name**/deploy/django.wsgi +    WSGIScriptAlias / /home/django-projects/project_name/deploy/django.wsgi 
  
     # Параметры запуска wsgi      # Параметры запуска wsgi 
-    WSGIDaemonProcess django-site user=django group=django home=/home/django-projects/project_name/media/ \  +    WSGIDaemonProcess project_group_name-site user=project_group_name group=project_group_name home=/home/django-projects/project_name/media/ \  
-                      processes=2 threads=4 maximum-requests=100 display-name=apache-django-wsgi +                      processes=2 threads=4 maximum-requests=100 display-name=apache-project_group_name-wsgi 
     WSGIProcessGroup project_group_name-site      WSGIProcessGroup project_group_name-site 
  
Строка 137: Строка 155:
         SetHandler None          SetHandler None 
     </Location>      </Location> 
-</VirtualHost> ''+</VirtualHost> 
 +</code>
  
 Или можно создать файл "**project.com**" и закачать его по FTP в директорию "/home/django-projects/**project_name**/deploy/"  Или можно создать файл "**project.com**" и закачать его по FTP в директорию "/home/django-projects/**project_name**/deploy/" 
Строка 143: Строка 162:
 В данном случае 10.1.0.4 - это IP-адрес машины, на которой работает Apache.  В данном случае 10.1.0.4 - это IP-адрес машины, на которой работает Apache. 
  
-Настройка wsgi +=== Настройка wsgi === 
 Теперь, когда виртуальный хост создан, необходимо создать wsgi-обработчик. Для этого создается файл c помощью консольного текстового редактора (например, nano или vim):  Теперь, когда виртуальный хост создан, необходимо создать wsgi-обработчик. Для этого создается файл c помощью консольного текстового редактора (например, nano или vim): 
 +<code bash>
 +$ sudo -u project_group_name vim /home/django-projects/project_name/deploy/django.wsgi
 +</code>
  
-    $ sudo -u django vim /home/django-projects/project_name/deploy/django.wsgi +или
  
-или +<code bash> 
 +$ sudo -u project_group_name nano /home/django-projects/project_name/deploy/django.wsgi 
 +</code>
  
-    $ sudo nano /home/django-projects/project_name/deploy/django.wsgi +или в директорию "/home/django-projects/project_name/deploy/django.wsgi" через FTP залить файл "django.wsgi" со следующим содержимым:
  
-или в директорию "/home/django-projects/project_name/deploy/django.wsgi" через FTP залить файл "django.wsgi" со следующим содержимым+<code python> 
 +#/usr/bin/python  
 +# -*- codingutf-8 -*-  
 +import os, sys 
  
-    #/usr/bin/python  +В python path добавляется директория проекта  
-    # -*- coding: utf-8 -*-  +dn = os.path.dirname PROJECT_ROOT = os.path.abspath( dn(dn(__file__)) )  
-    import os, sys +DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT'apps')  
 +sys.path.append( DJANGO_PROJECT_ROOT ) 
  
-    В python path добавляется директория проекта  +Установка файла настроек  
-    dn = os.path.dirname PROJECT_ROOT os.path.abspath( dn(dn(__file__)) )  +os.environ['DJANGO_SETTINGS_MODULE'= 'settings
-    DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT, 'apps')  +
-    sys.path.append( DJANGO_PROJECT_ROOT ) +
  
-    Установка файла настроек  +Запуск wsgi-обработчика  
-    os.environ['DJANGO_SETTINGS_MODULE''settings' +import django.core.handlers.wsgi  
 +application django.core.handlers.wsgi.WSGIHandler() 
 +</code>
  
-    # Запуск wsgi-обработчика  +=== Включение виртуального хоста Apache === 
-    import django.core.handlers.wsgi  +На заключительном шаге необходимо дать знать о наличии нового виртуального хоста в Apache, включить его и перезагрузить сам Apache: 
-    application = django.core.handlers.wsgi.WSGIHandler() +<code bash> 
 +# Добавляет ссылку на виртуальный хост в список доступных хостов  
 +$ sudo ln -s /home/django-projects/project_name/deploy/project.com \  
 +             /etc/apache2/sites-available/project.com 
  
-Включение виртуального хоста Apache  +включаем виртуальный хост  
-На заключительном шаге необходимо дать знать о наличии нового виртуального хоста в Apache, включить его и перезагрузить сам Apache: +$ sudo a2ensite project.com 
  
-    Добавляет ссылку на виртуальный хост в список доступных хостов  +рестарт Apache  
-    $ sudo ln -s /home/django-projects/project_name/deploy/project.com \  +$ sudo /etc/init.d/apache2 restart  
-                 /etc/apache2/sites-available/project.com +</code>
  
-    # включаем виртуальный хост  +== Проверка корректности установки == 
-    $ sudo a2ensite project.com  +Чтобы проверить, что Django корректно работает через mod_wsgi необходимо попытаться открыть URL "http://project.com/" в браузере. 
- +
-    # рестарт Apache  +
-    $ sudo /etc/init.d/apache2 restart  +
- +
- +
-Проверка корректности установки +
-Чтобы проверить, что Django корректно работает через mod_wsgi необходимо попытаться открыть URL "http://wsgi.debianworld.ru/" в браузере. +
 Результатом должно быть приглашение:  Результатом должно быть приглашение: 
 +<code>
 It worked! It worked!
 Congratulations on your first Django-powered page. Congratulations on your first Django-powered page.
Строка 193: Строка 218:
   * If you plan to use a database, edit the DATABASE_* settings in settings/settings.py.   * If you plan to use a database, edit the DATABASE_* settings in settings/settings.py.
   * Start your first app by running python settings/manage.py startapp [appname].   * Start your first app by running python settings/manage.py startapp [appname].
 +</code>
  
- +==== Дебаг ==== 
- +Если возникли проблемы, то: 
- +  * в виртуальном хосте меняем "LogLevel warnна "LogLevel info" 
- +  отключаем демонизацию, закоментировав строчку "WSGIProcessGroup project_group_name-site"
-Далее радактировать не нужно +
- +
-Установка MySQL  +
- +
-    Кроме самого сервера MySQL необходимо также установить пакет, который позволяет работать с MySQL из Python:  +
- +
-    $ sudo aptitude install mysql-server python-mysqldb  +
- +
-При установке необходимо будет указать пароль для root-пользователя БД MySQL.  +
- +
-Далее необходимо выполнить команду +
-mysql_secure_installation  +
-и  ответить на вопросы скрипта проверки безопасности от разработчиков mysql +
- +
- +
- +
-Дебаг: +
-Если возникли проблемы, то: в виртуальном хосте меняем +
-LogLevel warn +
-на +
-LogLevel info +
-отключаем демонизацию, закоментировав строчку +
-WSGIProcessGroup django-site +
 Это позволит иметь более подробные сообщения в error_log . Это позволит иметь более подробные сообщения в error_log .
 По окончании отладки не забудьте вернуть всё обратно :) По окончании отладки не забудьте вернуть всё обратно :)
webserver-apache-wsgi-django.1326006719.txt.gz · Последнее изменение: 02.11.2014 23:49 (внешнее изменение)

Инструменты страницы