У меня есть VPS с установленным PostgreSQL. У меня есть установка nginx с кучей обратных прокси для различных инструментов, графаны, сайтов Node.js и так далее. Я пытаюсь настроить PostgreSQL прямо сейчас, и я просто не могу разработать веб-инструмент администрирования, доступный извне.
Я пробовал установить обычный pgAdmin с хостингом Apache2, но этот очевидный факт. конфликтует с nginx. Я пытался найти хорошее руководство по pgAdmin за обратным прокси-сервером nginx, но единственный, который я нашел ( https://github.com/rbernardes/nginx-pgadmin ), вообще не работал, когда Я попытался запустить скрипт конфигурации py. Я мог бы погрузиться в это сложнее, но моя точка зрения в том, что pgAdmin, похоже, не очень хорошо работает с nginx, и я думал, что существует наиболее подходящая альтернатива для Интернета? Но здесь вроде суховато ...
Кто-нибудь может пролить свет на это? Спасибо!
пытался установить обычный pgAdmin с хостингом Apache2, но это очевидно. конфликтует с nginx
, этого не будет, если вы настроите Apache2 для прослушивания другого порта, который nginx не использует.
pgAdmin, похоже, плохо работает с nginx
установите и настройте uWSGI с помощью приложения pgAdmin, затем настройте nginx на использование uwsgi_pass
для связи с uWSGI.
Edit 2020-05-10: Дополнительные подробности и информация
Здесь есть два решения: либо использовать nginx + uwsgi_pass
, либо Apache httpd + mod_proxy_wsgi. Давайте углубимся в оба.
Python и заголовки для разработки Python
Установите Python и совместимые с ним заголовки для разработки, предпочтительно Python >=3.6. Библиотеки PCRE 3 необходимы для того, чтобы uwsgi мог обрабатывать маршрутизацию регулярных выражений.
$ sudo apt-get update && apt-get -y install build-essential python3 python3-dev libpcre3-dev libpcre3
Виртуальная среда Python
Установите pgAdmin в виртуальной среде, будь то venv
, virtualenv
, conda
, даже что угодно; просто чтобы убедиться, что ваш менеджер пакетов ОС не будет мешать вашей среде python (версиям, пакетам и т. д.).
Если вы используете venv
, это должно быть что-то вроде
$ cd /path/to/working_directory # Установите виртуальную среду в .env и активируйте ее. $ python3 -m venv .env $ источник .env/bin/активировать # обновить существующие пакеты pip и установить колесо. (.env) $ pip install --upgrade pip setuptools (.env) $ pip установить колесо # установить pgAdmin 4.21 (.env) $ установка pip https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v4.21/pip/pgadmin4-4.21-py2.py3-none-any.whl
Чтобы ваш веб-сервер мог подключиться к pgAdmin, вы будете использовать WSGI или HTTP-сервер. pgAdmin поддерживает uWSGI и Gunicorn.
Здесь мы будем использовать uWSGI, но если вы используете другой сервер WSGI, просто убедитесь, что он прослушивает сокет UNIX /tmp/wsgi/pgadmin.sock
Во-первых, вам понадобится для установки uWSGI. Вы можете установить uWSGI с помощью apt-get
или с помощью pip
.
Оба в порядке; но с pip
вам нужно будет написать свой собственный служебный файл; а с помощью apt-get
вам нужно будет признать, что вы используете более старую версию uWSGI.Мы установим оба, используя служебный файл, распространяемый Ubuntu, и последнюю версию, распространяемую pip uwsgi
, двоичный файл
Установить распространяемый Ubuntu uwsgi $ sudo apt-get -y установить uwsgi Установите pip-распределенный uwsgi $ источник /путь/к/рабочему_каталогу/.env/bin/активировать (.env) $ pip установить uwsgi # Распространяемая Ubuntu версия (.env) $ /usr/bin/uwsgi --версия 2.0.15-дебиан # pip-распределенная версия (.env) $ uwsgi --версия 2.0.18 # служебный файл (.env) $ ls /etc/init.d/uwsgi /etc/init.d/uwsgi
Далее мы настроим pgAdmin для uWSGI. Вам нужно снова попасть в нашу виртуальную среду. Мы примерно следуем этому официальному руководству pgAdmin.
Сначала создайте локальную конфигурацию.
$ cd /path/to/working_directory/.env/lib/python3.6/site-packages/pgadmin4 $ cp config.py config_local.py $ vim config_local.py
Обратите внимание, что вы можете следовать документации pgAdmin, но мы можем просто отредактировать DATA_DIR = '/var/lib/pgadmin'
на что-нибудь разумное, потому что все остальное будет ссылаться на DATA_DIR
. Здесь мы используем /path/to/working_directory/lib
Далее создадим необходимые каталоги pgAdmin
$ sudo mkdir -p /var/log/pgadmin $ mkdir /path/to/working_directory/lib
/var/log/pgadmin
и DATA_DIR
должны полностью контролироваться uWSGI, поскольку pgAdmin будет работать под управлением uWSGI. Здесь мы будем использовать www-data
в качестве пользователя и группы uWSGI.
$ sudo chown www-data:www-data /var/log/pgadmin /path/to/working_directory/lib
Обратите внимание, что нам нужно разрешить запись в /var/log/pgadmin
и DATA_DIR
, чтобы разрешить настройку. Сейчас мы разрешаем запись только нашему пользователю, и мы исправим это разрешение позже.
$ sudo chmod 777 /var/log/pgadmin /path/to/working_directory/lib
Войдите в нашу виртуальную среду и запустите setup.py
pgAdmin.
$ источник /путь/к/рабочему_каталогу/.env/bin/активировать (.env) $ cd /path/to/working_directory/.env/lib/python3.6/site-packages/pgadmin4 (.env) $ установка Python.пи
Следуйте инструкциям по настройке, пока они не будут завершены, и запишите свой адрес электронной почты и пароль, созданные здесь.
Затем исправьте разрешения /var/log/pgadmin
и DATA_DIR
.
$ chmod 755 /var/log/pgadmin /path/to/working_directory/lib $ chown -R www-data:www-data /var/log/pgadmin /path/to/working_directory/lib
pgAdmin уже должен быть полностью настроен.
Теперь мы готовы интегрировать pgAdmin и uWSGI, создав сервер WSGI, который прослушивает сокет UNIX /tmp/wsgi/pgadmin.sock
.
Сначала с помощью вашего любимого редактора создайте файл конфигурации uWSGI в /etc/uwsgi/apps-available
. Назовем его pgadmin.ini
.
$ sudo vim /etc/uwsgi/apps-available/pgadmin.ini
Он должен содержать как минимум:
[uwsgi]
socket = /tmp/wsgi/pgadmin.sock
chdir = /path/to/working_directory/.env/lib/python3.6/site-packages/pgadmin4
manage-script-name = true
venv = /path/to/working_directory/.env/
master = true
processes = 1
threads = 4
mount = /=pgAdmin4:app
log-format = %(addr) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)"
logger = file:/tmp/wsgi/pgadmin-access.log
uid = www-data
gid = www-data
создание необходимых каталогов и включение нашего приложения pgAdmin uWSGI
$ sudo mkdir -p /tmp/wsgi $ sudo chown www-данные:www-данные /tmp/wsgi $ sudo ln -s /etc/uwsgi/apps-available/pgadmin.ini /etc/uwsgi/apps-enabled/pgadmin.ini
скопируйте файл uWSGI по умолчанию в другой служебный файл и отредактируйте его, чтобы использовать установленный pip двоичный файл uWSGI.
$ sudo cp /etc/init.d/uwsgi /etc/init.d/uwsgi-venv $ vim /etc/init.d/uwsgi-venv # замените DAEMON="/usr/bin/uwsgi" на DAEMON="/path/to/working_directory/.env/bin/uwsgi
Настройка uWSGI должна быть выполнена.
Теперь попробуйте запустить uWSGI.
$ sudo service uwsgi-venv start pgadmin
Здесь pgadmin
относится к тому, на что мы ранее ссылались в /etc/uwsgi/apps-enabled
. Если вы связали его как pgadmin.ini
, вы будете использовать pgadmin
.
Проверьте, запущен ли uWSGI.
$ пс -eF | grep uwsgi www-данные 10582 1 2 32144 91480 0 03:56 ? 00:00:03 /путь/к/рабочему_каталогу/.env/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/pgadmin.ini -- демонизировать /var/log/uwsgi/app/pgadmin.log www-данные 10593 10582 0 87443 2640 0 03:56 ? 00:00:00 /путь/к/рабочему_каталогу/.env/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/pgadmin.ini -- демонизировать /var/log/uwsgi/app/pgadmin.log
Если вы не установили nginx, установите его с помощью apt-get
.
$ sudo apt-get -y установить nginx
Если вы уже установили nginx, вам может потребоваться изменить некоторые настройки. Дайте мне знать, если у вас возникли проблемы тогда.
Далее давайте настроим nginx так, чтобы он передавал любые запросы к uWSGI, который мы настроили ранее.
В каталоге /etc/nginx/sites-available
создайте новый файл конфигурации nginx. Здесь мы используем pgadmin.local
в качестве имени виртуального хоста.
$ sudo vim /etc/nginx/sites-available/pgadmin.conf
Этот файл конфигурации должен выглядеть примерно так:
server { слушать 80; имя_сервера pgadmin.local; место расположения / { включить /etc/nginx/uwsgi_params; uwsgi_pass unix:/tmp/wsgi/pgadmin.sock; } }
Если вам нужно прослушивать другой порт, измените listen 80;
на listen
.
Включите эту конфигурацию.
$ sudo ln -s /etc/nginx/sites-available/pgadmin.conf /etc/nginx/sites-enabled/pgadmin.конф
Протестируйте и перезагрузите новую конфигурацию nginx.
$ sudo nginx -t && sudo service nginx перезагрузить
В зависимости от вашей конфигурации после этого вам может потребоваться настроить брандмауэр, но после этого вы сможете просматривать настроенный виртуальный хост с помощью своего любимого браузера.
$ firefox http://pgadmin.local
Здесь нет большой разницы между конфигурацией httpd и nginx, вам просто нужно перенаправить HTTP-запрос как запрос WSGI на серверную часть WSGI, в данном случае, используя mod_proxy_wsgi.
Сначала установите httpd, если вы еще не установили его.
$ sudo apt-get -y установить apache2 apache2-utils
Если вы уже установили httpd, вам может потребоваться изменить некоторые настройки. Дайте мне знать, если у вас возникли проблемы тогда.
Не забудьте установить mod-proxy и mod-proxy-uwsgi, так как оба эти модуля необходимы.
$ sudo apt-get -y установить libapache2-mod-proxy-uwsgi
Далее давайте настроим httpd для передачи любых запросов к uWSGI, который мы настроили ранее.
В каталоге /etc/apache2/sites-available
создайте новый файл конфигурации виртуального хоста. Здесь мы используем pgadmin.local
в качестве имени виртуального хоста.
$ sudo vim /etc/apache2/sites-available/pgadmin.conf
Этот файл конфигурации должен выглядеть примерно так:
Имя сервера pgadmin.local ProxyRequests отключены ProxyPass "/" "unix:/tmp/wsgi/pgadmin.sock|uwsgi://localhost/" виртуальный хост>
Если вам нужно прослушивать другой порт, вам потребуется несколько изменений.
Замените
на
в /etc/apache2/ports.conf
,удалите все ненужные Listen
, включая те, что находятся в
, и добавьте Listen
.
Если у вас по-прежнему включен сайт по умолчанию, отключите его с помощью a2dissite
.
Включите эту конфигурацию.
$ sudo ln -s /etc/apache2/sites-available/pgadmin.conf /etc/apache2/sites-enabled/pgadmin.conf
Включить mod_proxy и mod_proxy_uwsgi
$ sudo a2enmod proxy proxy_uwsgi
Протестируйте и перезагрузите новую конфигурацию httpd.
$ sudo apachectl configtest && sudo service apache2 reload
В зависимости от вашей конфигурации после этого вам может потребоваться настроить брандмауэр, но после этого вы сможете просматривать настроенный виртуальный хост с помощью своего любимого браузера.
$ firefox http://pgadmin.local