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
На этом, пожалуй, всё. Как обычно — удачи в работе.