赞
踩
pgAdmin是PostgreSQL及其相关数据库管理系统的开源管理和开发平台。用Python和jQuery编写,它支持PostgreSQL中的所有功能。
您可以使用pgAdmin执行从编写基本SQL查询到监视数据库和配置高级数据库体系结构的所有操作。
既可以部署为web模式通过浏览器访问,也可以部署为桌面模式独立运行。
安装环境:centos7.8 + pgadmin4.15 + python3.8.1 + httpd2.4.41
下载地址:https://www.postgresql.org/ftp/pgadmin/pgadmin4/
HGCMM使用的是4.15,文件名称:pgadmin4-4.15.tar.gz
如果使用相对路径的python,可以不用做软连接和环境变量,只指定LD_LIBRARY_PATH即可
- #Python目录 /opt/python381
- [root@baidu1 python381]# ./bin/pip3 install virtualenv
-
- #如果提示需要升级pip,那就按照命令升级
- /opt/py381env/bin/python -m pip install --upgrade pip
- [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:可执行文件拷贝副本,而不是软链接。
- [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
- #修改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
- 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就配置完成了。
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。