Apache, Django, mod_wsgi

Дата публикации:2 мая 2013 г. 16:13:17

Здравствуйте! В Интернете уже полно статей на эту тему, однако, многие из них устарели, другие и вовсе не совсем корректно все описывают. Мне в свое потребовалось довольно много времени для того, чтобы правильно установить, сконфигурировать и запустить Django через mod_wsgi в Apache. Все описанное ниже применительно к Ubuntu Linux. Итак, сразу к сути.

 

Для начала выполним команду в терминале для установки Apache и mod_wsgi. Пишем:

$ sudo apt-get install apache2 libapache2-mod-wsgi

С установкой Django вы итак разберетесь, переходим к конфигам. Идем в /etc/ и находим там файл hosts.Открываем и добавляем в него:

127.0.0.2   test1.ru

Затем идем в /etc/apache2/sites-available/. Создаем там файл test1.ru, открываем его и пишем в него:

<VirtualHost *:80>
    ServerAdmin [email protected]example.com
    ServerName  test1.ru
    ServerAlias www.test1.ru
    
    DocumentRoot ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/test1.ru/
    <Directory ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/test1.ru>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    
    WSGIScriptAlias / ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/test1.ru/wsgi.py
    WSGIScriptReloading On

    ErrorLog ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/test1.ru/logs/error.log
    CustomLog ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/logs/access.log combined
    
    LogLevel warn
    
    Alias /static/ ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/test1.ru/static/
    <Directory ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/test1.ru/static>
        Order allow,deny
        allow from all
    </Directory>
    
    Alias /media/ ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/test1.ru/media/
    <Directory ПОЛНЫЙ_ПУТЬ_ДО_ПАПКИ_С_ПРОЕКТОМ/test1.ru/media>
        Order allow,deny
        allow from all
    </Directory>
    
</VirtualHost>

Я храню проекты в домашнем каталоге в папке www. Вы как хотите. Если вы храните файлы там и создаете папки и файлы из nautilus своего юзера, то у вас могут возникнуть проблемы с доступом. Apache по-умолчанию работает с юзером www-data и группой с тем же именем. Чтобы это изменить (хотя не рекомендуется, но я здесь иду по принципу: мой дом - мои правила) исправьте имя пользователя и группы на свои в файле /etc/apache2/envvars. Там есть две строчки export APACHE_RUN_USER и export APACHE_RUN_GROUP их и исправьте на свои.

Дальше, создайте в папке test1.ru папки static, media, templates и (обязательно) logs, иначе Apache может выдать ошибку. Затем, выполните команду:

$ sudo a2ensite test1.ru

Так мы включили наш сайт. Хотя на деле просто создалась символичекая ссылка на файл test1.ru. Теперь Apache просит нас сделать reload. Сделаем:

$ sudo /etc/init.d/apache2 reload

А затем, сделаем restart. Если Apache выдаст Ok, то значит все хорошо и можно начинать работать:

$ sudo /etc/init.d/apache2 restart

После этого создайте новый проект командой (в той папке, которую вы создали(test1.ru)):

$ django-admin.py startproject test1

А дальше конфигурируем и так далее. Ах да, файл wsgi.py должен лежать в корне папки test1.ru, иначе исправьте путь в файле /etc/apache2/sites-available/test1.ru. И еще, вот так выглядит файл wsgi.py (Django 1.5) у меня:

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

import os, sys

sys.path.append(os.path.abspath(os.path.dirname(__file__)))

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

У меня файлы manage.py, settings.py, wsgi.py, urls.py и т.д. все лежат в одной корневой папке. На этом все. Спасибо за внимание!

Метки:python, django, apache2, mod_wsgi, wsgi, настройка