CentOSにPostgreSQLをインストールしてから起動までに必要な最初の設定


掲載日:2020年12月17日



INFOMARTION > CentOSにPostgreSQLをインストールしてから起動までに必要な最初の設定

概要

CentOSにPostgreSQLをインストールしてから起動までに必要な最初の設定の手順です。CentOS7を前提に記載しています。セキュリティに関する部分も記載しているので、参考にしてみてください。

PostgreSQLは無償で利用でき高機能なのでお勧めです。昔はPostgreSQLの関数は処理が遅かったと聞いたことがありますが、最近のものは改善されていて処理速度も速いです。

バージョンは以下となります。

CentOSのバージョン7.6 (1810)
PostgreSQLのバージョン9.2.24

目次

  1. インストール
  2. 設定内容
  3. まとめ

1. インストール

PostgreSQLをインストールする手順について記載します。

1-1. PostgreSQLのインストール

yumコマンドによりPostgreSQLのインストールを実行します。rootユーザで作業を実施してください。

[username@hostname ~]$ su -

[root@hostname ~]# yum -y install postgresql-server

2. 設定内容

PostgreSQLを起動するまでの設定について記載します。

2-1. PostgreSQL専用のユーザを作成する。

PostgreSQLを操作する(psqlコマンドを使える)ための専用ユーザを作成しようと思いましたが、既にユーザが作成されていました。昔作成した時はユーザを作成した記憶があるので、もしかしたら仕様が変わったかもしれません。

以下のコマンドでユーザにスイッチしてみてください。

[root@hostname ~]# su - postgres

もしかしたら古いバージョンのPostgreSQLを使っている人もいるかもしれないので、記載しておきますが、以下の「.bashrc」を変更して環境変数を設定する手順も不要となったようです。

.bashrc


export PGHOME=/var/lib/pgsql

export PGDATA=/var/lib/pgsql/data

export PGHOST=localhost

postgresユーザのデフォルトのPGDATAは「/var/lib/pgsql/data」になったようです。「/usr/lib/systemd/system/postgresql.service」を参照すると記載されています。

2-2. PostgreSQLのデータ作成

PostgreSQLのデータを作成します。エンコーディングはUNICODEとします。デフォルトで「/var/lib/pgsql/data」ディレクトリが作成されていましたが、作成されていない人はフォルダ作成もお願いします。

-bash-4.2$ initdb --encoding=UNICODE

「/usr/lib/systemd/system/postgresql.service」に「PGDATA=/var/lib/pgsql/data」と設定されているため、「initdb --encoding=UNICODE」で「/var/lib/pgsql/data/」配下にDBが構築されます。

2-3. 設定ファイルの修正

PostgreSQLにアクセスできるようにIPアドレスを許可します。ローカル以外のアクセスの場合はパスワード認証されるように設定します。

[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf

「postgresql.conf」を以下の通り修正します。

postgresql.conf【変更前】


#------------------------------------------------------------------------------

# CONNECTIONS AND AUTHENTICATION

#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost' # what IP address(es) to listen on;

postgresql.conf【変更後】


#------------------------------------------------------------------------------

# CONNECTIONS AND AUTHENTICATION

#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*' # what IP address(es) to listen on;

セキュリティに関する重要な部分なので補足すると、この設定を入れると、どのIPからでもアクセスが可能となります。アクセスするIPが固定の場合は、その固定IPを記載してください。

本設定はPostgreSQLをインストールしたサーバ以外からpgadminなどでログインする場合に必要な設定となります。サーバにログインして、psqlコマンドを実行する場合はこの設定は不要です。(接続元が自身(localhost)となるので)

セキュリティに関する重要な設定なので、アクセスできるユーザは極力最小限にしましょう。

続いて「pg_hba.conf」を修正します。

[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf

以下の内容を末尾に追加してください。

pg_hba.conf


#外からはパスワード認証

host all all 0.0.0.0/0 md5

この設定を入れることで、外部から接続する時はパスワードが要求されます。ここら辺は設定しなかったり、設定が誤っていると重大なセキュリティホールになるので最新の注意を払って設定してください。

2-4. 起動確認

事前設定は完了したので、PostgreSQLが起動するか確認します。postgresユーザでDBを構築したので、postgresユーザにスイッチをしてから起動します。

[root@hostname ~]# su - postgres

-bash-4.2$ pg_ctl start

無事にPostgreSQLが起動したらpsqlコマンドが問題なく動くか確認しましょう。postgresユーザでpsqlコマンドを実行してください。

-bash-4.2$ psql -l

データベース一覧

名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権

-----------+----------+------------------+-------------+-------------------+-----------------------

postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |

template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +

| | | | | postgres=CTc/postgres

template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +

| | | | | postgres=CTc/postgres

(3 行)

上記の様な結果が返ってくればOKです。

2-5. 自動起動設定

必須ではありませんが、毎回サーバ再起動の度に起動するのは大変なので、サーバ起動時にPostgreSQLが自動起動するように設定を入れます。systemctlコマンドへの登録も行います。CentOS7の場合の手順なので、CentOS7以外を使用している方はServiceコマンドにより対応する必要があるので、ご注意ください。

「/usr/lib/systemd/system/postgresql.service」が存在するか確認します。無い場合は、以下の手順で「postgresql.service」を作成します。rootユーザで実行します。

[root@hostname ~]# touch /etc/systemd/system/postgresql.service

[root@hostname ~]# vi /etc/systemd/system/postgresql.service

以下の内容を記載します。

postgresql.service


[Unit]

#説明

Description=PostgreSQL

#実行前、実行後を制御

#Before=xxx.service

After=network.target

[Service]

#ユーザ、グループ指定

User=postgres

Group=postgres

#起動したらステータスを起動中にする

Type=oneshot

RemainAfterExit=yes

#起動、停止、リロード

Environment=PGDATA=/var/lib/pgsql/data

ExecStart=/usr/bin/pg_ctl start -D /var/lib/pgsql/data

ExecStop=/usr/bin/pg_ctl stop

ExecReload=/usr/bin/pg_ctl reload

[Install]

#runlevel3相当の設定

WantedBy=multi-user.target

次にsystemctlコマンドに登録します。

[root@hostname ~]# systemctl enable postgresql

[root@hostname ~]# systemctl is-enabled postgresql

enabled

[root@hostname ~]# systemctl list-unit-files --type=service | grep postgresql

postgresql.service enabled

[root@hostname ~]# systemctl daemon-reload

2-6. PostgreSQLに管理ユーザを追加する

LinuxからPostgreSQLを操作するユーザとは別にPostgreSQLのアプリ内で使用するユーザを作成します。pgadminなどで操作する時のユーザはこちらのユーザになります。デフォルトで存在するpostgresユーザのパスワード変更して使用したいと思います。

postgresユーザで以下のコマンドを実行します。

-bash-4.2$ psql

postgres=# alter role postgres with password 'パスワード';

postgres=# \q

※「パスワード」には設定するパスワードを入力してください。

2-7. firewallの穴あけ作業

CentOS7のデフォルト値ではfirewall(CentOS6以前の場合はiptables) がsshしかアクセスを許可していないのでPostgreSQLのポートをアクセス許可します。設定を永続的にするために「permanent」オプションも追加します。

[root@hostname ~]# firewall-cmd --permanent --zone=public --add-port=5432/tcp

[root@hostname ~]# firewall-cmd --reload

[root@hostname ~]# firewall-cmd --list-all

public (active)

target: default

icmp-block-inversion: no

interfaces: eth0

sources:

services: dhcpv6-client http https ssh

ports: 8080/tcp 5432/tcp

protocols:

masquerade: no

forward-ports:

source-ports:

icmp-blocks:

rich rules:

「ports: 5432/tcp」となったらOKです。

pgadminでアクセスしてみます。postgresユーザで、先程設定したパスワードでログインが可能なはずです。

3. まとめ

PostgreSQLをインストールした時に必要な最初の設定について記載させていただきました。PostgreSQLの初期構築は苦戦することもあるので、参考にしてみてください。

最後までご覧いただきありがとうございました。



■INFORMATION

INFORMATIONのトップページはこちらよりお願いいたします。


■PROFILE

プロフィールはこちらよりお願いいたします。


■お問い合わせ先

記事に関するお問い合わせはこちらよりお願いいたします。