CentOSにPostgreSQLをインストールしてから起動までに必要な最初の設定
掲載日:2020年12月17日
INFOMARTION > CentOSにPostgreSQLをインストールしてから起動までに必要な最初の設定
概要
CentOSにPostgreSQLをインストールしてから起動までに必要な最初の設定の手順です。CentOS7を前提に記載しています。セキュリティに関する部分も記載しているので、参考にしてみてください。
PostgreSQLは無償で利用でき高機能なのでお勧めです。昔はPostgreSQLの関数は処理が遅かったと聞いたことがありますが、最近のものは改善されていて処理速度も速いです。
バージョンは以下となります。
CentOSのバージョン | 7.6 (1810) |
---|---|
PostgreSQLのバージョン | 9.2.24 |
目次
- インストール
- 1-1. PostgreSQLのインストール
- 設定内容
- 2-1. PostgreSQL専用のユーザを作成する。
- 2-2. PostgreSQLのデータ作成
- 2-3. 設定ファイルの修正
- 2-4. 起動確認
- 2-5. 自動起動設定
- 2-6. PostgreSQLに管理ユーザを追加する
- 2-7. firewallの穴あけ作業
- まとめ
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」を変更して環境変数を設定する手順も不要となったようです。
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」を以下の通り修正します。
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
#listen_addresses = 'localhost' # what IP address(es) to listen on;
#------------------------------------------------------------------------------
# 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
以下の内容を末尾に追加してください。
#外からはパスワード認証
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
以下の内容を記載します。
[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の初期構築は苦戦することもあるので、参考にしてみてください。
最後までご覧いただきありがとうございました。