一、前言
本人使用CentOS7系统,想安装pgadmin管理系统,方便PG数据库的操作,采用官方的yum的安装方式虽然也很简单,安装的文件放地位置有好几个,感觉不爽,并且还要给我安装上httpd,关键是我用的nginx,总不能搞两个web服务,强迫症的我接收不了所以就自己动手了。
下面附上安装的地址:
https://www.pgadmin.org/download/pgadmin-4-rpm/
二、安装pgadmin4
2.1 创建 pgAdmin4 的项目目录
mkdir -p /home/www/pgadmin4
cd /home/www/pgadmin4
2.2 创建 python3 虚拟目录
不想污染系统的python环境建议为pgadmin建立独立的虚拟环境,以后升级更新页方便
virtualenv env
2.3 激活python虚拟环境
一定要激活, 否则后续的操作都回反应在系统环境上的
source env/bin/activate
2.4 更新PIP
其实不更新也可以,有的包可能检测不到,不一定你会碰上!
pip install --upgrade pip
2.5 安装pgadmin4
现在进入主题了,前面都是准备工作。
pip install pgadmin4
如果网速太慢,就更换pip源为阿里源
vim env/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
把上面的内容放在env/pip.conf中
至此pgadmin4的安装已经完成
2.6 创建pgadmin数据目录
- /var/lib/pgadmin pgAdmin4 的数据目录
- /var/log/pgadmin pgAdmin4 的日志
注意:要把目录的权限设置给uwsgi用户。
三、pgadmin4 配置
不要从上面的虚拟环境中退出
3.1 设置系统默认密码
python env/lib/python3.6/site-packages/pgadmin4/setup.py
3.2 安装uwsgi 运行 pgAdmin4
再次提醒,pgAdmin4 是使用 Flask 开发的!永远不要在生产环境运行 Flask 的开发服务器。现在,我们应该使用 uwsgi 来在生产环境运行 pgAdmin4。
系统需要预先安装uwsgi服务
yum install uwsgi
systemctl enable uwsgi
systemctl start uwsgi
python 虚拟环境中也需要安装
pip install uwsgi
创建uwsgi配置文件
vim /etc/uwsgi.d/pgadmin4.ini
# 内容如下:
[uwsgi]
plugins=python36
chdir=/home/www/pgadmin4/env/lib/python3.6/site-packages/pgadmin4
home=/home/www/pgadmin4/env
module=pgAdmin4:app
master=true
processes=2
socket=/var/run/uwsgi/pgadmin.sock
chmod-socket=666
logfile-chmod=644
daemonize=/var/log/uwsgi/pgadmin.log
uid=nginx
gid=nginx
procname-prefix-spaced=pgadmin
#enable-threads = true
vacuum = true
重新启动uwsgi服务
systemctl restart uwsgi
3.3 配置nginx
为pgadmin建立一个虚拟主机
官方的配置参考:
https://www.pgadmin.org/docs/pgadmin4/development/server_deployment.html#standalone-uwsgi-configuration
vim /etc/nginx/conf.d/pgadmin.conf
server {
listen 8081;
server_name localhost; # 改成你自己的域名
location / {
try_files $uri @pgadmin;
}
location @pgadmin {
include /etc/nginx/uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/pgadmin.sock;
}
}
3.4 开放端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload
3.5 访问
直接在浏览器访问开放的端口即可
遇到的问题
- CSRF 问题
注释掉配置文件中
vim /home/www/pgadmin4/env/lib/python3.6/site-packages/pgadmin4/config.py
# WTF_CSRF_HEADERS = ['X-pgA-CSRFToken']