config.py:
# NOTE: This is NOT recommended for production use, only for debugging
# or testing. Production installations should be run as a WSGI application
# behind Apache HTTPD.
Я был несколько удивлён тому, что в сети довольно таки мало информации по поводу того, как по-человечески развернуть pgadmin4, чтобы работать с ним через веб интерфейс. Особенно остро этот вопрос стоит у админов, которые хотят по каким-либо причинам, перелезть на postgresql или же просто осваивают его с нуля.
В статье я разложу по полочкам, что да как делается.
Для работы мы будем использовать ОС OpenBSD.
Нам понадобятся следующие пакеты:
Код: Выделить всё
pkg_add apache-httpd ap2-mod_wsgi postgresql-server py-pip py-virtualenv bash
Все остальные нужные пакеты потянутся к этим пакетам как зависимые.
После чего нам потребуется скачать самую свежую версию pgadmin4 отсюда: https://www.pgadmin.org/download/pgadmin-4-python-wheel/
На момент написания статьи это файлик pgadmin4-2.1-py2.py3-none-any.whl
Теперь незнающему человеку следует понять, что мы собирается делать. Pgadmin-это веб приложение! И сборки, доступные на сайте или в дистрибутивах, это на самом деле интерфейс, который всё равно будет открывать веб приложение.
В следующих шагах мы создадим для пгадмина виртуальное окружение на базе питона (virtualenv), и в это виртуальное окружение установим пгадмин. У пгадмина должна быть своя папка с данными, в которую он будет записывать информацию. Это тоже будет рассмотрено дальше. Может быть на этом этапе всё звучит сложно, но это не так, и я надеюсь дальше станет понятнее.
Для того, чтобы создать виртуальное окружение, нам нужно найти место, где файловая система смонтирована с флагом wxallowed, иначе питон не запустится. (Эта часть разумеется касается только OpenBSD, для Linux можно сразу переходить к созданию виртуального окружения) У нас есть несколько путей решения данного вопроса:
1) Установить pgadmin прямо в /usr/local. Плюсы: ничего не надо править в fstab. Минусы: разводим мусор в системе.
2) Смонтировать /home с флагом wxallowed, как самый тостый раздел и поставить pgadmin туда. Плюсы: не очень сильно замусорим систему. Минусы: небольшая дыра в безопасности.
3) На мой взгляд, самый идеальный способ: добавить в систему диск, откусить от него маленький кусочек под pgadmin и смонтировать этот раздел например на /opt, и туда поставить pgadmin. Плюсы: вообще не замусорена система, дыры в безопасности минимизированы. Минусы: расточительное использование диска.
В данный момент у меня /home смонтирован с флагом wxallowed и можно работать на этой базе.
Создадим виртуальное окружение:
Код: Выделить всё
cd /home
virtualenv pgadmin4
Если проблем нет, вы увидите сообщение, что в виртуальное окружение установлен python, pip и прочие прелести.
Теперь, чтобы работать с этим окружением, нам нужно взять его системные переменные. К сожалению, эта фича работает только в bash, поэтому сначала запустим баш, а из него окружение:
Код: Выделить всё
bash
source ./pgadmin4/bin/activate
Мы увидим, что в строке приглашения появилось название окружения. В него нужно установить пгадмин, вот таким незатейливым образом (подразумевается что whl файлик уже скачан и лежит в домашней директории юзера kasak):
Код: Выделить всё
pip install ~kasak/pgadmin4-2.1-py2.py3-none-any.whl
Готово. Само приложение установлено, давайте теперь настроим pgadmin. Ему нужна папка, в которую он может писать логи и сессии, и поскольку он будет запускаться апачем, доступ к этой папке должен быть у апача. Давайте создадим эту папку например в /var/www, раз уж там лежит всё связанное с апачем.
Код: Выделить всё
mkdir /var/www/pgadmin4
Следующим шагом давайте создадим файл конфигурации для пгадмин. Для этого перейдям в директорию его установки:
Код: Выделить всё
cd /home/pgadmin4/lib/python2.7/site-packages/pgadmin4/
В этой директории уже находятся файлы config.py и config_distro.py, их трогать мы не будем, а как и положено по инструкции создаём свой конфиг config_local.py со следующим содержимым:
Код: Выделить всё
# cat config_local.py
LOG_FILE = '/var/www/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/www/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/www/pgadmin4/sessions'
STORAGE_DIR = '/var/www/pgadmin4/storage'
Теперь когда конфиг готов, нужно запустить setup.py:
Код: Выделить всё
python setup.py
Сетап попросит нас ввести e-mail и пароль для доступа к pgadmin. Придумываем и вводим. Обратите внимание, что это не то же самое, что логин и пароль от postgresql, как было например в phpmyadmin, когда для доступа мы использовали логин и пароль самой базы, данный логин будет служить для доступа именно в пгадмин через веб интерфейс.
Теперь можно деактивировать наше окружение, и выйти из баша, кому больше нравится ksh:
Код: Выделить всё
deactivate
exit
Сейчас наш пгадмин готов к работе, нужно лишь подружить с ним апача. Для этого, прежде всего, не забудьте изменить владельца директории куда пгадмин пишет данные:
Код: Выделить всё
chown -R www:www /var/www/pgadmin4
Владельца /home/pgadmin4 менять не нужно, он может оставаться кем захочет.
В OpenBSD апач по дефолту читает conf файлики в директории /var/www/conf/modules
для включения mod_wsgi можем создать там файл например wsgi.conf с содержимым:
Код: Выделить всё
# cat /var/www/conf/modules/wsgi.conf
LoadModule wsgi_module /usr/local/lib/apache2/mod_wsgi.so
Теперь нужно настроить virtualhost с нужными опциями.
Поскольку я сейчас работаю с пустым, коробочным конфигом апача, для начала я раскоментирую эту строку в httpd.conf:
Код: Выделить всё
# cat /etc/apache2/httpd2.conf | grep vhosts
Include /etc/apache2/extra/httpd-vhosts.conf
по умолчанию она закоментирована.
а в httpd-vhosts.conf нужно создать вихост вот с такими параметрами:
Код: Выделить всё
<VirtualHost *:80>
ServerName foo
WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/home/pgadmin4
WSGIScriptAlias / /home/pgadmin4/lib/python2.7/site-packages/pgadmin4/pgAdmin4.wsgi
<Directory /home/pgadmin4/lib/python2.7/site-packages/pgadmin4>
WSGIProcessGroup pgadmin
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost>
Вот на этом месте читателю следует быть предельно осторожным! Внимательно, и ещё более !!!внимательно!!! Смотрите на пути которые прописываете. Путь довольно таки длинный, и можно упустить какую-нибудь циферку. Если проверили трижды, проверьте четырежды. Если есть сомнения, делайте pwd из директории с пгадмином и копируйте. Если всё ещё что-то не работает, смотрите лог в /var/www/logs/error_log
Если всё пошло по плану, то в браузере мы увидим приглашение к вводу емейла и пароля для пгадмин. Залогинившись, нужно в пгадмин прописать сервер postgresql, с которым будем работать.
Я надеюсь что описал всё дотошно и достаточно понятно чтобы начать работу с pgadmin. Буду очень рад если помог вам в освоении postgresql.