1、介绍
pgAdmin是PostgreSQL及其相关数据库管理系统的开源管理和开发平台。用Python和jQuery编写,它支持PostgreSQL中的所有功能。
您可以使用pgAdmin执行从编写基本SQL查询到监视数据库和配置高级数据库体系结构的所有操作。
既可以部署为web模式通过浏览器访问,也可以部署为桌面模式独立运行。
安装环境:centos7.8 + pgadmin4.15 + python3.8.1 + httpd2.4.41
2、下载pgadmin4
下载地址:https://www.postgresql.org/ftp/pgadmin/pgadmin4/
HGCMM使用的是4.15,文件名称:pgadmin4-4.15.tar.gz
3、安装python3.8.1
如果使用相对路径的python,可以不用做软连接和环境变量,只指定LD_LIBRARY_PATH即可
4、python安装依赖包
4.1、安装虚拟环境
#Python目录 /opt/python381
[root@baidu1 python381]# ./bin/pip3 install virtualenv
#如果提示需要升级pip,那就按照命令升级
/opt/py381env/bin/python -m pip install --upgrade pip
4.2、创建虚拟环境
[root@baidu1 python381]# pwd
/opt/python381
[root@baidu1 python381]# ./bin/virtualenv -p ./bin/python3 --always-copy --clear /opt/py381env
created virtual environment CPython3.8.1.final.0-64 in 158ms
creator CPython3Posix(dest=/opt/py381env, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
added seed packages: pip==20.2.4, setuptools==50.3.2, wheel==0.35.1
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
[root@baidu1 python381]#
--always-copy:可执行文件拷贝副本,而不是软链接。
4.3、进入虚拟环境
[root@baidu1 python381]# source /opt/py381env/bin/activate
(py381env) [root@baidu1 python381]# which python
/opt/py381env/bin/python
(py381env) [root@baidu1 python381]# which pip3
/opt/py381env/bin/pip3
4.4、安装pgAdmin及其依赖项
#修改2个依赖模块
(py381env) [root@baidu1 python381]# vi /opt/pgadmin4/requirements.txt
#Werkzeug>=0.15.0
Werkzeug==0.16.0
#psycopg2>=2.8
psycopg2-binary>=2.8
#install
(py381env) [root@baidu1 python381]# pip3 install -r /opt/pgadmin4/requirements.txt
...
Successfully installed...
#错误情况1
Collecting psycopg2>=2.8
Using cached psycopg2-2.8.6.tar.gz (383 kB)
ERROR: Command errored out with exit status 1:
Error: pg_config executable not found.
#解决办法(官方不在推荐下载psycopg2,使用psycopg2-binary替代,正在开发psycopg3)
psycopg2-binary>=2.8
#错误情况2
File "/opt/py381env/lib/python3.8/site-packages/flask_wtf/recaptcha/widgets.py", line 5, in <module>
from werkzeug import url_encode
ImportError: cannot import name 'url_encode' from 'werkzeug' (/opt/py381env/lib/python3.8/site-packages/werkzeug/__init__.py)
#解决办法:Werkzeug==0.16.0
5、配置pgadmin4
5.1、创建pgadmin存储目录,日志/会话/存储
mkdir -p /var/lib/pgadmin4/sessions
mkdir -p /var/lib/pgadmin4/storage
mkdir -p /var/log/pgadmin4
将这些目录的所有权更改为非root用户和组。这是必要的,因为它们目前由root用户拥有,但我们将从非root用户拥有的虚拟环境安装pgAdmin,
安装过程涉及在这些目录中创建一些文件。但是,在安装之后,我们会将所有权更改为www-data用户和组,以便将其提供给Web:
chown -R see:see /var/lib/pgadmin4
chown -R see:see /var/log/pgadmin4
确保它具有允许其正确提供Web界面所需的权限和配置。
pgAdmin的主配置文件config.py,它将在任何其他配置文件之前被读取。其内容可用作可在pgAdmin的其他配置文件中指定的其他配置设置的参考点,但为避免无法预料的错误,您不应编辑config.py文件本身。
我们将对一个名为的新文件添加一些配置更改,该文件config_local.py将在主文件之后读取。
(py381env) [root@baidu1 python381]# vim /opt/pgadmin4/web/config_local.py
#内容
LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'
STORAGE_DIR = '/var/lib/pgadmin4/storage'
SERVER_MODE = True
以下是这五个指令的作用:
LOG_FILE
:这定义了将存储pgAdmin日志的文件。SQLITE_PATH
:pgAdmin将用户相关数据存储在SQLite数据库中,该指令将pgAdmin软件指向此配置数据库。由于此文件位于持久目录/var/lib/pgadmin4/
下,因此升级后您的用户数据不会丢失。SESSION_DB_PATH
:指定将用于存储会话数据的目录。STORAGE_DIR
:定义pgAdmin将存储其他数据的位置,例如备份和安全证书。SERVER_MODE
:设置此指令以True
告知pgAdmin在服务器模式下运行,而不是桌面模式。
(py381env) [root@baidu1 python381]# python3 /opt/pgadmin4/web/setup.py
Email address: 345731923@qq.com
Password:
Retype password:
...
pgAdmin 4 - Application Initialisation
======================================
#退出虚拟环境
(py381env) [root@baidu1 python381]# deactivate
[root@baidu1 python381]#
#测试(只限本机),浏览器访问127.0.0.1:5050
(py381env) [root@baidu1 python381]# python3 /opt/pgadmin4/web/pgAdmin4.py
这样,pgAdmin就配置完成了。
6、配置Apache httpd
6.1、pip安装mod_wsgi
yum install -y httpd httpd-devel
[root@baidu1 python381]# pwd
/opt/python381
[root@baidu1 python381]# source /opt/py381env/bin/activate
(py381env) [root@baidu1 python381]# pip3 install mod_wsgi
Collecting mod_Wsgi
Using cached mod_wsgi-4.7.1-cp38-cp38-linux_x86_64.whl
Installing collected packages: mod-Wsgi
Successfully installed mod-Wsgi-4.7.1
#wsgi位置
(py381env) [root@baidu1 python381]# mod_wsgi-express install-module
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
WSGIPythonHome "/opt/python381"
(py381env) [root@baidu1 python381]#
6.2、源码编译Apache httpd
6.3、修改httpd.conf
<IfModule unixd_module>
#前面授权的用户
User see
Group see
# for pgadmin4
LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so
WSGIPythonHome "/opt/py381env"
Listen 6060
Define ROOT "/opt"
<VirtualHost *:6060>
WSGIScriptAlias / ${ROOT}/pgadmin4/web/pgAdmin4.wsgi
WSGIDaemonProcess pgadmin processes=1 threads=25
<Directory ${ROOT}/pgadmin4/web>
Require all granted
</Directory>
</VirtualHost>
保存退出。
7、启动
7.1、使用普通用户启动
sudo ./bin/apachectl -f ./conf/httpd.conf -k start
#页面报错查看日志
tail -f ./logs/error.log
7.2、打开浏览器,输入http://localhost:6060即可看到pgadmin4界面
#Apache httpd日志错误:the CSRF token do not match
解决办法:这种情况一般出现在离线版的pgadmin,原因是Apache httpd依赖apr、apr-util、pcre,如果环境变量找不到这几个就会出现token无法验证的情况。
#[mpm_worker:alert] [pid 7967:tid 281473025372592] (11)Resource temporarily unavailable: AH03142: apr_thread_create: unable to create worker thread
解决办法:环境变量没有配置apr、apr-uitl、prce的lib
[wsgi:alert] [pid 15183:tid 281472937192016] (13)Permission denied: mod_wsgi (pid=15183): Couldn't bind unix domain socket '/run/httpd/wsgi.15183.0.1.sock'.
解决办法:没有权限设置sock文件,设置一个属性即可。WSGISocketPrefix /var/run/wsgi
详情见:https://modwsgi.readthedocs.io/en/master/user-guides/configuration-issues.html