pgAdmin4をCentOS8にvenvでインストール

venvを知って仮想環境へインストールしたときの覚書。

環境: CentOS Stream 8, Python 3.9.7, PostgreSQL 14.2, pgAdmin4 6.6, gunicorn 20.1.0, nginx 1.20.2

pip経由でインストールする。公式サイトを参考に。

pgAdmin4用システムディレクトリを作成
# mkdir /var/lib/pgadmin
# mkdir /var/log/pgadmin

Python仮想環境用のディレクトリを作成してpgadmin4仮想環境を作成。
# mkdir /opt/software/python-venv
# cd /opt/software/python-venv
# python -m venv pgadmin4

仮想環境用スクリプト実行
# source pgadmin4/bin/activate

pipの確認とアップグレード
(pgadmin4)# python -m pip list
(pgadmin4)# python -m pip install --upgrade pip setuptools

pip経由でpgAdmin4のインストール。
(pgadmin4)# python -m pip install pgadmin4

pgAdmin4実行
(pgadmin4)# pgadmin4

このPCはLAN内の開発サーバー。ブラウザでアクセスして確認してみる。

表示できないのでファイヤーウォール確認
(pgadmin4)# systemctl status firewalld
(pgadmin4)# firewall-cmd --list-all

pgAdmin4の5050ポートを開けて確認
(pgadmin4)# firewall-cmd --add-port=5050/tcp --permanent
(pgadmin4)# firewall-cmd --reload
(pgadmin4)# firewall-cmd --list-all

pgAdmin4実行
(pgadmin4)# pgadmin4

ブラウザでアクセスして確認する。

表示できない…。

別コンソールを開いてポートが空いているか確認。
TCPソケット(-t)の全ての状態(-a)で名前解決せず(-n)に表示
# ss -tan

LISTEN 0      128        127.0.0.1:5050        0.0.0.0:*

localhostとの通信しかLISTENしてない。
localhostから確認
# curl http://localhost:5050/

接続できている。とりあえずOK。

ログ確認
(pgadmin4)# less /var/log/pgadmin/pgadmin4.log

WARNINGされたsimple-websocketをインストール。
(pgadmin4)# python -m pip install simple-websocket


Nginxからプロキシする設定

LAN内PCからアクセスするためにウェブアプリケーションとして起動する。

WSGI(Web Server Gateway Interface)対応のHTTP Serverであるgunicornをインストール
(pgadmin4)# python -m pip install gunicorn

gunicorn経由で起動。
(pgadmin4)# gunicorn  --bind unix:/tmp/pgadmin4.sock --workers=1  --threads=25  --chdir /opt/software/python-venv/pgadmin4/lib/python3.9/site-packages/pgadmin4 pgAdmin4:app

別コンソールでソケットファイルがあるか確認
# ls /tmp/

nginx設定ファイルにプロキシ設定追加
# less /etc/nginx/conf.d/00_default.conf

    location /pgadmin4/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/tmp/pgadmin4.sock;
        proxy_set_header X-Script-Name /pgadmin4;
    }

nginx再読み込み
# nginx -t
# systemctl reload nginx

ブラウザで「http://vm-dev3/pgadmin4/」へアクセス。

無事表示された。

5050ポートは閉じる。
# firewall-cmd --remove-port=5050/tcp --permanent
# firewall-cmd --reload
# firewall-cmd --list-all

LocalhostのPostgresSQLサーバーを追加して動作確認。

思ったよりサクサク動く。
けど、DBeaverの方が使いやすい。

次回は本番環境でサービス化して自動起動するように設定する。

venv仮想環境から抜け出す。
(pgadmin4)# deactivate


【関連記事】