【萌新向】使用Docker安装pgAdmin4,并连接到宝塔面板上的PostgreSQL数据库

本文基于PostgreSQL 13.0,宝塔面板免费版7.7.0

0x00 前言(一些废话)

考研二战完了(指数学分数,虽然数学连着两年我压根就没怎么看吧),实在是学够了,准备年后找工作。准备开始学习鸽了已久的python,当然,利用python做的新项目准备尝试跳出常见的MySQL,使用某些情况下有更好性能的PostgreSQL(虽然我的项目完全用不到这么好的性能哈哈);同时也想接触一下大名鼎鼎的Docker,毕竟虽然听说过名字但完全不知道这是做什么用的…

然而在研究的途中,发现这一通操作坑还不少。首先,Docker这个东西对于一窍不通的代码萌新来说,因为hub客户端GUI功能几乎半残废,无法完全避开命令行操作,实在不好劝诱萌新入坑。其次,研究浪费了大半天才发现,宝塔的PostgreSQL管理器貌似有些BUG,在管理器上创建的数据库和用户并没有添加到数据库中,导致我傻傻连了半天,根本连不上,最后只能用自带的超级用户才连接上数据库并进行配置。最后,这次用的数据库管理软件是pgAdmin,而不是熟悉的phpmyadmin,界面和操作逻辑上有不小差异。虽然有名称类似的phppgadmin,但那个软件嘛…界面超级有年代感,感觉已经很久都没维护过了,根本比不上pgAdmin…

综上,在我花了一点时间学习以后,准备写这篇文章记录一下。为了方便萌新,我会尽可能的写得详细一点。

0x01 安装Docker

Docker Hub官网:https://www.docker.com
下载Docker Hub客户端并安装,并且建议注册一个docker账号,方便以后进入hub网站下载其他镜像。

个人理解docker有一部分功能与java的maven差不多,即自动下载对应应用(app)的其他依赖环境、插件,做到开箱即用;另一方面且每个应用(app)都是独立容器(沙箱?),互不影响,不会导致多个应用装到一台电脑上,显得很乱很难管理。(跟windows虚拟机差不多,只不过是一个虚拟机只安装一个应用及相应的环境)
这么方便…那么,代价是什么?(悲):几乎完全没什么用的hub客户端图形界面,全靠命令行手动操作,各种命令的缩写根本搞不懂,而且必要时还要编写dockerfile和shell脚本,实在不好入门…

0x02 拉取pgAdmin4镜像并运行(基于MacOS)

pgAdmin4官网:https://www.pgadmin.org
官网Docker Container相关页面:https://www.pgadmin.org/download/pgadmin-4-container/
Hub镜像页:https://hub.docker.com/r/dpage/pgadmin4

通过官网「Download」相关关键词,找到Docker图标点入,最后导航到Hub的镜像页,这些睿智操作我就不截图了,毕竟一张张手工压缩传到对象存储里还蛮费事的。这如果都不会请立即放弃选择重开(无慈悲)。

在hub镜像页会看到右侧有个明显的docker pull命令,这个命令是以后拉取不同镜像最常用的命令。打开MacOS终端,按照页面代码提示输入以下命令拉取pgAdmin4镜像:

docker pull dpage/pgadmin4

#安装images镜像,类似于windows虚拟机的iso
docker pull {app_name}:{app_tag}
    app_name:app的名称,例如phpmyadmin
    app_tag:可看做app的版本version,具体看hub文档,一般为latest,可省略,默认直接安装latest

按照提示,输入以下命令,创建Container并运行:

#运行(镜像名称一定要写在最后!)
docker run --name {container_name} -d -p {pc_port}:{container_port} -e PGADMIN_DEFAULT_EMAIL={email} -e PGADMIN_DEFAULT_PASSWORD={password} dpage/pgadmin4

#注释
--name:容器container命名,会显示在hub客户端中
-d:detached mode后台运行
-e:environment variable,环境变量,类似于修改config配置文件的参数,可通过dockerfile定义
    email:pgadmin4登录用的邮箱,可以用来找回密码
    password:登录用的密码
-p:port端口
    pc_port:映射到的本机port,可通过localhost:{pc_port}访问pgAdmin4的页面
    container_port:容器中的port,pgAdmin4在容器中默认运行在80端口

Docker中Container不可重名,且已经生成的Container不可更改环境变量(其实就是参数,例如连接的数据库ip等),只能删除后重新docker run;而且Container存在时不能删除镜像,因为运行时需要(跟windows虚拟机不太一样,windows安装完后可以直接删除iso镜像文件)。

访问http://localhost:{pc_port}即可打开pgAdmin4登录页面(例如你配置的端口是-p 2077:80,那么就访问http://localhost:2077即可),输入命令行中设置的邮箱和密码即可登录。

0x03 宝塔面板配置PostgreSQL

进入宝塔面板,侧边栏「软件商店」-搜索「PostgreSQL管理器」并安装。完成后打开「PostgreSQL管理器」,侧边栏选择「版本管理」,选择「PostgreSQL 13.0」并等待安装完成。然后选择侧边栏「配置修改」,最后一行加上listen_addresses = '*' (监听地址,允许远程连接),保存并重启数据库。

重要:
从本机连接到服务器数据库为临时调试,平时强烈建议将数据库访问权限设为「仅本地服务器访问」!

·允许远程连接:
宝塔面板-「PostgreSQL管理器」-「客户端认证」,最后一行添加如下代码后保存即可。

host  all  all  0.0.0.0/0  md5

当然也不要忘记放行!宝塔面板侧边栏「安全」里放行数据库端口,阿里云/腾讯云等云服务器也要在防火墙设置内放行对应端口,PostgreSQL默认运行在5432端口。

·仅允许本地服务器连接:
删除「客户端认证」配置中的那一行,然后取消放行端口即可。

0x04 pgAdmin4相关配置

血泪经验:不要从宝塔的「PostgreSQL管理器」中创建数据库!似乎是有BUG,创建后无法登录,面板并没有将数据库和对应用户加入PostgreSQL。我们需要通过超级用户「postgres」连接到数据库进行配置。

1.因为PostgreSQL初次配置时,「postgres」用户为没有密码的超级用户,而「md5」验证模式会使没有密码的用户无法登录。故参照「允许远程连接片段」,将「md5」改为「trust」,即[1]

host  all  all  0.0.0.0/0  trust

这样所有的数据库均可连接无需密码,强烈建议给「postgres」用户设完密码后改回「md5」!

2.回到pgAdmin4,右击左侧边栏「Servers」,选择「创建」-「服务器…」,在弹出窗口「创建-服务器」中:
「General」选项卡-「名称」:随便填一个,方便辨认即可;
「连接」选项卡-「主机名称/地址」:填数据库服务器IP地址;「端口」填数据库端口,PostgreSQL默认运行在5432端口;「维护数据库」:填「postgres」,这个数据库是默认存在的高权限数据库;「用户名」:填「postgres」即可;然后密码留空,直接点击连接,即可连接上数据库。

3.为了安全,在左侧栏「Servers」-「{你设定的服务器名称}」-「登录/组角色」中找到「postgres」角色,右键「属性」,在弹出框中选择「定义」选项卡,设定密码,然后按照上文更改为「md5」认证,然后使用密码重新登录。

4.至此,数据库与pgAdmin4相关已配置完成,可以进行数据库与用户的创建以及查询了。
查看表在:「Servers」-「{你设定的服务器名称}」-「数据库」-「{数据库名称}」-「架构」-「public」-「表」-「{表名}」,右键点击-「查看/编辑数据」-「所有行」;
编写/运行SQL语句:右键点击「{表名}」-「查看工具」。

0x05 参考资料

[1].「关于连接PostgreSQL时提示 FATAL: password authentication failed for user “连接用户名” 的解决方法…」,shao_lixin@csdn,https://blog.csdn.net/shao_lixin/article/details/84466781

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Copyright © 2012-2024 Sylpha Project Co., Ltd. All Rights Reserved.
鲁ICP备2022002009号-1