最近、会社の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_addresses
とport
の部分。
注意する点は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へ接続できるようになっているはずだ。