Gentoo: Apache + Python (mod_python) + PostgreSQL

Ввиду разнообразия личной жизни, я последние пару месяцев авктивно изучаю Python (с огромной помощью господина Перлина), но несмотря на то что я делаю упор на консольные скрипты (по крайней мере на данный момент), работа с вебом так же интересна, а для этого нам необходимо полноценный веб-сервер с поддержкой python. Его настройкой мы сегодня и будем заниматься.

Для начала нам нужно поправить USE флаги для apache

korp # nano /etc/portage/package.use
www-servers/apache apache2 ssl threads

Для всего остального я оставляю параметры по-умолчанию.

korp # emerge -av apache mod_python postgresql-base psycopg

Пакет psycopg понадобится для работы с postgres из python`а
Переходим к настройке apache:

korp # nano /etc/apache2/modules.d/00_default_settings.conf
ServerName korpserver

korp # nano /etc/apache2/vhosts.d/default_vhost.include
<directory ⁄var⁄www⁄localhost⁄htdocs/>
        AddHandler python-program .py
        PythonHandler mod_python.publisher
        PythonDebug On
        Order allow,deny
        Allow from all
</directory>
korp # nano /etc/conf.d/apache2

в директиве APACHE2_OPTS добавить -D PYTHON

Теперь настроим PostgreSQL
Зададим пароль для пользователя postgres

korp # passwd postgres

Сконфигурируем

korp # emerge --config dev-db/postgresql-server:9.2

Запускаем и добавляем в автозагрузку

korp # /etc/init.d/apache2 start
korp # rc-update add apache2 default
korp # /etc/init.d/postgresql-9.2 start
korp # rc-update add postgresql-9.2 default

Теперь создадим тестовый файл, которым проверим что у нас работает веб-сервер, исполняет python`овские скрипты и работает база и соединение с ней.

korp # nano /var/www/localhost/htdocs/index.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from mod_python import apache
import psycopg2

def index():
    connection = psycopg2.connect(host='localhost', port = 5432, dbname = 'postgres', user = 'postgres', password = '123')
    conn = connection
    curr = conn.cursor()
    return "Hello world"

Теперь проверяем, зайдя браузером http://localhost/index.py/index и если всё настроено правильно, мы должны увидеть заветный Hello world 🙂

Остаётся добавить что после установки postgresql, «по умолчанию» существует только пользователь postgres с максимальными правами на базу. Аналогично root`у в самой системе. Так как под root`ом мы не работаем, так же мы не работаем и под пользователем postgres с базой данных. Создадим нового пользователя и создадим ему для работы базу данных.
При помощи sudo (если до сих пор не установлено — установите, крайне полезная утилита, о которой я расскажу в ближайшее время) переходим под учётную запись пользователя postgres

korp # sudo postgres

Создаём пользователя с максимальными правами на создаваемую базу данных

korp # createuser korp

Теперь нам необходима утилита psql, что бы задать пароль для создаваемого пользователя

korp # psql
alter user korp with password '123';
exit

Создаём базу данных

korp # createdb testdb -h localhost -U korp

На этом, пожалуй, всё. Как обычно — удачи в работе.

Добавить комментарий