◆ サーバ側に設置すれば使いたいときにいちいち起動しなくてもブラウザで開くだけで使える
◆ rpm 版では httpd が使われて そのサーバの /pgadmin4 でアクセスできるようになる

pgAdmin4 は 3 とは違いデスクトップアプリではなくウェブアプリだったのですが v5 からは NW.js を使ってデスクトップアプリになったようです
Electron じゃなくて NW.js のようです
別にブラウザでも良かったと思いますが ショートカットキーとか右クリック制御とかブラウザ上で開くより制御しやすいからでしょうか
ただ 全部をデスクトップアプリにしたわけではなく サーバはこれまでどおりでクライアントのみの話のようです

DB のデータを GUI で見て その場で少し修正したいなというときに pgAdmin を起動するのですが 毎回起動するのが面倒です
pgAdmin 本体はウェブサーバとして動いてるなら ローカルでサーバを起動するよりも PostgreSQL サーバを起動しているサーバ側に pgAdmin を入れておいて そこへブラウザでアクセスするだけで使えたほうが便利です
そういうことができないのかと 探してみるとサーバのみを起動して外部からアクセスすることもできるようでした

サーバ用のインストール

公式サイトを参考にします
https://www.pgadmin.org/download/pgadmin-4-rpm/

リポジトリを追加するための rpm をインストールします

dnf install https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm

RHEL 系だと上の URL ですが Fedora だと rpm の URL が別になってるようです
インストールしたあとに pgadmin 系のパッケージに何があるのかを探すと

# dnf search pgadmin
Last metadata expiration check: 0:00:12 ago on Fri Jan 28 10:24:02 2022.
=========================================== Name & Summary Matched: pgadmin ============================================
pgadmin4.noarch : Installs all required components to run pgAdmin in desktop and web modes.
pgadmin4-desktop.x86_64 : The desktop user interface for pgAdmin.
pgadmin4-redhat-repo.noarch : Repository configuration for the pgAdmin Redhat repositories.
pgadmin4-server.x86_64 : The core server package for pgAdmin.
pgadmin4-web.noarch : The web interface for pgAdmin, hosted under Apache HTTPD.

pgadmin4-server が core server package となっていますが これだけだと自分でセットアップやウェブサーバを準備する必要があるので pgadmin4-web の方をインストールします

dnf install pgadmin4-web

pgadmin4-web をインストールすれば依存関係で pgadmin4-server もインストールされます
pgadmin4-web の方には httpd の設定ファイルとセットアップスクリプトが入っています

# rpm -ql pgadmin4-web
/etc/httpd/conf.d/pgadmin4.conf
/usr/pgadmin4/bin/setup-web.sh

インストールしたら /usr/pgadmin4/bin/setup-web.sh を実行します
実行するとメールアドレスとパスワードが要求されます
pgAdmin4 の管理者ユーザのログイン情報になるだけで メールが届くものではないので適当なものでも良いですが ちゃんとしたメールアドレスの形式になっている必要があるようでした
「admin」や「admin@pgadmin」だとエラーになります
ドメイン部分にひとつは . が必要みたいです
パスワードの方も文字数が 6 文字以上を要求されて 「pw」 みたいなものだとだめでした

完了するとそのサーバの /pgadmin4 のパスを開くとアクセスできます

Apache

ウェブサーバは Apache が使われていて設定ファイルはこうなっていました

# cat /etc/httpd/conf.d/pgadmin4.conf
LoadModule wsgi_module modules/mod_wsgi.so
WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/usr/pgadmin4/venv
WSGIScriptAlias /pgadmin4 /usr/pgadmin4/web/pgAdmin4.wsgi

<Directory /usr/pgadmin4/web/>
WSGIProcessGroup pgadmin
WSGIApplicationGroup %{GLOBAL}
<IfModule mod_authz_core.c>
# Apache 2.4
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>

WSGI の設定は詳しくないのですが グローバル部分で設定しているからか VirtualHost が無視されて どのホスト名とポートでアクセスしていても /pgadmin4 にアクセスすると pgAdmin4 の管理画面が表示されました
表示させたい既存の VirtualHost の設定の中に移すか 新たに pgAdmin4 用の VirtualHost 設定を作ってそこに入れたほうがいいかもしれません

ログイン情報

ログイン画面では セットアップスクリプトで入力したメールアドレスとパスワードでログインできます
ただ 自分しか使わないものなのに メールアドレス形式のユーザ名と 6 文字以上のパスワードなんて長い文字列を打つのは面倒です
それに こういうツールのログイン情報は admin/pw に揃えてるので 独自のルールのせいで特別なものにすると忘れるのですよね

pgAdmin4 のデータベースは SQLite3 で /var/lib/pgadmin/pgadmin4.db にあります
user テーブルにユーザ情報が入っているのでユーザ名を admin に直接置き換えてみました
しかし ログイン時のサーバサイドのバリデーションでメールアドレス形式である必要があるようで ログインできませんでした
登録時にバリデーションされてるなら 参照時は文字列型かだけチェックしてればメールアドレス形式かまでチェックしてなくてもいいと思うのにチェックしてるようです

そのわりにパスワードの文字数チェックはクライアント側のみのようで 登録のリクエストを送るときに 1 文字に書き換えたらそのまま 1 文字で登録できました
ログインの認証時も文字数はチェックされなかったので パスワードが 1 文字でもログインできました

ただやっぱりメールアドレス入力が気になります
そもそも 一般公開する使い方じゃないのでログインという操作が不要で その URL にアクセスできたら全員管理者モードで扱えていいんです
そういう設定がないか調べてみましたが サーバモードとして使うとマルチユーザモードになってログインが必須になるようです

正規の設定でどうにかする方法は無理そうなので サーバサイドのコードを書き換えました
ログインの処理で POST されたデータを受け取った直後に管理者のログイン情報で書き換えます
書き換える場所はここです
https://github.com/postgres/pgadmin4/blob/REL-6_4/web/pgadmin/authenticate/__init__.py#L65

登録したログイン情報が foo@bar.baz と password だった場合はこういう感じです

    form = _security.login_form()

form.email.data = "foo@bar.baz"
form.password.data = "password"

この書き換えるファイルは下の場所にインストールされます /usr/pgadmin4/web/pgadmin/authenticate/__init__.py

これでログインフォームに何を入力しても管理者ユーザのログイン情報が入力されたことになって常に管理者でログインできます
メールアドレスやパスワードが空文字でもクライアント側バリデーションで止められないので 何も入力せずにログインボタンを押すだけで大丈夫です
書き換えをサーバ側でやるのでブラウザや PC を変えても同じように簡単にログインできるのが良いところです

接続する PostgreSQL サーバ

pgAdmin4 のWebサーバと PostgreSQL サーバは同じ PC なので 接続先の設定では localhost を指定すると繋がります

同じサーバに pgAdmin を置くと そのサーバ専用のように見えてしまいますが pgAdmin は外部のサーバに接続するためのアプリケーションなので 別のサーバで起動している PostgreSQL にも接続できます
PostgreSQL サーバごとに pgAdmin をインストールする必要はなく メインに使ってるサーバに入れればそこから他のサーバに接続すればよいです