AlmaLinuxサーバーにPostgreSQLをインストールし、初期化から外部接続の設定までを行う手順をまとめます。
PostgreSQLのインストール方法は大きく2つあります。
- OS標準リポジトリ(AppStream)を使う方法:手軽でOSのアップデートと一緒に管理できる
- PostgreSQL公式リポジトリ(PGDG)を使う方法:新しいバージョンや特定バージョンを選べる
本記事では両方の手順を紹介します。特に理由がなければ標準リポジトリで十分ですが、Laravelなどのフレームワークで新しいバージョンを使いたい場合や、拡張機能(pg_partmanやPGroongaなど)を入れたい場合はPGDGを使うことになります。 <!– FILL: 導入のひとこと(なぜPostgreSQLを入れることになったか等) –>
環境
- AlmaLinux 10(AlmaLinux 8/9でもほぼ同じ手順です)
- PostgreSQL 16(標準リポジトリ)/ PostgreSQL 17(PGDG)
方法1:標準リポジトリ(AppStream)からインストール
利用できるバージョンの確認
まず、AppStreamで提供されているバージョンを確認します。
dnf module list postgresql
AlmaLinux 10ではPostgreSQL 16がデフォルトになっています。
インストール
dnf -y install postgresql-server postgresql
postgresql-contrib(追加モジュール集)も入れておくと後々便利です。
dnf -y install postgresql-contrib
データベースの初期化
インストールしただけではまだ使えません。データベースクラスタを初期化します。
postgresql-setup --initdb
データの実体は /var/lib/pgsql/data に作成されます。
サービスの起動と自動起動設定
systemctl enable --now postgresql
systemctl status postgresql
active (running) になっていればOKです。
方法2:PostgreSQL公式リポジトリ(PGDG)からインストール
新しいバージョン(17や18)を使いたい場合はこちらです。
PGDGリポジトリの追加
dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-10-x86_64/pgdg-redhat-repo-latest.noarch.rpm
AlmaLinux 8/9の場合はURLの EL-10 の部分を EL-8 や EL-9 に読み替えてください。
OS標準モジュールの無効化
AppStream側のPostgreSQLと混ざらないように無効化しておきます。
dnf -qy module disable postgresql
インストール
PostgreSQL 17を入れる場合は次の通りです。
dnf -y install postgresql17-server postgresql17 postgresql17-contrib
データベースの初期化とサービス起動
PGDG版はコマンドやサービス名にバージョン番号が付きます。
/usr/pgsql-17/bin/postgresql-17-setup initdb
systemctl enable --now postgresql-17
データの実体は /var/lib/pgsql/17/data に作成されます。以降の設定ファイルのパスも適宜読み替えてください。
初期設定
postgresユーザーのパスワード設定
PostgreSQLをインストールすると、OSユーザー兼DBスーパーユーザーの postgres が作成されます。まずDB側のパスワードを設定します。
sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'your-strong-password';
\q
動作確認
sudo -u postgres psql -c "SELECT version();"
バージョン情報が表示されれば正常に動作しています。
アプリケーション用のユーザーとデータベースを作成
スーパーユーザーの postgres を直接アプリで使うのは避け、専用ユーザーを作ります。
sudo -u postgres createuser --pwprompt appuser
sudo -u postgres createdb --owner=appuser appdb
接続確認は次の通りです。
psql -h 127.0.0.1 -U appuser -d appdb
認証設定(pg_hba.conf)
デフォルトではローカル接続が peer 認証(OSユーザー名と一致すれば接続可)になっています。パスワード認証に変えたい場合は pg_hba.conf を編集します。
vi /var/lib/pgsql/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
認証方式は古い md5 ではなく scram-sha-256 を使うのが現在の推奨です。
編集後は設定を再読み込みします。
systemctl reload postgresql
外部からの接続を許可する場合
同一サーバー内のアプリ(PHPなど)から使うだけなら不要ですが、別サーバーから接続する場合は以下の設定を行います。
postgresql.confの編集
vi /var/lib/pgsql/data/postgresql.conf
listen_addresses を変更します。
listen_addresses = '*'
pg_hba.confに接続元を追加
接続を許可するネットワークを追記します。全開放は避け、必要な範囲だけにしてください。
host appdb appuser 192.168.1.0/24 scram-sha-256
firewalldの開放
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
設定変更後はサービスを再起動します(listen_addresses の変更はreloadでは反映されません)。
systemctl restart postgresql
別サーバーからの接続確認
psql -h 192.168.1.10 -U appuser -d appdb
つまずきやすいポイント
- initdbを忘れて起動に失敗する:
systemctl startが失敗する場合、まず初期化済みかどうかを確認してください。 - listen_addressesの変更後にreloadしかしていない:この項目はrestartが必要です。
- pg_hba.confの評価順:上から順にマッチした行が使われます。広い範囲の行が先にあると、後ろの行は無視されます。
- PGDG版と標準版のパスの違い:PGDG版はバイナリが
/usr/pgsql-17/bin/、データが/var/lib/pgsql/17/dataです。標準版の記事を参考にする場合は読み替えが必要です。 - SELinux:デフォルトのポート・パスで使う分には問題ありませんが、データディレクトリを移動する場合はSELinuxコンテキストの設定が必要になります。
PHPから使う場合
PHPアプリケーションから接続する場合は php-pgsql を入れておきます。
dnf -y install php-pgsql
systemctl restart httpd
<!– FILL: 自分の環境での用途(例:Laravel + PostgreSQLで業務システムを構築する予定、など) –>
まとめ
- 手軽に入れるならAppStream標準の
dnf install postgresql-server - 新しいバージョンが必要ならPGDGリポジトリから
postgresql17-serverなど - インストール後は initdb → enable –now → パスワード設定 → pg_hba.conf の流れ
- 外部接続には
listen_addresses・pg_hba.conf・firewalldの3点セットが必要
<!– FILL: 締めのひとこと・関連記事リンク –>

コメント