AlmaLinux 9.4 セットアップメモ
Section 3.1 データベースサーバー構築編(PostgreSQL)
About
PostgreSQLのインストールと設定手順を残しています。
環境は、Section 2.1~Section 2.3で作成したvirtualboxの環境で実行しています。
なお、この手順では、OS側で管理しているパッケージを使った構築手順となります。いろいろ付随するものを入れる場合、dnf管理されていないものがある場合は、PostgreSQL公式パッケージからのインストールになります。
AppStreamのバージョン等を調べる
モジュールの中から使うことができるバージョン情報から確認します。
[root@localhost ~]# dnf module list postgresql
AlmaLinux 9 - AppStream
Name Stream Profiles Summary
postgresql 15 client, server [d] PostgreSQL server and client module
postgresql 16 client, server [d] PostgreSQL server and client module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
複数のバージョンが登録されていることがわかります。
バージョンの切り替え
パッケージをインストールする前に、バージョンを指定して使うように設定します。
[root@localhost ~]# dnf -y module enable postgresql:16
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Enabling module streams:
postgresql 16
Transaction Summary
========================================================================================================================
Complete!
[root@localhost ~]# dnf module list postgresql
AlmaLinux 9 - AppStream
Name Stream Profiles Summary
postgresql 15 client, server [d] PostgreSQL server and client module
postgresql 16 [e] client, server [d] PostgreSQL server and client module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]#
これで、使用するバージョンに [e] が付いたので有効化されました。
インストール
対象バージョンが有効になったのでインストールしていきましょう。
[root@localhost ~]# dnf -y install postgresql postgresql-server
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
postgresql x86_64 16.1-1.module_el9.4.0+66+eb9878bc appstream 1.8 M
postgresql-server x86_64 16.1-1.module_el9.4.0+66+eb9878bc appstream 6.9 M
Installing dependencies:
libicu x86_64 67.1-9.el9 baseos 9.6 M
postgresql-private-libs x86_64 16.1-1.module_el9.4.0+66+eb9878bc appstream 141 k
Transaction Summary
========================================================================================================================
Install 4 Packages
(中略)
Installed:
libicu-67.1-9.el9.x86_64
postgresql-16.1-1.module_el9.4.0+66+eb9878bc.x86_64
postgresql-private-libs-16.1-1.module_el9.4.0+66+eb9878bc.x86_64
postgresql-server-16.1-1.module_el9.4.0+66+eb9878bc.x86_64
Complete!
[root@localhost ~]#
インストールが終わりましたが、まだ使えません。
データの保存場所について
Databaseに記録された情報がディスク内のどこに保存されるか?その場所は変更できるのか?という事に対する対応方法については、SELinuxが有効になっているため複雑なことになっているのでここでの解説はしません。
SELinux コンテキスト、ラベルを適切に設定したり、それの永続化など考えると長くなってしまうので……
データベースの初期化
DBの実体を保存する場所や設定なども無いので、それらもまとめて初期化します。
[root@localhost ~]# /usr/bin/postgresql-setup --initdb --unit postgresql
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
[root@localhost ~]$
これで初期化できたので、サービスを起動していきます。
なお、間違った作られたファイルを消したい……となったとしても、/var/lib/pgsql は削除しないでください。 SELinuxコンテキストが変わってしまいサービスが起動できないなどの不具合が出るかもしれないので。
SELinuxのラベル変更方法
/var/lib/pgsql のコンテキストはOSで登録済みなので、設定を復元すればよいということになります。 なので、restorecon を使用して復元すれば対応できます。
[root@localhost ~]# restorecon -v -r /var/lib/pgsql
サービス
systemd を通じてサービスの有効化を行い、起動します。
[root@localhost ~]# systemctl enable postgresql
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/syst//system/postgresql.service.
[root@localhost ~]# systemctl start postgresql
[root@localhost ~]#
別のサーバーからアクセスさせる場合の設定
初期設定では、外部からのアクセスが完全に禁止されています。 そのため許可するように設定を変更してみましょう。
[root@localhost ~]# cp --preserve=context /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/postgresql.conf.org
[root@localhost ~]# cat /var/lib/pgsql/data/postgresql.conf.org \
| sed -E "/^#listen_addresses .*$/i listen_addresses = '*'" \
> /var/lib/pgsql/data/postgresql.conf
[root@localhost ~]# diff -cT /var/lib/pgsql/data/postgresql.conf.org /var/lib/pgsql/data/postgresql.conf
*** /var/lib/pgsql/data/postgresql.conf.org YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /var/lib/pgsql/data/postgresql.conf YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 57,62 ****
--- 57,63 ----
# - Connection Settings -
+ listen_addresses = '*'
#listen_addresses = 'localhost' # what IP address(es) to listenon;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
listen_adresses を書き換えることになりますが、* はすべてを許可になるため、接続元がわかっている場合は制限を掛けるなどしても良いでしょう。
次に接続するユーザーの認証方式などを変更します。local接続がpeerだと不便だったりあまりよくないこともあるのですがとりあえず……
[root@localhost ~]# cp --preserve=context /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.org
[root@localhost ~]# cat /var/lib/pgsql/data/pg_hba.conf.org \
| sed -E "s/(^host[ ]+all[ ]+all[ ]+)127.0.0.1\/32/\\1all /" \
| sed -E "s/(^host[ ]+all[ ]+all[ ]+)::1\/128/\\1all /" \
| sed -E "s/ident$/scram-sha-256/" \
> /var/lib/pgsql/data/pg_hba.conf
[root@localhost ~]# diff -cT /var/lib/pgsql/data/pg_hba.conf.org /var/lib/pgsql/data/pg_hba.conf
*** /var/lib/pgsql/data/pg_hba.conf.org YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /var/lib/pgsql/data/pg_hba.conf YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 84,94 ****
# "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
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
! host replication all 127.0.0.1/32 ident
! host replication all ::1/128 ident
--- 84,94 ----
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
! host all all all scram-sha-256
# IPv6 local connections:
! host all all all scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
! host replication all 127.0.0.1/32 scram-sha-256
! host replication all ::1/128 scram-sha-256
設定を変えたらサービスを再起動しましょう。
[root@localhost ~]# systemctl restart postgresql
[root@localhost ~]#
ロールとデータベースを作成する
データベースにアクセスするためのユーザーと権限(ロール)とデータベースを作成します。
vagrant ユーザーがいるのでそのユーザー用のロールとを作成します。オプションは下記の通り。
オプション | 内容 |
---|---|
-S | posgtresロールと同じ権限を持つスーパーユーザーではない |
-R | ロールは別のロールを作成不可 |
-d | ロールは新しいデータベースを作成可 |
-P | 新しいロールにパスワードを割り当てる |
データベースも作れないようにするのが正解ではあるけれど、何かと面倒なので作成可能にしています。
[root@localhost ~]# su - postgres -c "createuser -S -R -d -P vagrant"
新しいロールのためのパスワード:
もう一度入力してください:
[root@localhost ~]#
データベースを作成します。
[root@localhost ~]# su - postgres -c "createdb -O vagrant -E UTF-8 vagrant"
[root@localhost ~]#
接続確認
psqlコマンドを使ってアクセスします。
[vagrant@localhost ~]$ psql
psql (13.7)
"help"でヘルプを表示します。
vagrant=> \q
[vagrant@localhost ~]$