Fedora 34にPostgreSQLおよびphpPgAdminをインストールする方法
Fedora 34にPostgreSQLおよびphpPgAdminをインストールする方法
このページで
- 前提条件
- ステップ1 - PostgreSQLをインストールする
- ステップ2 - 新しいPostgreSQLデータベースクラスタを作成する
- ステップ3 - PostgreSQLのロールと認証方法
- ステップ4 - 新しい役割とデータベースの作成。
- ステップ5 - PostgreSQLサーバーへのリモートアクセスを有効にする
ステップ6 - phpPgAdmin、Nginx、およびPHPをインストールします
- PHPを構成する
- Nginxを設定する
ステップ7 - SSLのインストール(オプション)
PostgreSQL(またはPostgres)は、SQL言語を使用・拡張する強力なオープンソースのリレーショナルデータベース管理システムです。複雑なデータの処理を安全に保存し、スケールさせる多くの高度な機能を備えています。phpPgAdminは、PostgreSQLデータベースを管理および編集するためのPHPベースのアプリケーションです。
このチュートリアルでは、Fedora 34ベースのサーバーにPostgreSQLとphpPgAdminをインストールする方法を示します。
前提条件
Fedora 34 ベースのサーバー。
システムを最新の状態に保ってください。
sudo dnf update
sudo権限を持つ非ルートユーザー。
ステップ1 - PostgreSQLをインストールする
Fedora 34 には、リポジトリから入手できるさまざまなバージョンの PostgreSQL が含まれています。適切なモジュールを有効にすることで、これらのバージョンの中から選択することができます。モジュールとは、パッケージと依存関係のコレクションです。
まず、dnfコマンドを使用してpostgresqlモジュールの利用可能なストリームを確認します。
dnf module list postgresql
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL module
postgresql 10 client, server [d] PostgreSQL module
postgresql 11 client, server [d] PostgreSQL module
postgresql 12 client, server PostgreSQL module
postgresql 13 client, server PostgreSQL module
PostgreSQLをインストールするには、対応するモジュールストリームを有効にする必要があります。
sudo dnf module enable postgresql:13
プロンプトが表示されたら、ストリームを有効にするにはYを入力してください。
次に、PostgreSQLサーバーをインストールします。
sudo dnf install postgresql-server
PostgreSQLデータベースシステムにいくつかの追加機能を追加するcontribパッケージをインストールしたいかもしれません。
sudo dnf install postgresql-contrib
サーバーがインストールされたので、新しいユーザーを作成する必要があります。
ステップ2 - 新しいPostgreSQLデータベースクラスタを作成する
まず、新しいPostgreSQLデータベースクラスターを作成する必要があります。データベースクラスターは、単一のサーバーインスタンスによって管理されるデータベースのコレクションです。クラスターを作成すると、データベースが配置されるディレクトリが作成されます。このプロセス全体は、PostgreSQLの初期化にも似ています。
このプロセスは、template1 と postgres データベースを作成します。template1 データベースは、新しいデータベースを作成するために PostgreSQL によって使用されるテンプレートです。postgres データベースは、ユーザー、ユーティリティ、およびサードパーティアプリケーションが使用するためのデフォルトデータベースです。
PostgreSQLを初期化するためのデータベースクラスターを作成するには、次のコマンドを使用します。
sudo postgresql-setup --initdb
今、PostgreSQLサービスを開始してください。
sudo systemctl start postgresql
PostgreSQLサービスを有効にします。
sudo systemctl enable postgresql
PostgreSQLが稼働しているので、新しいユーザーとデータベースを作成し、それらを使い始めることができます。
ステップ3 - PostgreSQLのロールと認証方法
Postgresは認証と権限を管理するために「ロール」という概念を使用します。PostgreSQLは複数の認証方法をサポートしています。最も一般的に使用される方法は以下の通りです。
- 信頼 -
/var/lib/pgsql/pg_hba.confに定義された条件が満たされていれば、パスワードなしで接続できる役割です。 - パスワード - 接続にパスワードを使用する役割。パスワードは
md5、scram-sha-256、およびプレーンテキストとして保存できます。 - Ident - クライアントのOSユーザー名が必要で、TCP/IP接続のみサポートされています。
- ピア - Identと同じですが、ローカルホスト接続のみでサポートされています。
Postgres はデフォルトでピア認証を使用しており、これは Postgres のロールと一致する Linux ユーザーアカウントを関連付けることを意味します。 Postgres 内にロールが存在する場合、同じ名前の Linux ユーザー名がそのロールとしてサインインできます。クライアント認証の詳細は /var/lib/pgsql/pg_hba.conf ファイルに保存されています。
Postgresのインストールプロセスでは、デフォルトのPostgresロールに関連付けられたpostgresというユーザーアカウントが作成されます。
postgres アカウントに切り替えてください。
sudo -i -u postgres
次のコマンドを使用してPostgresプロンプトにアクセスできます。
psql
これにより、PostgreSQLのプロンプトにログインでき、さまざまなコマンドを通じてデータベースにアクセスして使用できます。プロンプトを終了するには、次のように入力します:
postgres-# \q
それはあなたをPostgresアカウントのLinuxアカウントに戻します。自分のユーザーアカウントに戻るには、プロンプトでexitと入力してください。
アカウントを切り替えることなく、次のコマンドを入力することでPostgresプロンプトにアクセスすることもできます。
sudo -u postgres psql
プロンプトを終了するには、入力してください:
postgres-# \q
ステップ4 - 新しい役割とデータベースの作成。
bashシェルまたはpsqlシェルから直接、役割やデータベースを作成できます。私たちの目的のために、psqlシェルを使用します。なぜなら、こちらの方が作業が速く行えるからです。
最初に、psqlシェルに接続してください。
sudo -u postgres psql
スーパーユーザー、データベース作成、ロール作成、ログインのような権限を持つ新しいPostgreSQLロールを作成します。このユーザーは、後のチュートリアルでphpPgAdminにログインするために使用されます。
postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';
次のコマンドを使用して、利用可能なすべてのユーザーを確認できます。
postgres-# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
username | Superuser, Create role, Create DB | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
新しいデータベースを作成します。
postgres-# CREATE DATABASE userdb;
先ほど作成したデータベースに対して、ユーザーに権限を付与するために以下のクエリを実行してください。
postgres-# GRANT ALL PRIVILEGES ON DATABASE userdb TO username;
次のコマンドを使用して、利用可能なすべてのデータベースを確認できます。
postgres-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
userdb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | navjot=CTc/postgres
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
ステップ5 - PostgreSQLサーバーへのリモートアクセスを有効にする
デフォルトでは、PostgreSQLサーバーはローカルホストインターフェースのみをリッスンします。PostgreSQLサーバーへのリモートアクセスを有効にするには、postgresql.confファイルを開いてください。
sudo nano /var/lib/pgsql/data/postgresql.conf
接続と認証のセクションまでスクロールダウンし、次の行のハッシュシンボルを削除して変更してください。
#listen_addresses = 'localhost' # what IP address(es) to listen on;
行を次のように変更してください。
listen_addresses = '*' # what IP address(es) to listen on;
Ctrl + X を押してファイルを保存し、促されたらYと入力します。
次のステップは、pg_hba.confファイルを編集してサーバーがリモート接続を受け入れるように設定することです。
sudo nano /var/lib/pgsql/data/pg_hba.conf
リモート接続へのアクセスを提供する方法はいくつかあります。リモート接続を単一のユーザーまたは単一のデータベース、またはすべてに制限し、接続をすべてのIPアドレスまたは信頼できる場所に制限することができます。
TYPE DATABASE USER ADDRESS METHOD
The user jane can access all databases from all locations using an md5 password
host all john 0.0.0.0/0 md5
The user jane can access only the janedb database from all locations using an md5 password
host johndb john 0.0.0.0/0 md5
The user jane can access all databases from a trusted location (192.168.1.110) without a password
host all john 192.168.1.110 trust
ファイルには他のエントリもあり、それらの認証方法はidentと記載されています。ウェブインターフェースを介してログインしたい場合は、identの値をmd5に変更する必要があります。
必要な設定を追加し、Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力してください。
変更を有効にするためにPostgreSQLサーバーを再起動してください。
sudo systemctl restart postgresql
ss ユーティリティを使用して変更を確認してください。
ss -nlt | grep 5432
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 128 [::]:5432 [::]:*
これは、PostgreSQLサーバーがすべてのインターフェースのデフォルトポートでリッスンしていることを示しています。
ステップ6 - phpPgAdmin、Nginx、PHPをインストールする
phpPgAdminは通常、PostgreSQLやFedoraのリポジトリと共に提供されていますが、Fedora 34には含まれていません。したがって、手動でインストールする必要があります。phpPgAdminに加えて、NginxウェブサーバーとPHPソフトウェアもインストールする必要があります。
最新のphpPgAdminのバージョンをGithubのリリースページからダウンロードしてください。このチュートリアルを書く時点で、最新のバージョンは7.13.0です。
wget https://github.com/phppgadmin/phppgadmin/releases/download/REL_7-13-0/phpPgAdmin-7.13.0.tar.gz
ダウンロードしたアーカイブを解凍してください。
tar -zxvf phpPgAdmin-7.13.0.tar.gz
あなたのサイトが存在するディレクトリを作成してください。
sudo mkdir /var/www/phppgadmin/html -p
抽出したファイルを/var/www/phppgadmin/htmlディレクトリに移動します。
sudo mv phpPgAdmin-7.13.0/ /var/www/phppgadmin/html
NginxサーバーとPHPおよび適切なPHPモジュールをインストールします。
sudo dnf install nginx php-fpm php-cli php-pgsql php-mbstring
Fedoraファイアウォールを構成する。
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
ルールを有効にするためにファイアウォールを再ロードしてください。
sudo firewall-cmd --reload
PHPを構成する
nanoエディタを使って、/etc/php-fpm.d/www.confファイルを編集のために開いてください。
sudo nano /etc/php-fpm.d/www.conf
PHPプロセスのUnixユーザー/グループをnginxに設定する必要があります。ファイル内のuser=apacheおよびgroup=apacheという行を見つけて、nginxに変更してください。
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
Ctrl + X を押してファイルを保存し、促されたらYと入力します。
PHP-fpmプロセスを再起動します。
sudo systemctl restart php-fpm
Nginxを設定する
次のコマンドを実行して、サイト用の設定ファイルを追加してください。
sudo nano /etc/nginx/conf.d/phppgadmin.conf
エディタに次のコードを貼り付けてください。
server {
listen *:80;
server_name phppgadmin.example.com;
root /var/www/phppgadmin/html;
index index.php;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/phppgadmin.access.log;
error_log /var/log/nginx/phppgadmin.error.log;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
エディタを閉じるにはCtrl + Xを押し、ファイルを保存するかどうか確認されたらYを押してください。
このファイルは、phppgadmin.example.comをディレクトリ/var/www/html/phppgadminでホストすることを前提としています。
Nginxの設定をテストする。
sudo nginx -t
次の出力が表示されているはずです。これにより、あなたの設定が正しいことが示されます。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginxサービスを開始し、有効にします。
sudo systemctl start nginx
sudo systemctl enable nginx
ブラウザで http://phppgadmin.example.com を起動すると、ブラウザにデフォルトの phpPgAdmin ページが表示されるはずです。
左のサイドバーのPostgreSQLリンクをクリックし、先に作成したユーザー名とパスワードを入力してログインし、ポータルにアクセスしてください。
ステップ7 - SSLのインストール(オプション)
Let's Encrypt SSLサービスを使用してSSLを有効にできます。そのためには、Certbotツールをインストールしてください。
sudo dnf install certbot-nginx
SSL証明書を生成する。
sudo certbot --nginx -d phppgadmin.example.com
メールアドレスの入力と利用規約への同意を求められます。HTTPSアクセスを求められた場合は、HTTPからHTTPSへのすべてのリクエストをリダイレクトするために、安全な方法を選択してください。
ブラウザに https://phppgadmin.example.com と入力することで、phpPgAdmin にアクセスできるはずです。
自動更新のためのSSLを設定する
Crontabエディタを開きます。
EDITOR=nano sudo crontab -e
以下の文を一番下に貼り付けてください。
. . .
25 2 * * * /usr/bin/certbot renew --quiet
この行の 25 2 * * * 部分は「毎日午前2時25分に次のコマンドを実行する」という意味です。任意の時間を選択できます。
Ctrl + X を押してファイルを保存し、促されたらYと入力します。
あなたのSSL証明書は自動的に更新されます。
結論
これでFedora 34ベースのサーバーにPostgreSQLとphpPgAdminをインストールするためのチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。

