PostgreSQL と pgadmin4 を PGDG レポジトリから新規にインストール
Scientific Linux 7 や CentOS 7 に最新の PostgreSQL と pgadmin4 を新規にインストールする方法です。 今回も RPM パッケージをインストールして簡単に環境構築します。
PostgreSQL のGUI管理ツールの一つに phpPgAdmin があります。 しかし、2013年のバージョン5.1を最後に更新が途絶えてるっぽいです。 このバージョンでは PostgreSQL のマテリアライズドビューが扱えないっぽいので pgadmin を活用してました。
pgadmin4 をサーバサイドにインストールして Apache から連携する記事が少ないので記事にしてみました。
PostgreSQL のインストール
Scientific Linux 7 にこの記事現在の最新バージョン PostgreSQL 9.6.2 をインストールします。
定番のPGDGからパッケージをインストールします。公式のレポジトリページから対応OSのRPMパッケージをインストールしてください。
# yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-sl96-9.6-3.noarch.rpm
PGDG のレポジトリが追加されましたので PostgreSQL をインストールします。
# yum install postgresql96-server postgresql96-contrib
ロケールなしでデータベースクラスタを初期化します。ロケールを指定しないと現在のロケールで初期化されるようです。 ロケールなしで初期化しないと日本語の並び順がおかしくなるので必ずなしにします。ja_JP.UTF-8 を指定してもいいみたいですけど私はしたことがありません。*1
【postgresql96-setup】 コマンドを使用する場合のオプションは【PGSETUP_INITDB_OPTIONS】環境変数に設定します。他の記事みてみたら、この環境変数使わずにデータベースクラスタを初期化してますね。データベース作成時に指定してるのかな。このコマンド、メジャーバージョンアップの際にも使用できるんだけどその記事まだ誰も書いてないっぽい。(それとも埋もれてる?)
# locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
# PGSETUP_INITDB_OPTIONS="--no-locale --encoding=utf-8" /usr/pgsql-9.6/bin/postgresql96-setup initdb
データベースクラスタの初期化がおわりましたので PostgreSQL を起動します。
# systemctl status postgresql-9.6
● postgresql-9.6.service - PostgreSQL 9.6 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.6.service; disabled; vendor preset: disabled)
Active: inactive (dead)
# systemctl start postgresql-9.6
# systemctl status postgresql-9.6
● postgresql-9.6.service - PostgreSQL 9.6 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.6.service; disabled; vendor preset: disabled)
Active: active (running) since 火 2017-04-04 08:28:11 JST; 10s ago
Process: 1513 ExecStartPre=/usr/pgsql-9.6/bin/postgresql96-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 1519 (postmaster)
CGroup: /system.slice/postgresql-9.6.service
├─1519 /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data/
├─1521 postgres: logger process
├─1523 postgres: checkpointer process
├─1524 postgres: writer process
├─1525 postgres: wal writer process
├─1526 postgres: autovacuum launcher process
└─1527 postgres: stats collector process
# systemctl enable postgresql-9.6
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.6.service to /usr/lib/systemd/system/postgresql-9.6.service.
PostgreSQL を起動しましたのでロケールなしで作成されたか確認してみます。
# su - postgres -c 'psql -l'
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権
-----------+----------+------------------+----------+-------------------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
# su - postgres -c "psql -c \"SELECT name, setting, context FROM pg_settings WHERE name LIKE 'lc%';\""
name | setting | context
-------------+---------+-----------
lc_collate | C | internal
lc_ctype | C | internal
lc_messages | C | superuser
lc_monetary | C | user
lc_numeric | C | user
lc_time | C | user
(6 行)
無事にロケールなしで作成されたみたいですね。
適当にユーザ(ロール)とデータベースを作成しておきます。
# su - postgres -c 'createuser -P utsuro'
新しいロールのためのパスワード:
もう一度入力してください:
# su - postgres -c 'createdb -O utsuro utsuro'
このままでは接続できませんので設定ファイルの【pg_hba.conf】を編集し再起動します。
# vi /var/lib/pgsql/9.6/data/pg_hba.conf
host all all 127.0.0.1/32 md5
#host all all 127.0.0.1/32 ident
host all all ::1/128 md5
#host all all ::1/128 ident
# systemctl restart postgresql-9.6
作成したユーザで接続できるかどうか確かめます。上記の設定ではUnixドメインソケットでは接続できないのでホスト名を明示的に指定します。
# psql -h localhost -U utsuro -d utsuro -c '\dl'
ユーザ utsuro のパスワード:
ラージオブジェクト
ID | 所有者 | 説明
----+--------+------
(0 行)
pgadmin4 のインストール
この記事のメインです。phpPgAdmin のようにサーバーサイドで PostgreSQL を管理できるようになります。 windowsから管理するためだけに【pg_hba.conf】をIPアドレス変更毎に書き換えなくてもよくなるよ、わーい。
それでは pgadmin4 を yum からインストールしていきます。EPELリポジトリを追加していない環境では追加してください。
# yum install epel-release
# yum install pgadmin4-v1
設定ファイルがどこにあるのか探します。
# rpm -ql pgadmin4-v1
/etc/pgadmin/pgadmin4.conf
/usr/pgadmin4-v1/runtime/pgAdmin4
/usr/share/applications/pgadmin4-v1.desktop
さらに設定ファイルがどこにあるのか探します。
# cat /etc/pgadmin/pgadmin4.conf
ApplicationPath="/usr/lib/python2.7/site-packages/pgadmin4-web/"
PythonPath="/usr/lib/python2.7/site-packages:/usr/lib64/python2.7/site-packages"
設定ファイルのあるディレクトリに移動します。
# cd /usr/lib/python2.7/site-packages/pgadmin4-web/
# ls
babel.cfg config.pyc config_distro.py config_distro.pyo pgAdmin4.pyc pgAdmin4.wsgi regression setup.pyc
config.py config.pyo config_distro.pyc pgAdmin4.py pgAdmin4.pyo pgadmin setup.py setup.pyo
ここで公式のマニュアルを読むと、『【config_local.py】を作成してそこに設定値を書き込むのだ』と英語で書いてあるように読めるのでその通りにします。設定値は config.py → config_distro.py → config_local.py の順番にて読み込まれるようです。
# touch config_local.py
# vi config_local.py
SERVER_MODE = True
LOG_FILE = '/var/www/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/www/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/www/pgadmin4/sessions'
STORAGE_DIR = '/var/www/pgadmin4/storage'
【LOG_FILE】等のパスはどこでもいいです。 ここで【/var/www/pgadmin4】ディレクトリにした理由ですけど、pgadmin4 を Apache 連携するにあたり、モジュールの mod_wsgi を使います。 ということは pgadmin4 は apache ユーザアカウントで動作します、多分、おそらく。 なので apache ユーザがアクセスするなら Apache のドキュメントルートの上に置いたほうがいいような気がしただけです。 あまり分散させたくありませんし。 他に【/var/lib/pgadmin4】辺りに作成でしょうね。まぁ、どこでもいいのです。
ディレクトリを作成したら初期設定します。(ディレクトリを作成しなくても初期設定の中で作成されるっぽい) 初期設定の途中でメールアドレスとパスワードを聞かれます。 これは pgadmin4 にログインするアカウントになります。
# mkdir /var/www/pgadmin4
# python setup.py
pgAdmin 4 - Application Initialisation
======================================
The configuration database - '/var/www/pgadmin4/pgadmin4.db' does not exist.
Entering initial setup mode...
NOTE: Configuring authentication for SERVER mode.
Enter the email address and password to use for the initial pgAdmin user account:
Email address:
Password:
Retype password:
The configuration database has been created at /var/www/pgadmin4/pgadmin4.db
ファイルが作成されたか見てみましょう。
# ls /var/www/pgadmin4/
pgadmin4.db
db ファイルができています。ログファイルやセッションディレクトリも生成する必要がありますので、ここで一度 pgadmin4 サービスを起動させます。
# systemctl status pgadmin4-v1
● pgadmin4-v1.service - pgAdmin4
Loaded: loaded (/usr/lib/systemd/system/pgadmin4-v1.service; disabled; vendor preset: disabled)
Active: inactive (dead)
# systemctl start pgadmin4-v1
# systemctl status pgadmin4-v1
● pgadmin4-v1.service - pgAdmin4
Loaded: loaded (/usr/lib/systemd/system/pgadmin4-v1.service; disabled; vendor preset: disabled)
Active: active (running) since 火 2017-04-04 11:27:58 JST; 2s ago
Main PID: 2128 (python2)
CGroup: /system.slice/pgadmin4-v1.service
└─2128 /usr/bin/python2 /usr/lib/python2.7/site-packages/pgadmin4-web/pgAdmin4.py
4月 04 11:27:58 localhost.localdomain systemd[1]: Started pgAdmin4.
4月 04 11:27:58 localhost.localdomain systemd[1]: Starting pgAdmin4...
4月 04 11:27:59 localhost.localdomain python2[2128]: Starting pgAdmin 4. Please navigate to http://localhost:5050 in your browser.
Hint: Some lines were ellipsized, use -l to show in full.
起動できたら終了させます。もう今後は(Apache 連携するので)サービスを起動する必要はありません。
# systemctl stop pgadmin4-v1
再度ディレクトリを確認します。
# ls -l /var/www/pgadmin4
合計 32
-rw-------. 1 root root 29696 4月 4 11:20 pgadmin4.db
-rw-r--r--. 1 root root 0 4月 4 11:27 pgadmin4.log
drwxr-xr-x. 2 root root 6 4月 4 11:27 sessions
drwx------. 2 root root 6 4月 4 11:27 storage
ディレクトリ以下の所有者を apache アカウントにします。
# chown -R apache:apache /var/www/pgadmin4
Apache コンフィグファイル【pgadmin4-v1.conf】の設定をします。mod_wsgi は【/etc/httpd/conf.modules.d/10-wsgi.conf】で有効になってますから1行目の LoadModule はコメント化してください。
# cd /etc/httpd/conf.d/
# cp pgadmin4-v1.conf.sample pgadmin4-v1.conf
# vi pgadmin4-v1.conf
# LoadModule wsgi_module modules/mod_wsgi.so
WSGIDaemonProcess pgadmin processes=1 threads=25
WSGIScriptAlias /pgadmin4 /usr/lib/python2.7/site-packages/pgadmin4-web/pgAdmin4.wsgi
<Directory /usr/lib/python2.7/site-packages/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>
コンフィグファイルを変更したら Apache の構文チェックを行ないます。OKなら再起動(起動)します。
# apachectl configtest
Syntax OK
# systemctl restart httpd
# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 火 2017-04-04 11:34:48 JST; 7s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 2174 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
├─2174 /usr/sbin/httpd -DFOREGROUND
├─2177 /usr/bin/logger -thttpd -plocal6.err
├─2178 /usr/bin/logger -thttpd -plocal6.notice
├─2179 /usr/sbin/httpd -DFOREGROUND
├─2180 /usr/sbin/httpd -DFOREGROUND
├─2181 /usr/sbin/httpd -DFOREGROUND
├─2182 /usr/sbin/httpd -DFOREGROUND
├─2183 /usr/sbin/httpd -DFOREGROUND
└─2184 /usr/sbin/httpd -DFOREGROUND
おつかれさまでした。pgadmin4 の構築がおわりました。ブラウザを起動してサーバのアドレス(http://IPアドレス/pgadmin4/)にアクセスしてみてください。 pgadmin4 が起動してメールアドレスとパスワード入力欄が表示されるはずです。

ログインができましたら【File】【Preference】【Binary paths】【PostgreSQL Binary Path】に【/usr/pgsql-9.6/bin/】と入力しておきます。

Internal Server Error が表示されたら今までの設定を見直します。SELinux の設定も見直します。私は SELinux のことはさっぱりなのでここでは扱いません。
アクセスすらできないときはファイヤーウォールを忘れてないか確認します。
# firewall-cmd --add-service http
success
# firewall-cmd --add-service http --permanent
success
参考外部記事
注釈
- 注1 ja_JP.UTF-8 を指定すると lower 関数で 【A】が【a】になるらしいです。
広告
シェアする
トラックバック
- トラックバック用URL
- http://www.youyoukankan.net/cms/action.php?action=plugin&name=TrackBack&tb_id=196
コメント