В этом посте покажу как установить Django на CentOS 5.5.
Буду наедятся что Apache у Вас на сервере уже установлен(нужно убедится что Apache был собран с поддержкой модуля mod_rewrite, если нет то пересобрать с ключом –enable-rewrite ), поэтому перейдем сразу к установке самого python. Думаю все знают (раз собрались устанавливать), что Django это фреймворк для python и так как мы собираемся установить последнюю на данный момент версию Django нам понадобится python 2.6 или же 2.7
Итак приступим:
Для начала, добавим репозиторий Epel и установим нужные модули для работы python(установку провожу для платформы i386)
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm |
yum update yum install zlib.i386 zlib-devel.i386 sqlite-devel.i386 gdbm-devel.i386 gdbm.i386 readline.i386 readline-devel.i386 tkinter.i386 tkinter26.i386 cdk.i386 cdk-devel.i386 -y |
Теперь перейдем к установке python2.7 непосредственно(для сборки python2.7 на платформе x86_64 инструкция установки ниже):
Скачать python2.7 можно пройдя по следующей ссылке: http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
Сборки python2.7 на платформе i386:
cd /usr/local/src/ wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz tar xzvf Python-2.7.1.tgz cd Python-2.7.1 ./configure |
по дефолту соберет в /usr/local
make make install |
При сборке конфигурационных файлов(на этапе команды make) выскочит следующее сообщение:
Python build finished, but the necessary bits to build these modules were not found: _bsddb _curses _curses_panel _sqlite3 _tkinter bsddb185 bz2 dbm dl gdbm imageop sunaudiodev |
глобально эти модули на самом python не отобразится поэтому я продолжаю сборку и выполняю команду “make install“, желающие же могут попробовать установить недостающие модули и пересобрать python заново
Сборка python2.7 на платформе x86_64(собирать только так иначе не сможете собрать mod_wsgi как “shared” модуль к Apache):
./configure --enable-shared make make install |
echo "/usr/local/lib" > /etc/ld.so.conf.d/python2.7.conf ldconfig |
Как только python2.7 установлен можно переходить к установки самого Django непосредственно:
Django 1.3 версии можно скачать пройдя по ссылке: http://www.djangoproject.com/download/1.3/tarball/
cd /usr/local/src/ wget http://www.djangoproject.com/download/1.3/tarball/ tar xzvf Django-1.3.tar.gz cd Django-1.3 /usr/local/bin/python2.7 setup.py install |
Собственно после этого установка Django завершена, давайте проверим все ли прошло корректно:
Вызываем интерпретатор python2.7 , для этого из-под рута запускаем путь к бинарнику python2.7:
[root@MOZG Django-1.3]# /usr/local/bin/python2.7 Python 2.7.1 (r271:86832, May 23 2011, 10:22:53) [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> print django.get_version() 1.3 |
Как видим, отдается корректная версия Django, что означает что этот python модуль был установлен правильно, теперь переходим к настройке Apache c Django и соответствующим модулем Apache mod_wsgi
Возможно mod_wsgi у кого-то уже установлен, но к сожалению он был собран для дефолтной версии python2.4 что нам не подходит, поэтому нам нужно пересобрать этот модуль используя ранее установленный python2.7
Итак, скачиваем модуль mod_wsgi используя ссылку http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
cd /usr/local/src/ wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz tar xzvf mod_wsgi-3.3.tar.gz cd mod_wsgi-3.3 |
Теперь чтобы собрать модуль как “shared” нам нужно указать прямой путь к apxs(Apache APR) и путь к бинарнику python2.7, по дефолту путь к apxs должен подтягиваться сам, поэтому я его не указываю
./configure --with-python=/usr/local/bin/python2.7 make make install |
Мы собрали mod_wsgi как “shared” модуль к Apache, теперь нужно подгрузить модуль в самом конфе, для этого просто нужно добавить следующую строку к конфигурационный файл Apache:
LoadModule wsgi_module modules/mod_wsgi.so |
Перезагружаем Apache и проверяем список всех модулей Apache(встроенных и подгруженных) следующей командой:
httpd -M |
ищем следующий модуль: wsgi_module (shared)
если вдруг команда “httpd -M” не работает Вам нужно или явно указывать путь к этому бинарнику Apache(у меня это /usr/local/apache/bin/httpd) или же просто скопировать или сделать символический линк из этого файла в директорию /usr/sbin
Итак модуль wsgi_module установлен и распознается Apache теперь перейдем к настройке Django:
Добавляем юзера из-под которого будем подымать проект Django:
adduser francuz cd /home/ chmod 711 francuz cd /home/francuz/ mkdir public_html cd public_html/ touch .htaccess django.wsgi |
Файлик .htaccess:
DirectoryIndex django.wsgi AddHandler wsgi-script .wsgi RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /django.wsgi/$1 [QSA,PT,L] |
Файлик django.wsgi:
#!/usr/local/bin/python2.7 import os, sys sys.path.append('/home/francuz/public_html') os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() |
Теперь создадим проект Django, находясь в /home/francuz/public_html выполните следующую команду:
/usr/local/bin/django-admin.py startproject mysite cd ../.. chown -R francuz: * |
Теперь перейдем к настройке VirtualHost для созданного юзера:
У меня “голый” Apache и к сожалению никакого домена я еще сюда не направил, поэтому подымать Django буду из-под главного IP адреса:
В самый низ конфа Apache добавляем следующие записи:
Options Indexes ExecCGI FollowSymLinks AllowOverride All Allow from all DocumentRoot /home/francuz/public_html |
Сохраняем и перезагружаем Apache, идем в браузер и вбиваем IP адрес Вашего сервера, должно получится следующее:
Теперь просто нужно создать БД с соответствующим пользователем и паролем и прописать их настройки в файлике
/home/francuz/public_html/mysite/settings.py
и после этого находясь в директории /home/francuz/public_html/mysite/ запустить команду которая создаст супер-пользователя Django Вашего проекта и создаст нужные таблицы в БД:
cd /home/francuz/public_html/mysite/ /usr/local/bin/python2.7 manage.py syncdb |