当前位置: 首页 > 工具软件 > pgAdmin > 使用案例 >

pgadmin4 本地安装部署

锺离自明
2023-12-01

1、介绍

pgAdminPostgreSQL及其相关数据库管理系统的开源管理和开发平台。用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

Centos7 编码编译python3.8

如果使用相对路径的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

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

 

 类似资料: