「さくらのクラウド」で PostgreSQL&PgAdmin4をインストールする

2019.11.23現在。
"さくらのクラウド"と書いてますが CentOS7系にPostgres12入れる話と取ってもらえれば。
SQLの勉強するにしても動く環境ないとやりにくいですよね。


■「さくらのクラウド」管理画面でサーバを作成する。
CentOS 7.7
・1コア/1GB
・20GB SSD
※一番安い構成です

■準備
・サーバにSSHログインしたら、まず おまじないを実行しておく。

[root@pgtest ~]# yum update

さくらのクラウドでは最初状態ではrootユーザのみしか用意されていない。
本当はまず操作用のユーザを作成すべきだが、今回はお試しなので このままrootユーザで進みます。


PostgreSQLサーバのインストール
CentOS 7でそのままPosgtresSQLをインストールしようとすると、9.2が入ってしまう。
最新版を取得できるようにする。

[root@pgtest ~]# yum -y localinstall https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  ~ 中略 ~
インストール:
  pgdg-redhat-repo.noarch 0:42.0-5

完了しました!
[root@pgtest ~]#

・どのバージョンがインストール可能になったのかは、yum info postgresql で確認できる。
以下の例だとバージョン9.4,9.5,9.6,10,11,12 が利用可能なことがわかる。

[root@pgtest ~]# yum info postgresql
読み込んだプラグイン:fastestmirror
Determining fastest mirrors
epel/x86_64/metalink                                                                             | 5.4 kB  00:00:00
 * elrepo: ftp.ne.jp
 * epel: ftp.yz.yamagata-u.ac.jp
base                                                                                             | 3.6 kB  00:00:00
elrepo                                                                                           | 2.9 kB  00:00:00
epel                                                                                             | 5.3 kB  00:00:00
extras                                                                                           | 2.9 kB  00:00:00
pgdg10                                                                                           | 3.6 kB  00:00:00
pgdg11                                                                                           | 3.6 kB  00:00:00
pgdg12                                                                                           | 3.6 kB  00:00:00
pgdg94                                                                                           | 3.6 kB  00:00:00
pgdg95                                                                                           | 3.6 kB  00:00:00
pgdg96                                                                                           | 3.6 kB  00:00:00
updates                                                                                          | 2.9 kB  00:00:00
(1/17): epel/x86_64/group_gz                                                                     |  90 kB  00:00:00
  ~ 中略 ~
[root@pgtest ~]#

・やっぱり最新版だよねのPostgreSQL12をインストール

[root@pgtest ~]# yum install postgresql12-server
  ~ 中略 ~

インストール:
  postgresql12-server.x86_64 0:12.0-1PGDG.rhel7

依存性関連をインストールしました:
  libtirpc.x86_64 0:0.2.4-0.16.el7                              postgresql12.x86_64 0:12.0-1PGDG.rhel7
  postgresql12-libs.x86_64 0:12.0-1PGDG.rhel7                   python3.x86_64 0:3.6.8-10.el7
  python3-libs.x86_64 0:3.6.8-10.el7                            python3-pip.noarch 0:9.0.3-5.el7
  python3-setuptools.noarch 0:39.2.0-10.el7

完了しました!
[root@pgtest ~]#

※途中、「file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG から鍵を取得中です。」
「上記の処理を行います。よろしいでしょうか? [y/N] 」のようなメッセージが現れることがある。
そのまま「 y 」を入力でOK。

AWSの場合は「$ sudo amazon-linux-extras install epel 」コマンドで
PostgreSQL9.6 or 10 を利用可能にできる。


・データベースクラスタの作成
PostgreSQLはインストール後にデータベースを初期化してあげる手順が必要です。
ロケールを Cに、文字コードをUTF8 に変更するオプションもつけておきます。
※インストールするOS、バージョンによって記載が異なるので注意。

[root@pgtest pgadmin4-web]# PGSETUP_INITDB_OPTIONS="-E UTF8 --locale=C" /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK

[root@pgtest pgadmin4-web]#

・PosgtreSQL起動設定&起動
systemctl enableでサーバ再起動しても自動的に起動するようにする。
systemctl enableでPosgtreSQLを起動する。

[root@pgtest pgadmin4-web]# systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
[root@pgtest pgadmin4-web]#
[root@pgtest pgadmin4-web]# systemctl start postgresql-12
[root@pgtest pgadmin4-web]#

・PosgtreSQL接続用のユーザ作成
 ※testuser部分がユーザ名です、お好みで。パスワードもお好みで。

[root@pgtest pgadmin4-web]# sudo -u postgres createuser -P testuser
Enter password for new role:
Enter it again:
[root@pgtest pgadmin4-web]#

・パスワードログインできるようにする
 ※3か所をident → md5に変更して保存。
 pg_hba.conf を編集したらサーバを再起動を忘れないように。

[root@pgtest pgadmin4-web]# vi /var/lib/pgsql/12/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
[root@pgtest pgadmin4-web]# service postgresql-12 restart


■PgAdmin4のインストール

・本体のインストール。
※先にPostgresのreposをインストールしているため 下記でPgAdmin4の最新版が入ります。
※インストール時にPythonやWebサーバなど必要な機能は全部入ります。なんて手軽。

[root@pgtest ~]# yum install pgadmin4
  ~ 中略 ~

インストール:
  pgadmin4.x86_64 0:4.13-1.rhel7

依存性関連をインストールしました:
  httpd.x86_64 0:2.4.6-90.el7.centos                          httpd-tools.x86_64 0:2.4.6-90.el7.centos
  libtomcrypt.x86_64 0:1.17-26.el7                            libtommath.x86_64 0:0.42.0-6.el7
  mailcap.noarch 0:2.1.41-2.el7                               mod_wsgi.x86_64 0:3.4-18.el7
  pgadmin4-docs.noarch 0:4.13-1.rhel7                         pgadmin4-python-Flask-Mail.noarch 0:0.9.1-4.rhel7.1
  pgadmin4-python-alembic.noarch 0:0.9.7-3.rhel7.1            pgadmin4-python-babel.noarch 0:2.3.4-2.rhel7.1
  pgadmin4-python-backports.csv.noarch 1:1.0.5-3.rhel7.1      pgadmin4-python-beautifulsoup4.noarch 0:4.5.1-3.rhel7.1
  pgadmin4-python-blinker.noarch 0:1.4-3.rhel7.1              pgadmin4-python-dateutil.noarch 1:2.7.2-1.rhel7.1
  pgadmin4-python-flask.noarch 1:1.0.2-1.rhel7                pgadmin4-python-flask-babel.noarch 0:0.11.1-4.rhel7.1
  pgadmin4-python-flask-babelex.noarch 0:0.9.3-1.rhel7.1      pgadmin4-python-flask-gravatar.noarch 0:0.5.0-1.rhel7.1
  pgadmin4-python-flask-htmlmin.noarch 0:1.5.0-1.rhel7        pgadmin4-python-flask-login.noarch 0:0.4.1-1.rhel7
  pgadmin4-python-flask-migrate.noarch 0:2.4.0-1.rhel7        pgadmin4-python-flask-paranoid.noarch 0:0.2-1.rhel7.1
  pgadmin4-python-flask-principal.noarch 0:0.4.0-14.rhel7.1   pgadmin4-python-flask-security.noarch 0:3.0.0-1.rhel7.1
  pgadmin4-python-flask-sqlalchemy.noarch 0:2.3.2-1.rhel7     pgadmin4-python-flask-wtf.noarch 0:0.14.2-1.rhel7
  pgadmin4-python-htmlmin.noarch 0:0.1.12-1.rhel7.1           pgadmin4-python-itsdangerous.noarch 0:0.24-10.rhel7.1
  pgadmin4-python-jinja2.noarch 0:2.8-9.rhel7.1               pgadmin4-python-markupsafe.x86_64 0:0.23-13.rhel7.1
  pgadmin4-python-passlib.noarch 0:1.7.1-1.rhel7.1            pgadmin4-python-psutil.x86_64 0:5.5.1-1.rhel7
  pgadmin4-python-simplejson.x86_64 0:3.16.0-1.rhel7          pgadmin4-python-six.noarch 0:1.12.0-3.rhel7
  pgadmin4-python-sqlalchemy.x86_64 0:1.2.18-1.rhel7          pgadmin4-python-sqlparse.noarch 0:0.2.4-1.rhel7.1
  pgadmin4-python-sshtunnel.noarch 0:0.1.4-1.rhel7            pgadmin4-python-werkzeug.noarch 0:0.15.4-1.rhel7
  pgadmin4-python-wtforms.noarch 0:2.2.1-1.rhel7              pgadmin4-pytz.noarch 0:2018.9-1.rhel7
  pgadmin4-web.noarch 0:4.13-1.rhel7                          pyOpenSSL.x86_64 0:0.13.1-4.el7
  python-babel.noarch 0:0.9.6-8.el7                           python-beaker.noarch 0:1.5.4-10.el7
  python-blinker.noarch 0:1.3-2.el7                           python-cffi.x86_64 0:1.6.0-5.el7
  python-dateutil.noarch 0:1.5-7.el7                          python-editor.noarch 0:0.4-4.el7
  python-enum34.noarch 0:1.0.4-1.el7                          python-flask.noarch 1:0.10.1-4.el7
  python-idna.noarch 0:2.4-1.el7                              python-itsdangerous.noarch 0:0.23-2.el7
  python-jinja2.noarch 0:2.8-7.rhel7                          python-lxml.x86_64 0:3.2.1-4.el7
  python-mako.noarch 0:0.8.1-2.el7                            python-markupsafe.x86_64 0:0.11-10.el7
  python-paramiko.noarch 0:2.1.1-9.el7                        python-paste.noarch 0:1.7.5.1-9.20111221hg1498.el7
  python-ply.noarch 0:3.4-11.el7                              python-pycparser.noarch 0:2.14-1.el7
  python-speaklater.noarch 0:1.3-1.el7                        python-tempita.noarch 0:0.5.1-6.el7
  python-werkzeug.noarch 0:0.11.11-2.rhel7                    python2-click.noarch 0:6.7-8.el7
  python2-crypto.x86_64 0:2.6.1-16.el7                        python2-cryptography.x86_64 0:1.7.2-2.el7
  python2-psycopg2.x86_64 0:2.8.3-3.rhel7                     python2-pyasn1.noarch 0:0.1.9-7.el7

完了しました!
[root@pgtest ~]#


・設定ファイルの作成
pgadmin4のインストールフォルダに config_local.py ファイルを作成し、
下記3行を記入する。

[root@pgtest ~]# vi /usr/lib/python2.7/site-packages/pgadmin4-web/config_local.py
SERVER_MODE = True
DEFAULT_SERVER = '0.0.0.0'
LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'

・pgadmin4のセットアップ
pgadmin4のインストールフォルダに移動し、setup.pyを動かす。
メールアドレスとログイン用パスワードを聞かれるので、適宜入力すること。
(ログイン画面で入力するID&パスワードになります)

[root@pgtest ~]# cd /usr/lib/python2.7/site-packages/pgadmin4-web
[root@pgtest pgadmin4-web]# python ./setup.py
NOTE: Configuring authentication for SERVER mode.

Enter the email address and password to use for the initial pgAdmin user account:

Email address: hogehoge@hogehoge.com
Password:
Retype password:
pgAdmin 4 - Application Initialisation
======================================

[root@pgtest pgadmin4-web]#


・pgadmin4起動設定&起動
systemctl enable で サーバ再起動しても自動的に起動するようにする。
systemctl start で pgadmin4を起動する。

[root@pgtest pgadmin4-web]# systemctl enable pgadmin4.service
Created symlink from /etc/systemd/system/multi-user.target.wants/pgadmin4.service to /usr/lib/systemd/system/pgadmin4.service.
[root@pgtest pgadmin4-web]# systemctl start pgadmin4.service
[root@pgtest pgadmin4-web]#


・ポート開放
PgAdmin4はデフォルト5050ポートで起動する。(別途Apacheなどは不要)

[root@pgtest pgadmin4-web]# firewall-cmd --add-port=5050/tcp --zone=public --permanent
success
[root@pgtest pgadmin4-web]# firewall-cmd --reload
success
[root@pgtest pgadmin4-web]#

以上で、
http://{サーバのIPアドレス}:5050/
へアクセスすると PgAdmin4が表示されます。
セットアップ時に指定したメールアドレスとパスワードでログインしてください。

ログインできたら、PgAdmin4を操作して、サーバを追加します。
Hostに localhost
UsernameとPasswordは PostgreSQL接続用ユーザを指定してください。
PortやMaintenance databaseはそのままでOKです。
うまくつながりますように!