ウェブサイト検索

Fedora 34にPostgreSQLおよびphpPgAdminをインストールする方法


Fedora 34にPostgreSQLおよびphpPgAdminをインストールする方法

このページで

  1. 前提条件
  2. ステップ1 - PostgreSQLをインストールする
  3. ステップ2 - 新しいPostgreSQLデータベースクラスタを作成する
  4. ステップ3 - PostgreSQLのロールと認証方法
  5. ステップ4 - 新しい役割とデータベースの作成。
  6. ステップ5 - PostgreSQLサーバーへのリモートアクセスを有効にする
  7. ステップ6 - phpPgAdmin、Nginx、およびPHPをインストールします

    1. PHPを構成する
    2. Nginxを設定する
  8. ステップ7 - SSLのインストール(オプション)

    1. 自動更新のためのSSLを設定する
  9. 結論

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をインストールするためのチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。

関連記事: