Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
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 |
- | '' | + | <code bash> |
- | $ sudo apt-get update\\ | + | # Обновляем список пакетов |
- | \\ | + | $ sudo apt-get update |
- | # Обновляем пакеты\\ | + | |
- | $ sudo apt-get upgrade'' | + | # Обновляем пакеты |
+ | $ sudo apt-get upgrade | ||
+ | </ | ||
Переменные: | Переменные: | ||
**project_name** — имя проекта\\ | **project_name** — имя проекта\\ | ||
**project.com** — домен проекта\\ | **project.com** — домен проекта\\ | ||
+ | **project_group_name** - группа доступа к проекту\\ | ||
Заменить на соответствующие значения для Вашего проекта. | Заменить на соответствующие значения для Вашего проекта. | ||
Строка 19: | Строка 22: | ||
Для установки последней версии необходимо скачать исходники и распаковать их: | Для установки последней версии необходимо скачать исходники и распаковать их: | ||
- | '' | + | <code bash> |
- | $ cd ~/ | + | $ sudo mkdir ~/django |
- | $ wget http:// | + | $ cd ~/django |
- | $ mv index.html Django-1.3.1.tar.gz | + | $ wget http:// |
- | $ 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 bash> |
- | **/ | + | $ python -c "from distutils.sysconfig import get_python_lib; |
+ | / | ||
+ | </ | ||
В данном случае видно, что основной версией является Python 2.7 и все дополнительные пакеты устанавливаются в директорию "/ | В данном случае видно, что основной версией является Python 2.7 и все дополнительные пакеты устанавливаются в директорию "/ | ||
Строка 34: | Строка 41: | ||
Следующим шагом необходимо скопировать пакет | Следующим шагом необходимо скопировать пакет | ||
- | '' | + | <code bash> |
- | $ sudo chomd -R 644 / | + | $ sudo cp -R ~/ |
+ | $ sudo chomd -R 644 / | ||
+ | </ | ||
И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, | И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, | ||
- | '' | + | <code bash> |
+ | $ sudo ln -s ~/ | ||
+ | </ | ||
| | ||
==== Проверка корректности установки Django ==== | ==== Проверка корректности установки Django ==== | ||
Чтобы убедиться, | Чтобы убедиться, | ||
- | + | <code bash> | |
- | '' | + | $ python -c " |
- | **(1, 3, 1, ' | + | (1, 3, 1, ' |
+ | </ | ||
Все в порядке. Последняя версия 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 ==== |
- | ''' | + | <code bash> |
+ | $ sudo apt-get install apache2 libapache2-mod-wsgi | ||
+ | </ | ||
- | ===== Создание и настройка проекта в Django | + | === Создание и настройка проекта в Django === |
При создании проекта будем исходить из того, что код Django-проекта должен работать от имени отдельного системного пользователя. | При создании проекта будем исходить из того, что код Django-проекта должен работать от имени отдельного системного пользователя. | ||
- | ==== Создание проекта Django | + | == Создание проекта Django == |
Далее приведен код создания Django-проекта и некоторых дополнительных директорий в нем: | Далее приведен код создания Django-проекта и некоторых дополнительных директорий в нем: | ||
+ | <code bash> | ||
+ | # директория для django проектов | ||
+ | $ sudo mkdir -p / | ||
- | '' | + | # новый |
- | $ sudo mkdir -p / | + | $ cd / |
+ | $ sudo django-admin.py startproject apps | ||
- | | + | # корректируем название модуля для корректного импорта |
- | $ cd /home/django-projects/project_name | + | $ sudo perl -pi -e 's/apps.urls/urls/g' apps/ |
- | $ sudo django-admin.py startproject apps | + | |
- | | + | # директория для |
- | $ sudo perl -pi -e 's/apps.urls/urls/g' apps/settings.py | + | $ sudo mkdir -p /home/django-projects/project_name/deploy |
- | | + | # директория для статики |
- | $ sudo mkdir -p / | + | $ sudo mkdir -p / |
- | | + | # директория для |
- | $ sudo mkdir -p / | + | $ sudo mkdir -p / |
+ | </ | ||
- | # директория для логов | + | == Создание пользователя для проекта == |
- | $ sudo mkdir -p / | + | |
- | + | ||
- | ==== Создание пользователя для проекта | + | |
Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), | Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), | ||
- | '' | + | <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 / | + | $ sudo chown project_group_name:www-data -R / |
- | | + | # права доступа на проект. Право на чтение для www-data необходимо |
- | # для корректной отдачи статики | + | # для корректной отдачи статики |
- | $ sudo chmod u=rwx, | + | $ sudo chmod u=rwx, |
+ | </ | ||
- | ==== Настройка виртуального хоста в Apache | + | === Настройка виртуального хоста в Apache === |
Далее, чтобы код проекта отзывался на какой-либо URL-адрес, | Далее, чтобы код проекта отзывался на какой-либо URL-адрес, | ||
+ | <code bash> | ||
+ | # cтавим консольный текстовый редактор " | ||
+ | $ sudo apt-get install nano | ||
- | ''# | + | # с помощью консольного текстового редактора создаём новый файл |
- | $ sudo apt-get install nano | + | $ sudo nano / |
- | + | </ | |
- | # с помощью консольного текстового редактора создаём новый файл | + | |
- | | + | |
И добавить в него следующий код: | И добавить в него следующий код: | ||
- | + | <code apache> | |
- | '' | + | < |
# Описание сервера | # Описание сервера | ||
ServerAdmin admin@project.com | ServerAdmin admin@project.com | ||
Строка 114: | Строка 132: | ||
# Логи | # Логи | ||
LogLevel warn | LogLevel warn | ||
- | ErrorLog / | + | ErrorLog / |
- | CustomLog / | + | CustomLog / |
# wsgi-обработчик (см. ниже) | # wsgi-обработчик (см. ниже) | ||
WSGIPythonPath < | WSGIPythonPath < | ||
- | WSGIScriptAlias / / | + | WSGIScriptAlias / / |
# Параметры запуска wsgi | # Параметры запуска wsgi | ||
- | WSGIDaemonProcess | + | WSGIDaemonProcess |
- | 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 | ||
</ | </ | ||
- | </ | + | </ |
+ | </ | ||
Или можно создать файл " | Или можно создать файл " | ||
Строка 143: | Строка 162: | ||
В данном случае 10.1.0.4 - это IP-адрес машины, | В данном случае 10.1.0.4 - это IP-адрес машины, | ||
- | Настройка wsgi | + | === Настройка wsgi === |
Теперь, | Теперь, | ||
+ | <code bash> | ||
+ | $ sudo -u project_group_name vim / | ||
+ | </ | ||
- | $ sudo -u django vim / | + | или |
- | или | + | <code bash> |
+ | $ sudo -u project_group_name nano / | ||
+ | </ | ||
- | $ sudo nano / | + | или в директорию "/ |
- | или в директорию "/home/django-projects/project_name/ | + | <code python> |
+ | #/usr/bin/python | ||
+ | # -*- coding: utf-8 -*- | ||
+ | import os, sys | ||
- | | + | # В python |
- | # -*- coding: utf-8 -*- | + | dn = os.path.dirname PROJECT_ROOT = os.path.abspath( dn(dn(__file__)) ) |
- | | + | DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT, ' |
+ | sys.path.append( DJANGO_PROJECT_ROOT ) | ||
- | | + | # Установка файла настроек |
- | dn = os.path.dirname PROJECT_ROOT | + | os.environ[' |
- | DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT, | + | |
- | sys.path.append( DJANGO_PROJECT_ROOT ) | + | |
- | | + | # Запуск wsgi-обработчика |
- | os.environ[' | + | import django.core.handlers.wsgi |
+ | application | ||
+ | </ | ||
- | # Запуск | + | === Включение виртуального хоста Apache === |
- | | + | На заключительном шаге необходимо дать знать о наличии нового виртуального хоста в Apache, включить его и перезагрузить сам Apache: |
- | | + | <code bash> |
+ | # Добавляет ссылку на виртуальный хост в список доступных хостов | ||
+ | $ sudo ln -s /home/django-projects/ | ||
+ | / | ||
- | Включение | + | # включаем виртуальный хост |
- | На заключительном шаге необходимо дать знать о наличии нового | + | $ sudo a2ensite project.com |
- | | + | # рестарт |
- | $ sudo ln -s /home/django-projects/ | + | $ sudo /etc/init.d/ |
- | /etc/apache2/sites-available/ | + | </code> |
- | # включаем виртуальный хост | + | == Проверка корректности установки |
- | $ sudo a2ensite project.com | + | Чтобы проверить, |
- | + | ||
- | # рестарт Apache | + | |
- | $ sudo / | + | |
- | + | ||
- | + | ||
- | Проверка корректности установки | + | |
- | Чтобы проверить, | + | |
Результатом должно быть приглашение: | Результатом должно быть приглашение: | ||
+ | < | ||
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/ | * If you plan to use a database, edit the DATABASE_* settings in settings/ | ||
* Start your first app by running python settings/ | * Start your first app by running python settings/ | ||
+ | </ | ||
- | + | ==== Дебаг | |
- | + | Если возникли проблемы, | |
- | + | * в виртуальном хосте меняем | |
- | + | | |
- | Далее радактировать не нужно | + | |
- | + | ||
- | Установка MySQL | + | |
- | + | ||
- | Кроме самого сервера MySQL необходимо также установить пакет, который позволяет работать с MySQL из Python: | + | |
- | + | ||
- | $ sudo aptitude install mysql-server python-mysqldb | + | |
- | + | ||
- | При установке необходимо будет указать пароль для root-пользователя БД MySQL. | + | |
- | + | ||
- | Далее необходимо выполнить команду | + | |
- | mysql_secure_installation | + | |
- | и ответить на вопросы скрипта проверки безопасности от разработчиков mysql | + | |
- | + | ||
- | + | ||
- | + | ||
- | Дебаг: | + | |
- | Если возникли проблемы, | + | |
- | LogLevel warn | + | |
- | на | + | |
- | LogLevel info | + | |
- | отключаем демонизацию, | + | |
- | WSGIProcessGroup | + | |
Это позволит иметь более подробные сообщения в error_log . | Это позволит иметь более подробные сообщения в error_log . | ||
По окончании отладки не забудьте вернуть всё обратно :) | По окончании отладки не забудьте вернуть всё обратно :) |