疲れたらやすむ

Javaを学ぶ上でハマったところを書いていきます。iPhoneアプリ開発や日常ネタもあるかも。

【macOS】【CentOS】【PostgreSQL】インストールから仮想マシンのデータベースにホストPCで外部接続するまで

CentOS8にPostgreSQLをインストールしてみます。
MySQLと迷ったのですが職場の環境がPostgreSQLなのでそちらを選択。

余談ですが、PostgreSQLとMySQLはどちらも無償で利用出来るオープンソース、かつ高性能なデータベースです。
MySQLについては全く触ったことが無いので興味本位で検討していました。

両者の違いについてはこのあたりを読んでおくと良いと思います。

employment.en-japan.com

qiita.com

それでは目次です。

インストール

まずはインストールするところからです。

前提としてCentOSのrootユーザで進めます。

インストールを実行します。

$ yum -y install postgresql-server

コマンドの途中の-yは問い合わせ(y/n)に対し全てyで答えてくれるオプションです。

完了後、データベースの初期化を行います。

$ postgresql-setup initdb

初期化を行うと新規データベースクラスタが作成されます。
データベースクラスタとは、物理的なデータ本体や設定ファイルなどのデータベースシステムの全データを保持する領域のことを言います。
設定ファイルは「/var/lib/pgsql/data」に配置されます。

設定ファイル変更

続いて設定ファイルの変更を行います。

設定ファイルの配置場所まで移動します。

$ cd /var/lib/pgsql/data

設定ファイルのバックアップ(postgresql.conf.org)を作成します。

$ cp postgresql.conf postgresql.conf.org

「listen_addresses」のパラメータを設定します。
デフォルトではlocalhost(自ホスト)からの接続しか許可されていません。
パラメータを「*」に設定することにより外部接続が可能になります。

$ vim postgresql.conf

以下の通り変更します。

#listen_addresses = 'localhost'

これを

listen_addresses = '*'

に変更。

続いて別の設定ファイルを変更します。
先ほどと同様にバックアップを作成。

$ cp pg_hba.conf pg_hba.conf.org

こちらも外部接続の設定を行います。
「host all all 接続許可するIPアドレス/32 trust」のように記述することで、パスワード不要で外部接続出来る様になるみたいです。
とりあえず今回は仮想マシンを起動しているホストPCからパスワード付きで接続可能な様に設定しようと思います。

$ vim pg_hba.conf

以下の通り変更します。

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

これを

# "local" is for Unix domain socket connections only
local   all             all    	                                trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Host connections
host    all             all             192.168.56.1/32         password

に変更。

接続を許可するIP(192.168.56.1/32)は環境によって読み替えてください。
VirtualBoxのホストネットワークマネージャーから確認出来ます。

f:id:chibiCat:20200106000133p:plain

今回の様に192.168.56.1/32と指定すると192.168.56.1のみが許可されます。
192.168.56.1/16と指定した場合は192.168以降全て許可されるみたいです。

続いて外部接続を行う上で欠かせないファイヤーウォールの設定。

$ firewall-cmd --add-service=postgresql --zone=public --permanent

設定が完了したらリロードします。

$ firewall-cmd --reload

ファイヤーウォールの設定が問題ないか確認します。

$ firewall-cmd --list-services --zone=public --permanent

以下の通りpostgresqlが含まれていればOKです。

ssh dhcpv6-client http https postgresql

起動とpostgresユーザのパスワードを設定

設定が完了したら起動してみます。

$ service postgresql restart

接続出来るか確認します。

$ psql -U postgres

以下のように表示されればOKです。

psql (10.6)
"help" でヘルプを表示します。

postgres=# 

ついでに、そのままpostgresデータベースに入っている状態で以下のSQLを実行しパスワードを変更します。

alter role postgres with password 'postgres';

とりあえず初期設定としてpostgresとしていますが、任意で読み替えてください。

自動起動設定

CentOS起動時にPostgreSQLを自動で起動する様に設定します。

$ systemctl enable postgresql

設定出来ているか確認します。

$ systemctl list-unit-files | grep postgresql

以下の通りpostgresql.serviceがenabledになっていればOKです。

postgresql.service                          enabled  
postgresql@.service                         disabled 

逆に自動起動を無効にする場合は以下。

$ systemctl disable postgresql

同様に確認し、postgresql.serviceがdisabledになっていれば無効になっています。

ホストPCからデータベース管理ツールで仮想マシンのデータベースに外部接続

いよいよホストPCからデータベースへ外部接続してみます。

今回はTablePlusというソフトウェアを使用します。

調べたところMacではTeamSQLというソフトウェアが無償で使える上に評判も良さそうだったのですが、残念ながらDataRowと名前を変えて有償化されたとのことです。
妥協と言うと失礼かもしれませんが、そんなこんなでTablePlusを使います。

TablePlusも制限はありますが無償で使えます。
個人が趣味で使う分には無償で十分な機能が揃っていると思います。

まずは公式サイトからダウンロードします。

https://tableplus.com/

「Download for Mac」を選択します。

f:id:chibiCat:20200106003830p:plain

ダウンロードしたdmgファイルを実行します。
「TablePlus」を「Applications」フォルダにドラッグ&ドロップします。

f:id:chibiCat:20200106004231p:plain

TablePlusを起動します。

f:id:chibiCat:20200106005837p:plain

起動画面の右側を右クリックし「New」→「Connection...」を選択します。

f:id:chibiCat:20200106005816p:plain

「PostgreSQL」を選択し「Create」を選択します。

f:id:chibiCat:20200106005811p:plain

Nameは任意、それ以外は仮想マシンの設定値に従って入力します。
入力後に「Test」を選択します。

f:id:chibiCat:20200106005806p:plain

無事に接続が確立出来れば入力欄が緑色に’なります。
この状態で「Save」を選択します。

f:id:chibiCat:20200106005802p:plain

起動画面に戻り右側に接続情報が保存されます。

f:id:chibiCat:20200106005758p:plain

接続情報をダブルクリックすると管理画面が開きます。

f:id:chibiCat:20200106005752p:plain

この画面からデータベースを操作することが可能です。
表形式でテーブルをCREATE出来たり値をINSERT出来るので便利ですよ。

今回はここまで。