「さくらのクラウド」でCentOS7上に PostgreSQL12＆PgAdmin4をインストールする

2019.11.01現在。
"さくらのクラウド"と書いてますが、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 を利用可能にできる。


・データベースクラスタの作成
 ※ロケールを Cに変更する。
 ※インストールする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 しておく。
>
[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を動かす。
 メールアドレスとログイン用パスワードを聞かれるので、適宜入力すること。
>
[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 しておく。
>
[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://{サーバのNICアドレス}:5050/

へアクセスすると PgAdmin4が表示されます。
セットアップ時に指定したメールアドレスとパスワードでログインしてください。

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