Запуск pgadmin4 на платформе OpenBSD (Openbsd pgadmin4 wsgi apache)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
kasak
Сообщения: 880
ОС: OpenBSD

Запуск pgadmin4 на платформе OpenBSD

Сообщение kasak » 16.01.2018 16:25

Вместо предисловия:
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.
Linux fedora 4.14.11-300.fc27.x86_64 #1 SMP Wed Jan 3 13:52:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали: