пятница, 10 июня 2011 г.

Django на Ubuntu с Apache и mod_wsgi

 

Устанавливаем django:

sudo apt-get install python-django

Проверяем корректность установки, следующая команда должна показать версию:

python -c "import django; print django.VERSION;"

Устанавливаем Apache и mod_wsgi:

sudo apt-get install apache2 libapache2-mod-wsgi

Устанавливаем MySQL:

sudo apt-get install mysql-server python-mysqldb

Создаем директорию для наших проектов:

mkdir -p /home/django-projects

Создаем проект myproject:

django-admin startproject myproject

Создаем необходимые директории.

Для настроек wsgi:

sudo mkdir -p /home/django-project/myproject/deploy

Директория для статики:

sudo mkdir -p /home/django-project/myproject/media

Директория для логов:

sudo mkdir -p /home/django-project/myproject/logs

Корректируем название модуля для корректного импорта:

sudo perl -pi -e 's/myproject.urls/urls/g' myproject/settings.py

Для изоляции кода проекта от остальной системы (в целях безопасности), добавим в  систему нового пользователя от имени которого будет работать код проекта:


Создаем системную группу:







sudo addgroup --quiet --system dw


 
Создаем системного пользователя:

 




sudo adduser --quiet --system --ingroup dw \
--no-create-home --no-create-home dw

 

Меняем владельца:




sudo chown dw:www-data -R /home/django-project/myproject
Изменяем права доступа к проекту:




sudo chmod u=rwx,g=rx,o= -R /home/django-project/myproject

Чтобы привязать наш проект к URL-адресу, необходимо добавить и настроить виртуальный хост в Apache. Сначала создадим файл:





sudo –u dw touch /home/django_project/myproject/deploy/myproject.com

И добавим в него следующий код:






<VirtualHost *:80>
    # Описание сервера
    ServerAdmin admin@myproject.com
    ServerName myproject.com

    # Логи
    ErrorLog    /home/django_project/myproject/logs/error_log
    CustomLog   /home/django_project/
myproject/logs/access_log common

    # wsgi-обработчик (см. ниже)
   WSGIScriptAlias / /home/django_project/myproject/deploy/django.wsgi

    # Параметры запуска wsgi
    WSGIDaemonProcess dw-site user=dw group=dw \


                       home=/home/django_project/myproject/media/ \
                      processes=2 threads=10 maximum-requests=100 \


                      display-name=apache-dw-wsgi



   WSGIProcessGroup dw-site


    # Статические файлы django-админки
    Alias "/media_admin/" \


         "/usr/lib/pymodules/python2.7/django/contrib/admin/media/"



    <Location "/media_admin/">
        SetHandler None
    </Location>


    # Статические файлы проекта
    Alias "/media/" "/home/django_project/myproject/media/"
    <Location "/media/">
        SetHandler None
    </Location>


</VirtualHost>


Теперь нужно создать wsgi-обработчик. Создаем файл:





sudo –u dw touch /home/django_project/myproject/deploy/django.wsgi

И добавляем в него следующее содержимое:






#/usr/bin/python
# -*- coding: utf-8 -*-

import os, sys



path = '/home/django_project'
if path not in sys.path:
    sys.path.insert(0, '/home/django_project/myproject')

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()


Теперь можно включить наш виртуальный хост. Добавим ссылку в список доступных хостов:





sudo ln –s /home/jango_project/myproject/deploy/myproject.com \
/etc/apache2/sites-available/myproject.com

Включим наш виртуальный хост:





a2ensite myproject.com

И перезапустим Apache:





/etc/init.d/apache2 restart

Добавляем наш адрес в hosts и пытаемся открыть в браузере. Если все в норме то отобразится следующее:





It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet.
Here's what to do next:
* 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].

Убедившись что Django работает можем перейти к созданию базы данных. Заходим в MySQL под root’ом:





mysql --user=root –p

Создаем новую базу данных:





mysql> CREATE DATABASE myproject_db CHARACTER SET utf8;

Создаем пользователя:





mysql> CREATE USER myproject_user@localhost IDENTIFIED BY 'passw';

Вместо 'passw' подставляем свой пароль.


И даем новому пользователю доступ к базе:





mysql> GRANT ALL ON myproject_db.* TO myproject_user@localhost;

После этого нужно прописать новую базу и пользователя в файл настроек проекта settings.py:






DATABASES = {
    'default': {
        'ENGINE': 'mysql',
 
        'NAME': 'myproject_db',  
        'USER': 'myproject_user',      
        'PASSWORD': 'passw',       
        'HOST': '',                     
        'PORT': '',                     
    }
}


В этом же файле нужно прописать пути к файлам основного проекта и админки:






# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = '/media/'

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/media_admin/'


Теперь можно дать команду для создания в базе данных основных таблиц:





sudo -u dw /home/django-projects/myproject/manage.py syncdb

Теперь Django настроен полностью. Чтобы получить доступ к интерфейсу администрирования в файле urls.py раскоментируем следующие строки:






# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Example:
    # (r'^myproject/', include('myproject.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
   (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)),
)


И в браузере набираем “hhtp://myproject.com/admin”. Если появилась форма авторизации значит все работает.

Комментариев нет:

Отправить комментарий