Магазин пластинок nowhereland.ru - виниловые пластинкиВиниловые пластинки nowhereland.ruМагазин для коллекционеров пластинок

Django хостинг

Здесь описано как дистанционно установить Django на хостинге, позволяющем это сделать.
Я размещаю свои сайты на Django, в том числе и свой сайт стихов, и этот сайт здесь.

Это — виртуальный выделенный сервер (VDS) стоимостью примерно от трех сотен рублей в месяц. На нем можно разместить любой сайт, требующий установки любого программного обеспечения, в том числе Django сайт.

Что такое VDS? VDS — это практически полноценный выделенный сервер, на котором вы — полный хозяин: вы можете установить или удалить любое программное обеспечение, вы можете конфигурировать все, что угодно, под свои нужды, вы можете перезагружать сервер и запускать программы из командной строки или по расписанию. Большой выбор предустановленных операционных систем и программного обеспечения, Root доступ, отличная панель управления, возможность не только разместить множество собственных сайтов, но и перепродавать услуги хостинга, техническая поддержка.

При этом ваш сервер не является отдельной физической машиной, но реализован программно, разделяя один физический компьютер с рядом других таких же виртуальных выделенных серверов. Преимущества VDS: вы платите намного меньше, чем стоит аренда выделенного сервера, и при этом имеете полную свободу действий в ваших web-экспериментах.

Ограничения данной схемы: вы имеете в распоряжении не все ресурсы, имеющиеся в наличии, а только столько, сколько вы оплатили. Если ваш проект потребует больше ресурсов, их всегда можно добавить.

Далее описан процесс уcтановки Django на вышеуказанном хостинге.
Надеюсь, эта шпаргалка поможет вам устроиться на новом месте быстрее.

Установка Django + UWSGI + nginx на Ubuntu 22

Выбираем тариф на firstvds.ru, нажмимаем "купить" - нам будет предложен выбор ОС и других характеристик тарифа. У меня была задача обновить конфигурацию и минимизировать нагрузку. Я выбрал ОС Ubuntu из-за лучшей перспективы в смысле сроков её актуальности и ввиду наличия поддержки по умолчанию свежих версий MySQL/MariaDB, а также отказался от Apache в пользу более легкого nginx.

В списке предустановленного ПО выбираем Ispmanager Lite. Это система управления нашим VDS, сильно упрощающая работу. Там можно мониторить потребляемые ресурсы, настраивать выполнение скриптов по расписанию, включать и выключать предустановленное ПО и многое другое. Lite варианта, поддерживающего до 10 сайтов, нам вполне достаточно. Если со временем мы сочтем его излишним и захотим сэкономить, от него можно будет отказаться. Через 5-10 минут после оплаты наш VDS появится в разделе "Виртуальные выделенные серверы" в нашем кабинете. Выделяем наш VDS и нажимаем сверху ссылку "Инструкция". Откроется страница, на которой нужно будет установить (и записать в надежное место) пароль для админа (root) нашего VDS. Там же есть ссылки на разные инструменты управления, включая Ispmanager, Dnsmanager, и другая полезная информация. Запомните, что там есть, чтобы потом не искать :)

У firstvds есть так называемые "рецепты", один из которых можно активировать при заказе VDS. Среди рецептов есть и django + uwsgi. Возможно, достаточно будет активировать этот "рецепт" и дальше ничего не читать. Я узнал об этой опции слишком поздно и всё настраивал вручную, как описано ниже.

Открываем Ispmanager
https://НАШ.IP.АДРЕС:1500/ispmgr

Включаем необходимое нам ПО из предустановленного и выключаем то, что не планируем использовать - например, PHP и Apache.
Ispmanager — Настройки — Конфигурация ПО
Отмечаем галочкой продукт, нажимаем "изменить", чтобы выбрать определенную версию, затем нажимаем "обновить". Включаем Python нужной версии и сервер СУБД MySQL (там есть выбор между MySQL или MariaDB, я выбрал последнюю) Видим, что теперь у нас есть MariaDB 10.6.16 (в Ispmanager отображается как MySQL 10.6.16) Идем на сайт Django проверить, поддерживается ли эта версия Django. Ок, поддерживается.

В Ispmanager создаем базы данных
Ispmanager — Базы данных — Создать базу данных
Там же создается пользователь БД (от его имени будет обращаться к БД наш Django проект).
Логично иметь отдельного пользователя и отдельную БД на каждый сайт.

Соединяемся по ssh с правами root (например, через Putty)
В Ispmanager есть аналог (Ispmanager — Администрирование — Shell-клиент), но Putty быстрее и удобнее.

Устанавливаем виртуальное окружение Python
Виртуальное окружение Virtual environment позволяет для каждого проекта устанавливать свой набор модулей Python/Django и свою версию самого Python. Строго говоря, разные версии Питона всё-таки будут стоять в системе, а в Virtual environment будут только ссылки на них, но это детали. Virtual environment рекомендуется использовать с самого начала. Сегодня у Вас один сайт, а через пару лет - несколько, и каждому из них могут быть нужны разные версии ПО - Virtual environment решает эту задачу. У меня стоит задача минимизировать нагрузку, поэтому я предпочел обновить код всех своих сайтов для совместимости с одной свежей версией Python, то есть во всех Virtual environment всех моих сайтов будет иметься ссылка на одну версию Python - ту, с помощью которой я устанавливал Virtual environment.
В версиях Python 3.3 и далее Virtual environment уже включен в поставку как venv, т.е. его не нужно устанавливать отдельно. Если версия Питон более ранняя и при попытке создать окружение командой

python -m venv myvenv

выдается сообщение о том, что окружение не создано, можно сделать так:

cd ..
cd home
apt install python3.10-venv
Создаем окружение с названием site1env:
python3 -m venv site1env

Не имеет значения, где именно будет расположено виртуальное окружение по отношению к вашему проекту. Например, мне кажется удобной такая структура:

/home/user1/site1env/
/home/user1/myproject1/
/home/user1/myproject1/myproject1
/home/user1/myproject1/myapp1
/home/user1/myproject1/templates
/home/user1/myproject1/manage.py

/home/user2/site2env/
/home/user2/myproject2/
/home/user2/myproject2/myproject2

и т.д.

Еще раз обращаю внимание, что в site1env будет теперь работать именно тот Python, с помощью которого это site1env было создано, независимо от того, сколько разных версий Python будет в системе.

Впредь установка всех специфичных для проекта модулей Python и Djangо делается после активации venv

Активируем venv:

source site1env/bin/activate

При этом в начале коммандной строки появляется название нашего виртуального окружения в скобках как (site1env).
Прежде всего обновляем pip до актуальной версии, затем с его помощью устанавливаем mysqlclient (связь с БД), Django и нужные нам модули.
(Учитывайте совместимость версии Django с установленными версиями Python и БД)

python -m pip install --upgrade pip
python -m pip install mysqlclient
Получаем сообщение об ошибке:
error: subprocess-exited-with-error
? Getting requirements to build wheel did not run successfully.
Поступаем согласно рекомедациям https://pypi.org/project/mysqlclient/:

sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pkg-config
python -m pip install mysqlclient
python -m pip install Django (или python -m pip install Django==4.2.8)

и далее устанавливаем модули согласно требованиям проекта.
После установки Django нужно создать аккаунт администратора:

python manage.py createsuperuser

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

django-admin startproject myproject1

Создаем приложение myapp:

cd myproject1
python manage.py startapp myapp

Редактируем settings.py для нашего проекта, не забывая настроить доступ к БД.

python manage.py migrate

проверяем

python manage.py runserver

Выход из venv выполняется командой

deactivate

Здесь мы опускаем собственно разработку django проекта и переходим к тому моменту, когда он готов и выложен на сервер.
Что мелочиться, дайте два!

Установка и настройка uwsgi в режиме emperor

Устанавливаем uWSGI, релизующий взаимодействие наших Django проектов и nginx.
Предварительно потребуется установить pip для нашего глобального Питона (не из виртуального окружения):

apt install python3-pip
pip install uwsgi

Далее в папке /etc/uwsgi/vassals/

создаём файлы конфигурации для каждого нашего сайта и изменяем права доступа для них на 666 myproject1.ini
myproject2.ini

Пример содержания файла myproject1.ini:

[uwsgi]

chdir=/home/user1/myproject1
module=myproject1.wsgi:application

# the virtualenv (full path)
home=/home/user1/site1env

master=true
processes=3
max-requests=100
socket=/tmp/myproject1.sock
chmod-socket=666
daemonize=/var/log/uwsgi/myproject1.log

# clear environment on exit
vacuum=true

В папке
/etc/system/system
создаем файл конфигурации uwsgi.service
следующего содержания:

[Unit] 
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target
Теперь можно запустить uwsgi командой
sudo uwsgi --emperor /etc/uwsgi/vassals
При этом должен быть выведен отчет о старте uwsgi в режиме emperor и список "вассалов".

Настройка nginx

Обычно для этого в
/etc/nginx/sites-available/
создают кофигурационные файлы сайтов mywebsite1name.ru.conf и mywebsite2name.ru.conf подобного содержания:

server {
    listen      80;
    server_name mywebsite1name.ru www.mywebsite1name.ru; 
    charset     utf-8;

    access_log /var/www/httpd-logs/mywebsite1name.ru.access.log;
    error_log /var/www/httpd-logs/mywebsite1name.ru.error.log notice;

    location /static {
        alias /home/user1/myproject1/static; 
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass      unix:/tmp/myproject1.sock;
        include     /home/user1/myproject1/uwsgi_params;

    }
}
и затем создают символьные ссылки на них в папке /etc/nginx/sites-enabled:
sudo ln -s /etc/nginx/sites-available/myproject1.conf /etc/nginx/sites-enabled
В случае firstvds это не будет работать, т.к. здесь nginx ищет конфиги сайтов в папке
/etc/nginx/vhosts/www-root/
При создании сайтов через Ispmanager там были созданы соответствующие конфиги с именами mywebsite1name.ru.conf и mywebsite2name.ru.conf Нужно их подредактировать, убрав из них неактуальные для django инструкции и добавив всё то, что приведено в примере конфига выше. В итоге для каждого файла получился примерно такое содержание:
server {
	server_name mywebsite1name.ru www.mywebsite1name.ru;
	charset     utf-8;	
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/mywebsite1name.ru/*.conf;
	access_log /var/www/httpd-logs/mywebsite1name.ru.access.log;
	error_log /var/www/httpd-logs/mywebsite1name.ru.error.log notice;
	gzip on;
	gzip_comp_level 5;
	gzip_disable "msie6";
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static {
        alias /home/myproject1/static; 
		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
			expires 24h;
		}
    }
    location / {
        include     uwsgi_params; 
        uwsgi_pass      unix:/tmp/myproject1.sock;
    }
	listen 80;
}
server {
	server_name mywebsite1name.ru www.mywebsite1name.ru;
	ssl_certificate "/var/www/httpd-cert/www-root/mywebsite1name.ru_le1.crt";
	ssl_certificate_key "/var/www/httpd-cert/www-root/mywebsite1name.ru_le1.key";
	ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
	ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
	charset     utf-8;	
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/mywebsite1name.ru/*.conf;
	access_log /var/www/httpd-logs/mywebsite1name.ru.access.log;
	error_log /var/www/httpd-logs/mywebsite1name.ru.error.log notice;
	gzip on;
	gzip_comp_level 5;
	gzip_disable "msie6";
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static {
        alias /home/myproject1/static; 
		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
			expires 24h;
		}
    }
    location / {
        include     uwsgi_params; 
        uwsgi_pass      unix:/tmp/myproject1.sock;
    }
	listen 443 ssl;
}

Здесь не указан IP адрес в строке listen, т.к. два наших гипотетических сайта имеют один IP и других IP у нас нет. В ином случае оставьте так, как было в изначальных nginx конфигах сайтов - с явным указанием IP адресов. Самоподписанные SSL сертификаты были сгенерированы при создании сайтов в Ispmanager. Если есть другие сертификаты, нужно соответственно указать путь к ним. После внесения изменений в файлы uwsgi перезагружаем uwsgi и nginx:

systemctl restart uwsgi
(или service uwsgi restart)

systemctl restart nginx (или service nginx restart)

После этого наши сайты должны быть видны в браузере по их именам.

Установка Django + WSGI + Apache + MySQL на CentOS

Этот вариант на 2024 год остается вполне рабочим.

Наша цель — запустить джанго-проект на CentOS + Apache + MySQL + Django

WSGI (Web Server Gateway Interface) на данный момент является стандартом для запуска Django.

Для работы необходим ssh клиент. Я использую putty.
Также установите sftp клиент (ftp через ssh). Я использую WinSCP. Обычный FTP не позволяет входить с правами root.

Для работы будет полезен pip - менеджер пакетов Python.
Проверьте его наличие в системе командой

pip
Если pip не найден, установить его можно, выполнив следующие команды:
 
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py

Установка Django

Установка последней стабильной версии Django:
pip install Django
При необходимости можно указать, какую именно версию устанавливать:
pip install django==1.8.2

Установка mod_wsgi

В веб-сервере Apache WSGI реализован через модуль mod_wsgi Проверим, установлен ли mod_wsgi
rpm -q mod_wsgi
Если мы получим сообщение "package mod_wsgi is not installed", то модуль mod_wsgi требуется установить:
pip install mod_wsgi
Если не получается (ошибка), то есть два пути: 1) Быть сильнее обстоятельств - погуглить, почему ошибка и как с ней бороться 2) Быть выше их - использовать другой менеджер пакетов. В CentOS есть yum (Yellowdog Updater), воспользуемся им:
yum install mod_wsgi

Установка MySQLdb

Для работы MySQL с Python потребуется драйвер MySQLdb, установим его:
yum install MySQL-python
Если при установке выводится сообщение об ошибке или если при попытке доступа к сайту получите сообщение "Error loading MySQLdb module: No module named MySQLdb", значит, MySQL-python не установлен/установлен не полностью. Поробуем так:
pip install MySQL-python
Теперь работает? Прекрасно! Не работает? Странные жалобы на то, что "EnvironmentError: mysql_config not found"? Я решил эту проблему так:
yum install mariadb-devel
MariaDB - это свободая (GNU General Public License) версия MySQL. Наверное, есть более правильное решение проблемы, но я нашёл это и результат меня устроил.

Пример конфигурационного файла Apache для Django+WSGI

У вас в системе имеется главный конфигурационный файл Apache, путь к нему /etc/httpd/conf И пользовательские конфигурации ваших виртуальных хостов, путь к ним /etc/httpd/conf/vhosts/www-root Т.е. там есть файл с названием, например, mydomain.ru, который нужно будет отредактировать в соответствии с особенностями Django. Пример конфигурационного файла дан ниже.
#user 'www-root' virtual host 'mydomain.ru' configuration file


<VirtualHost xx.xxx.xx.xx:80>
    ServerName mydomain.ru
	ServerAlias www.mydomain.ru
	AssignUserID www-root www-root
	ServerAdmin webmaster@mydomain.ru
	
	WSGIDaemonProcess mydomain.ru python-path=/var/www/www-root/data/django-projects/myproject:/usr/lib/python2.7/site-packages

	Alias /robots.txt /var/www/www-root/data/django-projects/myproject/static/robots.txt
	Alias /favicon.ico /var/www/www-root/data/django-projects/myproject/static/favicon.ico
	Alias /static/ /var/www/www-root/data/django-projects/myproject/static/
	
	<Directory /var/www/www-root/data/django-projects/myproject/static>
		Require all granted
	</Directory>
	
	WSGIScriptAlias / /var/www/www-root/data/django-projects/myproject/myproject/myproject.wsgi
	
	CustomLog /var/www/httpd-logs/mydomain.ru.access.log combined
	ErrorLog /var/www/httpd-logs/mydomain.ru.error.log
	LogLevel debug
	

	<Directory /var/www/www-root/data/django-projects/myproject/myproject>
			Require all granted
	</Directory>

</VirtualHost>
Перезапускаем сервер (это можно сделать из панели управления или командой аpachectl restart в коммандной строке). Если после перезагрузки в списке сервисов (см. в панели управления) нет ни одного процесса httpd — проверяем, что мы написали в конфигурационном файле и исправляем ошибки. Если httpd (один или несколько) есть в списке процессов — сервер работает нормально.

Не забывайте, что после любых изменений в конфигурационном файле и файлах django (кроме шаблонов) сервер необходимо перезагрузить.

Осталось набрать в браузере URL вашего сайта и посмотреть, что из всего этого получилось...

Если с первого раза не все идет гладко — не расстаивайтесь, внимательно пройдитесь по всем моментам процесса настройки и разберитесь, что вы пропустили. Зайдите по FTP и посмотрите, действительно ли все созданные вами папки находятся там, где им предполагается быть.
Я же благодарю всех, кто воспользовался вышеприведенными ссылками и желаю им удач во всех web-начинаниях!

Установка Django + modpython

Наша цель — запустить джанго-проект на freeBSD + Apache + modpython + MySQL + Django SVN (текущая версия из транка).

Этот способ устарел и не применяется в современных системах.

Установка Subversion

Subversion — программа контроля версий. С её помощью мы далее установим Django и его модули и всегда сможем одной командой обновить их до последних версий.

Ставим из портов.
Порты freeBSD — это стандартный набор ПО, тестированного на данной ОС.
Установка из портов - самый быстрый и надежный способ.

cd /usr/ports/devel/subversion
make install clean
Отмечаем только эти 2 опции:
[X] MOD_DAV_SVN mod_dav_svn module for Apache 2.X
[X] NEON WebDAV/Delta-V repository access module

На втором появившемся экране настроек жмем "cancel".

Установка Django

cd /usr/local/lib/python2.5/site-packages
svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk
Создаем символическую ссылку, указывающую, что /django на самом деле нужно искать в /django-trunk/django
ln -s django-trunk/django /usr/local/lib/python2.5/site-packages/django
Далее "подкладываем" ссылку на django-admin.py туда, где система может ее найти.
cd /usr/local/bin
ln -s /usr/local/lib/python2.5/site-packages/django-trunk/django/bin/django-admin.py django-admin.py
Если вы ошиблись при создании ссылки и хотите, чтобы новая ссылка перезаписала уже существующую, используйте ключ f:
ln -fs ...

Установка mysql-python

mysql-python — драйвер, реализующий доступ к MySQL из python.
Ставим из портов.

cd /usr/ports/databases/py-MySQLdb
make install clean
Отмечаем единственную опцию
[X] MYSQLCLIENT_R Use libmysqlclient_r (thread safe)

Установка mod_python

mod_python — модуль python для Apache
Ставим из портов.

cd /usr/ports/www/mod_python3 
make install clean

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

Джанго-код рекомендуется хранить в местах, недоступных по http. В остальном место, куда вы его положите, принципиального значения не имеет. Предположим, ваш пользовательский эккаунт называется myname (существует пользователь myname).

cd /home/myname/data/
mkdir django-apps
Создаем symlink, чтобы иметь отсюда доступ к django:
cd django-apps
ln -s /usr/local/lib/python2.5/site-packages/django-trunk/django django
проверяем, доступен ли здесь django:

python
import django
если сообщений об ошибке не появилось, выходим из коммандной оболочки python коммандой quit()

Если django недоступен, проверяем, имеется ли в папке django-apps ссылка django и действительно ли она ведет туда, куда мы ожидаем. Например, щелкните по ссылке в ftp — если появится ссобщение об ошибке ("файл не найден"), это значит, что ссылка неверна. В WinSCP можно получить окно редактирования символической ссылки, выделив ее и нажав Alt+F6.

Создание django проекта

В папке django-apps создаем папку проекта (например, myproject1) и переносим туда по FTP все имеющиеся у нас файлы и папки из папки нашего django-проекта.

mkdir  myproject1
В эту папку мы переносим наши папки приложений, файлы urls.py, settings.py и т.д.

Чистый проект можно содать командой

python django-admin.py startproject myproject2
Возможная ошибка: No module named django.core
Решение: возвращаемя к пункту "Если django недоступен"

python manage.py syncdb

Установка модулей Django

cd /home/myname/data/django-apps/myproject1/
svn co http://откуда ставить модуль
и т.д.

Установка memcached

memcached реализует кэширование страниц. Установка этого ПО опциональна и не влияет на работоспособность всего остального.
Ставим из портов.

cd /usr/ports/databases/memcached
make install clean
Опцию REPCACHED не отмечаем

Установка python библиотеки для memcached

cd /usr/ports/databases/py-memcached
make install clean
Подробнее о конфигурировании и использовании Django + memcached см. на сайте Django.

Настройка settings.py

Для добавления пути к проекту в system path включите в начале settings.py

import sys
sys.path.append('/home/myname/data/django-apps/myproject1')
Не забудьте, что данные доступа к БД на продакшн сервере скорее всего не такие, как на тестовом сервере.

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

DEBUG = False
Настройте пути к медиа файлам (своим и админки Джанго):
MEDIA_ROOT = '/home/myname/data/www/mydomain.ru/files/'
MEDIA_URL = 'http://mydomain.ru/files/'
ADMIN_MEDIA_PREFIX = '/media/'
Предполагается, что пути к медийным файлам (которые обрабатываются сервером, а не django), указаны в вашем коде как "/files/myimage.jpg", "/files/js/myscript.js" и т.п.

Теперь по URL
http://mydomain.ru/files/myimage.jpg или http://mydomain.ru/files/js/myscript.js сервер будет выдавать соответственно файлы
/home/myname/data/www/mydomain.ru/files/myimage.jpg,
/home/myname/data/www/mydomain.ru/files/js/myscript.js

Теперь нужно создать папку files /home/myname/data/www/mydomain.ru/files и положить туда по FTP свои файлы и папки.

Чтобы админка django нашла свои медийные файлы, нужно будет создать ссылку, связывающую путь /media в URL файлов с их реальным расположением в папке django:

cd /home/myname/data/www/mydomain.ru
ln -s /usr/local/lib/python2.5/site-packages/django-trunk/django/contrib/admin/media media

Настройка httpd.conf

httpd.conf — конфигурационный файл Apache, путь к нему:
/usr/local/etc/apache22/httpd.conf

Рекомендую перед внесением изменений в httpd.conf сохранить его копию в тихом теплом месте. Если вы в нем допустите ошибку, Apache не будет работать и вам пригодится начальная копия для восстановления порядка.

Кстати, ISPmanager (панель управления) позволяет редактировать любые файлы, в том числе этот.

Итак, вносим в httpd.conf команду загрузки мод-питона:

LoadModule python_module libexec/apache22/mod_python.so
Далее дополняем определение вашего виртуального хоста так, чтобы получилось похоже на это:

<VirtualHost 11.222.3.44:80>
	ServerName mydomain.ru
	DocumentRoot /home/myname/data/www/mydomain.ru
	SuexecUserGroup myname myname
	CustomLog /home/httpd-logs/mydomain.ru.access.log combined
	ErrorLog /home/httpd-logs/mydomain.ru.com.error.log
	ServerAlias www.mydomain.ru
	ServerAdmin webmaster@mydomain.ru
	AddDefaultCharset utf8
	......

#Этот блок определяет, что все url (/) обрабатываются mod-python, 
#устанавливает корневую папку нашего джанго-проекта,
#включает вывод сообщений об ошибках mod-python и его рестарт при рестарте сервера,
#добавляет пути к папке наших проектов и к Django в PythonPath
<Location "/">
	SetHandler python-program
	PythonHandler django.core.handlers.modpython
	SetEnv DJANGO_SETTINGS_MODULE myproject1.settings
	PythonOption django.root /myproject1
	PythonAutoReload On
	PythonDebug On
	PythonPath "['/home/myname/data/django-apps', '/usr/local/lib/python2.5/site-packages/django'] + sys.path"
</Location>

#Этот блок определяет, что все пути, начинающиеся на /files, обрабатываются сервером.
#В папке mydomain.ru/files/... хранятся все наши медиа файлы - картинки, css, js, pdf...
<Location "/files">
	SetHandler None
</Location>

#Этот блок определяет, что все пути, начинающиеся на /media, обрабатываются сервером.
#В папке mydomain.ru/media/... как бы хранятся медиа файлы джанго-админ интерфейса.
#На самом деле нет никакой надобности куда-то переносить сами файлы, достаточно
#создать в mydomain.ru/ ссылку media, указывающую на действительное расположение файлов.
<Location "/media">
    SetHandler None
</Location>

#этот блок определяет, что все пути, кончающиеся .jpg .gif и т.д., обрабатываются сервером.
<LocationMatch "\.(jpg|gif|pdf|zip|css|js|ico)$">
    SetHandler None
</LocationMatch>	
	
</VirtualHost>