最近、会社のLinuxサーバーにPostgreSQLをインストールし、社内LANに公開するまでの設定をおこなったので、その手順を備忘録としてまとめておく。

インストールから起動まで

まずyumでインストールし、DBの初期化、自動起動設定をおこなってから、サービスを起動する。

# インストール
yum install -y postgresql-server

# 初期化
postgresql-setup initdb

# 自動起動設定
systemctl enable postgresql.service

# サービス起動
systemctl start postgresql.service

ユーザー(ロール)の作成と権限の付与

hogeというユーザー名、passwordというパスワードを持つ新規ユーザーを作成する例を紹介する。

# ユーザー(ロール)の作成
CREATE ROLE hoge WITH LOGIN PASSWORD 'password';

# 全てのテーブルに権限を与える
GRANT ALL ON ALL TABLES IN SCHEMA public TO hoge;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO hoge;

また、作成したユーザーにpublicスキーマの全権限を与える設定をおこなっている。

設定ファイルの編集

まずpostgresql.confを下記のとおり編集する。

# postgresql.confの編集
vim /var/lib/pgsql/data/postgresql.conf

# listen_addresses = 'localhost'
↓
listen_addresses = 'localhost,192.168.xxx.xxx' # サーバーのIPアドレスを追加

# port = 5432
↓
port = 5432

変更箇所はlisten_addressesportの部分。

注意する点はlisten_addressesで、ここには自サーバー(PostgreSQLをインストールしたサーバー)のIPアドレスをカンマで区切って追記する。

この設定がないと、LAN内の別マシンからIPアドレスを指定して接続することができない。

また、pg_hba.confも以下のとおり編集する。

# pg_hba.confの編集 (LANのみに公開する場合はここの設定が重要!)
vim /var/lib/pgsql/data/pg_hba.conf

# "local" is for Unix domain socket connections only 
local   all             all                                     ident 
# 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             192.168.24.1/24            trust 
# IPv6 local connections: 
host    all             all             ::1/128                 ident

上記の設定はあくまで一例だが、LAN内にのみ接続を許可する場合はIPv4 local connectionsの部分がポイントとなる。

設定ファイルの編集を終えたら、PostgreSQLを再起動しておく。

# PostgreSQL再起動
systemctl restart postgresql

ファイアウォールの設定

最後にfirewall-cmdでpostgresqlへの接続を許可する設定をおこなう。

# firewallの設定
firewall-cmd --add-service=postgresql --zone=public --permanent

# 設定の反映
firewall-cmd --reload

# firewallの再起動
systemctl restart firewalld

firewallの再起動を終えたら、LAN内の外部マシンからPostgreSQLへ接続できるようになっているはずだ。