LoginSignup
0
1

More than 1 year has passed since last update.

CentOS8でApache+PHP7+PostgreSQL12の環境構築

Last updated at Posted at 2021-04-11

前提

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記法で再編集した

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1