Настраиваем связку apache2, mod_wsgi, django под ubuntu, centos

В этом посте опишу последовательность шагов для установки связки apache2,mod_wsgi 3.2django 1.1 под ubuntu 9.10 и centos 5.4.

Под ubuntu 9.10

Ставим apache2

Устанавливаем apache2 и сопутствующие модули:

sudo apt-get install apache2 apache2.2-common apache2-mpm-prefork apache2-utils libexpat1 ssl-cert build-essential

Ставим mod_wsgi

Подготовки перед сборкой mod_wsgi 3.2 для apache2.

cd ~/sourceswget http://modwsgi.googlecode.com/files/mod_wsgi-3.2.tar.gztar xvfz mod_wsgi-3.2.tar.gzcd mod_wsgi-3.2/

Что бы при сборке не ругалось на отсутствующий apxs и ошибку вида make: *** [mod_wsgi.la] Error 1 устанавливаем два дополнительных пакета:

sudo apt-get install python-dev apache2-prefork-dev

После всех подготовок собираем и ставим mod_wsgi.

./configuremakesudo checkinstall

Говорим апачу о новом модуле и активируем его.

sudo echo "LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so" > /etc/apache2/mods-available/wsgi.loadsudo a2enmod wsgi

Ставим mysql

sudo apt-get install mysql-server python-mysqldb mysql-client

После установки должно предложить ввести root'овый пароль, если нет то вводим:

mysqladmin -u root password [PASSWORD]

Ставим расширения для python

sudo apt-get install python-setuptoolseasy_install virtualenveasy_install virtaulenvwrappereasy_install pip

Ставим django 1.1

Скачиваем последнюю стабильную версию и распаковываем:

cd ~/sources                                                    wget http://www.djangoproject.com/download/1.1/tarball/tar xzf Django-1.1.tar.gz -C /opt/

Смотрим где у нас лежат все модули для python.

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

Делаем симлинк на распакованную ранее django в папку с модулями python.

sudo ln -s /opt/Django-1.1/django /usr/lib/python2.6/dist-packages

Делаем django-admin.py видимым отовсюду.

sudo ln -s /opt/Django-1.1/django/bin/django-admin.py /usr/bin

Проверяем установленную django.

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

Должно вернуть что-то похожие.

(1, 1, 0, 'final', 0)

Создаем тестовый проект blog.local

cd /var/www/mkdir myblogcd myblog/mkdir -p static logs .python-eggsdjango-admin.py startproject blog

Добавляем URL myblog.local в /etc/hosts

sudo echo "127.0.0.1    myblog.local" >> /etc/hosts

В папке /etc/apache2/sites-available/ создаем файл myblog.conf с таким содержимым:

ServerName myblog.localCustomLog /var/www/myblog/logs/access_log combinedErrorLog /var/www/myblog/logs/error_logAlias /media /opt/Django-1.1/django/contrib/admin/mediaAlias /static /var/www/myblog/staticWSGIScriptAlias / /var/www/myblog/myblog.wsgiWSGIDaemonProcess myblog.local processes=7 threads=1 display-name=%{GROUP}

В папке /var/www/myblog/ создаем файл myblog.wsgi:

import os, syssys.path.append('/var/www/myblog/blog')os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'os.environ['PYTHON_EGG_CACHE'] = '/var/www/myblog/.python-eggs'import django.core.handlers.wsgiapplication = django.core.handlers.wsgi.WSGIHandler()

Активируем новый сайт и перегружаем апач:

sudo a2ensite myblog.confsudo apache2ctl restart

Под centos 5.4

Ставим нужные пакеты:

sudo yum install httpd-devel gdbm-devel mysql mysql-server mysql-devel mysql-client sudo yum install readline-devel sqlite-devel openssl-devel ncurses-develsudo yum install apr-devel gcc make autoconf mod_ssl crypto-utilssudo yum install bzip2-devel zlib-devel libjpeg libpng libxslt gettext

Ставим новый python

По умолчанию с centos 5.4 идет python 2.4.3, обновим его до python 2.6.4.

cd ~/sourceswget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgztar xvfz Python-2.6.4.tgzcd Python-2.6.4/

Собираем новый python.

./configure --prefix=/opt/python2.6 --with-threads --enable-shared --with-zlib=/usr/includemake make install

Делаем python2.6 видимый для всех. Создаем файл /etc/ld.so.conf.d/opt-python2.6.conf и пишем в него /opt/python2.6/lib.

ln -s /opt/python2.6/lib/libpython2.6.so /usr/libln -s /opt/python2.6/lib/libpython2.6.so.1.0 /usr/libldconfig -v

Делаем симлинк на новую версию python.

ln -s /opt/python2.6/bin/python /usr/bin/python2.6

Ставим setuptools.

cd ~/sourceswget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.eggsh setuptools-0.6c11-py2.6.egg --prefix=/opt/python2.6

Ставим MySQLdb.

cd ~/sourceswget http://downloads.sourceforge.net/project/mysql-python/mysql-python-test/1.2.3c1/MySQL-python-1.2.3c1.tar.gztar xvfz MySQL-python-1.2.3c1.tar.gzcd MySQL-python-1.2.3c1/python setup.py buildpython setup.py install

Проверяем MySQLdb.

python2.6 -c "import MySQLdb"

Если все ок, то ничего не должно вернуть.

Ставим mod_wsgi

Установка.

cd ~/sourceswget http://modwsgi.googlecode.com/files/mod_wsgi-3.2.tar.gztar xvfz mod_wsgi-3.2.tar.gzcd mod_wsgi-3.2/./configure --with-python=/opt/python2.6/bin/python2.6makemake install

Что бы apache2 (или httpd под centos) увидел mod_wsgi надо добавить в httpd.conf:

LoadModule wsgi_module /usr/lib/httpd/modules/mod_wsgi.so

Ставим django 1.1

Скачиваем последнюю стабильную версию и распаковываем:

cd ~/sources                                                    wget http://www.djangoproject.com/download/1.1/tarball/tar xzf Django-1.1.tar.gz -C /opt/

Смотрим где у нас лежат все модули для python.

python2.6 -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

Делаем симлинк на распакованную ранее django в папку с модулями python.

ln -s /opt/Django-1.1/django /opt/python2.6/lib/python2.6/site-packages/

Делаем django-admin.py видимим отовсюду.

ln -s /opt/Django-1.1/django/bin/django-admin.py /usr/bin

Проверяем установленную django.

python2.6 -c "import django; print django.VERSION;"

Должно вернуть что-то похожие.

(1, 1, 0, 'final', 0)

Создаем тестовый проект blog.local

cd /var/www/mkdir myblogcd myblog/mkdir -p static logs .python-eggsdjango-admin.py startproject blog

Добавляем URL myblog.local в /etc/hosts

echo "127.0.0.1 myblog.local" >> /etc/hosts

В папке /etc/httpd/conf.d/ создаем файл myblog.conf с таким содержимым:

ServerName myblog.localCustomLog /var/www/myblog/logs/access_log combinedErrorLog /var/www/myblog/logs/error_logAlias /media /opt/Django-1.1/django/contrib/admin/mediaAlias /static /var/www/myblog/staticWSGIScriptAlias / /var/www/myblog/myblog.wsgiWSGIDaemonProcess myblog.local processes=7 threads=1 display-name=%{GROUP}

В папке /var/www/myblog/ создаем файл myblog.wsgi :

import os, syssys.path.append('/var/www/myblog')os.environ['DJANGO_SETTINGS_MODULE'] = 'blog.settings'os.environ['PYTHON_EGG_CACHE'] = '/var/www/myblog/.python-eggs'import django.core.handlers.wsgiapplication = django.core.handlers.wsgi.WSGIHandler()

Перегружаем апач:

service httpd restart

После этого всего у меня ругалось на ошибку 500 Internal Server Error, а в логе писало ImportError и ругалось Persmission denied на либу _functools.so. Вылечилось отключением SELinux в Text Mode Setup Utility (команда setup).

You should also read:

Настраиваем ленту RSS WordPress с картинками.

RSS новости - Как в RSS вставить картинки

В се­го­дняш­нем по­сту я хо­чу рас­ска­зать Вам о том, как при­дать Ва­ше­му Rss-по­то­ку на­гляд­но­сти, а имен­но: как в RSS вста­вить кар­тин­ки. Это су­ще­ствен­но по­вы­сит при­вле­ка­тель­ность и ин­фор­ма­тив­ность Ва­шей Rss лен­ты и ста­нет до­пол­ни­тель­ным спо­со­бом удер­жа­ния чи­та­те­лей и при­вле­че­ния но­вых по­се­ти­те­лей. Есте­ствен­но, опи­сан­ный ни­же ме­тод бу­дет ра­бо­тать в Rss но­во­стях на са­мом WordPress и с ка­на­лом Feedburner.

обновление php с 5.1.6 до 5.2.17 CentOS

Oбновление php с 5.1.6 до 5.2.17 CentOS 5

Для начала добавим репозиторий

 wget -q -O - http://www.atomicorp.com/installers/atomic | sh 

По умолчанию в репозитории устанавливается PHP 5.3 необходимо исключить эту версию из обновления

открываем конфиг репозитория

Дата и время в CentOS

В любой операционной системе, на любом компьютере нельзя обойтись без использования точного времени и даты. Особенно это важно  системным администраторам, ведь все логи событий упорядочены именно по дате и времени.

Чтобы просмотреть время в Linux достаточно набрать команду:

 date

После чего нам будет показаны  текущий день недели, месяц, время и год.

Сбт Фев 13 02:09:28 EET 2010

Установка PhpMyAdmin на CentOS

PhpMyAdmin представляет собой Веб-интерфейс для администрирования СУБД MySQL. В принципе, в повальном большинстве случаев, его можно установить - просто скачав архив с сайта, распокавать и поместить в корень веб сервера. Но есть одна маленькая деталь. Последнии версии требуют версию PHP не ниже 5.2. А у нас так получилось, что она 5.1.