Django хостинг
Здесь описано как дистанционно установить Django на хостинге, позволяющем это сделать. Я размещаю свои сайты на Django, в том числе и свой сайт стихов, и этот сайт здесь. Это — виртуальный выделенный сервер (VDS) стоимостью от нескольких сотен рублей в месяц. На нем можно разместить любой сайт, требующий установки особого программного обеспечения, в том числе Django сайт. Что такое VDS? VDS — это практически полноценный выделенный сервер, на котором вы — полный хозяин: вы можете установить или удалить любое программное обеспечение, вы можете конфигурировать все, что угодно, под свои нужды, вы можете перезагружать сервер и запускать программы из командной строки или по расписанию. Большой выбор предустановленных операционных систем и программного обеспечения, Root доступ, отличная панель управления, возможность не только разместить множество собственных сайтов, но и перепродавать услуги хостинга, техническая поддержка. При этом ваш сервер не является отдельной физической машиной, но реализован программно, разделяя один физический компьютер с рядом других таких же виртуальных выделенных серверов. Преимущества VDS: вы платите намного меньше, чем стоит аренда выделенного сервера, и при этом имеете полную свободу действий в ваших web-экспериментах. Ограничения данной схемы: вы имеете в распоряжении не все ресурсы, имеющиеся в наличии, а только столько, сколько вы оплатили — объем доступных ресурсов выбирается с помощью конфигуратора при заказе хостинга. Если ваш проект потребует больше ресурсов, их всегда можно добавить. Установка Django + WSGIДалее описан процесс уcтановки Django по SSH на вышеуказанном хостинге. Надеюсь, эта шпаргалка поможет вам устроиться на новом месте быстрее.Наша цель — запустить джанго-проект на CentOS + Apache + MySQL + Django WSGI (Web Server Gateway Interface) на данный момент является стандартом для запуска Django.
Для работы необходим ssh клиент. Я использую putty.
Для работы будет полезен 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_wsgirpm -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-develMariaDB - это свободая (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 и посмотрите,
действительно ли все созданные вами папки находятся там, где им предполагается быть. Установка Django + modpythonНаша цель — запустить джанго-проект на freeBSD + Apache + modpython + MySQL + Django SVN (текущая версия из транка).Этот способ устарел и не применяется в современных системах. Установка SubversionSubversion — программа контроля версий. С её помощью мы далее установим Django и его модули и всегда сможем одной командой обновить их до последних версий.
Ставим из портов. 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". Установка Djangocd /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-pythonmysql-python — драйвер, реализующий доступ к MySQL из python.Ставим из портов. cd /usr/ports/databases/py-MySQLdb make install cleanОтмечаем единственную опцию [X] MYSQLCLIENT_R Use libmysqlclient_r (thread safe) Установка mod_pythonmod_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 Установка модулей Djangocd /home/myname/data/django-apps/myproject1/ svn co http://откуда ставить модульи т.д. Установка memcachedmemcached реализует кэширование страниц. Установка этого ПО опциональна и не влияет на работоспособность всего остального.Ставим из портов. cd /usr/ports/databases/memcached make install cleanОпцию REPCACHED не отмечаем Установка python библиотеки для memcachedcd /usr/ports/databases/py-memcached make install cleanПодробнее о конфигурировании и использовании Django + memcached см. на сайте Django. Настройка settings.pyДля добавления пути к проекту в system path включите в начале settings.pyimport 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 Теперь нужно создать папку 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.confhttpd.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> |