前提
VMware等で仮想マシンを作成して、環境構築する
CentOS 8.3 にて以下をインストールいPHPでDBに接続確認する
PostgreSQL12.5
Apache 2.4.37,
PHP7.2
初期設定
FW
ホストPCから接続できるようにFWを無効にする
なので外部公開する際は、適切に設定すること。
・停止する
systemctl stop firewalld
・自動起動の確認
systemctl is-enabled firewalld
enabled・・有効
disabled・・無効
・自動起動を無効にする
systemctl disable firewalld
postgresql12インストール
rootユーザで実施する
・インストールされているか確認する
dnf list installed | grep postgresql
・あれば削除する
dnf remove postgresql
・postgresql12を指定してインストール
dnf -y module install postgresql:12/server postgresql:12/client
・インストールしたバージョン確認
psql --version
・posturesユーザにスイッチする
su - postgres
DB初期化を行う
※インストール後に必要な作業。
PostgreSQLは、データベースクラスタと呼ばれるディレクトリで設定ファイルやデータベースを管理する。
initdb --encoding=UTF8 --no-locale
実行後、/var/lib/pgsql/dataディレクトリ、その配下に各種データベースファイルが作成される
pg_hba.confの設定を行う
このファイルはクライアント認証に関する設定ファイル
・ファイルを開く
vi /var/lib/pgsql/data/pg_hba.conf
・ホストPCからパスワード認証可能にする
下記例では、192.168.配下からの接続をパスワード認証で許可する
# IPv4 local connections:
host all all 192.168.0.0/16 md5
postgresql.confの設定
他のPCから接続できるように設定する
listen_addresses = '*'
データベース起動とサンプルデータ作成
・rootに戻る
exit
・DBを起動する
systemctl start postgresql.service
・自動起動の設定
systemctl enable postgresql.service
テーブル作成と確認
・postgresユーザにスイッチ
Su - postgers
・既定のDBに接続 引数指定なし
psql
・サンプルユーザを作成する
CREATE ROLE testuser WITH LOGIN PASSWORD 'password';
・サンプルDBを作成する
CREATE DATABASE testdb OWNER testuser;
・DBから抜ける
exit
・作成したサンプルユーザでサンプルDBに接続する
psql -h 127.0.0.1 -p 5432 -U testuser -d testdb
・サンプルテーブルを作成する
CREATE TABLE T_user ( ID nchar(6), Namae nchar(5) );
・サンプルデータをインサートする
INSERT INTO T_user(id,namae) VALUES (1,'test');
・セレクトで結果を確認する
SELECT * FROM T_user;
以上
Apacheのインストール
Apache httpdのバージョンがCentOS 7の「2.4.6」から
CentOS 8では「http/2」が利用できる「2.4.37」に変更になった
・インストールされているか確認する
dnf install httpd
・あれば削除する
dnf remove httpd*
・インストールする
dnf install httpd
・インストールされたバージョン確認
# httpd -v
↓実行例
Server version: Apache/2.4.37 (centos)
Server built: Nov 4 2020 03:20:37
・自動起動を有効にする
# systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
apacheからDB接続を許可に設定する
※これを忘れるとDB接続時にエラーになる
setsebool -P httpd_can_network_connect_db 1
・許可設定を確認する
# getsebool -a | grep httpd_can_network_connect_db
↓実行例
httpd_can_network_connect_db --> on
・起動する
systemctl start httpd
・起動確認 ブラウザで下記アドレスを開く
http://127.0.0.1/
PHPのインストール
CentOS 7まで利用されていた5.4系ではなく7.2系になった。
インストールに関連する違いとしてはApache httpdがデフォルトで「eventMPM」に対応。
そのため、PHPのインストールと設定手順がCentOS 7と異なる
・Apache のMPMについて
「マルチプロセッシングモジュール」の略。Apacheの並列処理に関する挙動方式
主に以下の3つのモジュールがある
・preforkMPM:安定した通信が可能。アクセスが多いとCPUとメモリを多く使う
・workerMPM:マルチスレッドとマルチプロセスのハイブリッド型。preforkに比べてメモリとCPU使用量が少ない
・eventMPM:Apache2.4系から導入されたマルチスレッドとマルチプロセスのモジュール。CPUとメモリの使用量が少ない
・インストールされているか確認する
dnf list installed | grep php
・あれば削除する
dnf remove php php-*
・インストールするパッケージ
ここでは以下のパッケージをインストール
・基本パッケージ
php.x86_64 : Package that installs PHP 7.2
php-xml.x86_64 : A module for PHP applications which use XML
php-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
php-json.x86_64 : JavaScript Object Notation extension for PHP
・マルチバイトド画像処理関連
php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php-gd.x86_64 : A module for PHP applications for using the gd graphics library
・Postgre
php-pdo
php-pgsql
・インストールする
dnf install -y php php-xml php-xmlrpc php-json php-mbstring php-gd php-pdo php-pgsql
・バージョン確認
php -v
↓実行例
PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
・Apache再起動する
systemctl restart httpd
PHP動作確認
var/www/html 配下に以下ファイルを作成する。
vi var/www/html/version.php
・記載内容
<?php phpinfo(); ?>
・ブラウザで以下URLを開く
http://127.0.0.1/version.php
・PHPとPostgreSQLの接続確認
PHPからPostgreSQLへの接続確認
var/www/html 配下に以下ファイルを作成する。
vi var/www/html/test.php
・サンプル内容
<head><title>DB_conect_sample</title></head>
<body>
DB_conect_sample<BR>
<br>
<?php
$DBHOST = "127.0.0.1";
$DBPORT = "5432";
$DBNAME = "testdb";
$DBUSER = "testuser";
$DBPASS = "password";
try{
//DB接続
$dbh = new
PDO("pgsql:host=$DBHOST;port=$DBPORT;dbname=$DBNAME;user=$DBUSER;password=$DBPASS");
//SQL
$sql = 'select id,namae from t_user';
foreach ($dbh->query($sql) as $row) {
//指定Columnを一覧表示
print($row['id'].' ');
print($row['namae'].'<br>');
}
}catch(PDOException $e){
print("接続失敗".'<br>');
print($e.'<br>');
die();
}
//データベースへの接続を閉じる
$dbh = null;
?>
</body>
</html>
ブラウザで開く
http://127.0.0.1/test.php
以上
★変更履歴
2021/4/14 Markdown記法で再編集した