LAMP環境構築(CentOS7, PHP7.3, Apache2.4, MySQL8)

仮想環境 Virtual Box にLAMP環境を構築します。PHPプログラマー向けの設定です。

Virtual Box インストール

下記URLより VirtualBox platform packages をダウンロードし、インストール
https://www.virtualbox.org/wiki/Downloads

CentOS7 インストール

下記URLよりCentOS Minimal ISO「CentOS-7-x86_64-Minimal-xxxx.iso」をダウンロード
https://www.centos.org/download/
「新規」ボタンクリックし、任意のNameを入力し、タイプ:Linux、バージョン:Red Hat(64-bit)を選択し「次へ」




メモリーサイズはデフォルト(1024MB)で「次へ」


ハードディスクはデフォルト「仮想ハードディスクを作成する」で「作成」


ハードディスクのファイルタイプはデフォルト「VDI(Virtual Box Image)」で「次へ」


物理ハードディスクにあるストレージはデフォルト「可変サイズ」を選択し「次へ」


ファイルの場所とサイズはデフォルトのままで「作成」


設定 > ストレージ > コントローラー:IDE「空」を選択し右上のCDをクリック「仮想光学ディスクファイルを選択」しダウンロードした「CentOS-7-x86_64-Minimal-xxxx.iso」を選択し「OK」






Virtual Box マネージャから「起動」

「Install CentOS 7」を選択


「日本語」を選択し「続行」


システム「インストール先」を選択


何も変えず「完了」をクリック


「インストールの開始」を選択


「rootパスワード」を選択


パスワードを入力して「完了」


インストールが完了したら「再起動」


root でログイン


一度シャットダウン
# shutdown -h now

設定 > ネットワーク > アダプター2 >「ネットワークアダプターを有効化」にチェック > 割り当て「ホストオンリーアダプター」を選択し「OK」


Virtual Box マネージャから「起動」

ネットワーク(アダプター1)の設定
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 (変更)
ONBOOT=yes vi エディタの操作方法
・編集モード : 「i」キー
・コマンドモード : 「Esc」キー
・保存して終了 : コマンドモードで「:wq」入力後に「Enter」キー
・保存せず終了 : コマンドモードで「:q!」入力後に「Enter」キー

ネットワーク設定ファイルをコピー(アダプター2用)
# cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-enp0s8 長いディレクトリ名やファイル名を入力する際、初めの数文字を入力し「Tab」キーで補完。途中まで同じ名前の場合「Tab」キー2回で候補が表示されます
ネットワーク(アダプター2)の設定
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8 (変更)
BOOTPROTO=none
NAME=enp0s8
DEVICE=enp0s8
(削除)
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ネットワーク再起動
# systemctl restart network
任意の IP アドレスを設定
# nmcli c mod enp0s8 ipv4.method manual ipv4.addresses "192.168.56.108/24"
ネットワーク再起動
# systemctl restart network
IP アドレスの確認
# ip a 3: enp0s8 :
inet 192.168.56.108/24 brd 192.168.56.255 scope global dynamic enp0s8

パッケージアップデート
# yum -y update yum コマンドが失敗する...
・ネットワークにプロキシサーバーを利用している場合「/etc/profile」ファイルの最下部にプロキシ設定を追加し CentOS 再起動
PROXY='プロキシIPアドレス:ポート番号'
export http_proxy=$PROXY
export HTTP_PROXY=$PROXY
export https_proxy=$PROXY
export HTTPS_PROXY=$PROXY

SELINUX 無効化
# vi /etc/selinux/config (変更)
SELINUX=disabled
CentOS 再起動
# reboot
オープンソース版の Poderosa4 をダウンロードし今後はこのターミナルエディタから仮想環境を操作する
https://sourceforge.net/projects/poderosa/files/releases/
最新バージョン(Poderosa-4.x.x-bin.zip)をダウンロード、解凍して Poderosa.exe 実行
Windows10 で解凍したファイルが正常動作しない...
・解凍前のファイルで 右クリック > プロパティ > 下部の「セキュリティ:このファイルは他のコンピューターから取得した・・・」を「許可する」にチェックしてから解凍


右側の青い PC アイコンクリック

サーバー設定を入力し「OK」
・SSH : SSH2
・ホスト(H) : 192.168.56.108
・ポート(T) : 22
・アカウント(A) : root
・認証方法(U) : パスワード
・パスフレーズ(P) : rootパスワード


ssh hostkey fingerprint .............
SSH サーバの公開鍵は ssh_known_hosts に登録されていません。登録して続行しますか? > 「はい(Y)」

Apache2.4 インストール

Apache インストール # yum -y install httpd
Apache のバージョンを確認
# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Nov 5 2018 01:47:09

Apache 設定
# vi /etc/httpd/conf/httpd.conf (変更)
EnableMMAP off
EnableSendfile off

Apache 起動
# systemctl start httpd
Apache 自動起動設定
# systemctl enable httpd
Firewall http(80)のポート番号を開放
# firewall-cmd --permanent --add-port=80/tcp
Firewall ssl(443)のポート番号を開放
# firewall-cmd --permanent --add-port=443/tcp
Firewall 再起動
# systemctl restart firewalld
ブラウザから Web サーバーにアクセス。「Testing 123..」が表示されることを確認
http://192.168.56.108

ブラウザでアクセスできない...
・ネットワークにプロキシサーバーを利用している場合:インターネットオプション > 接続 > LANの設定 > 詳細設定 > プロキシの除外設定 に「192.168.56.108」を追加

PHP7.3 インストール

epel リポジトリ追加
# yum -y install epel-release
remi リポジトリ追加
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
PHP7.3 インストール
# yum -y install --enablerepo=remi,remi-php73 php php-fpm php-pdo php-mbstring php-gd php-json php-mysql php-xml php-pecl-zip epel や remi リポジトリを追加してから yum がエラーになる...
・「/etc/yum.repos.d/remi.repo」と「/etc/yum.repos.d/epel.repo」の「enabled=1」を「enabled=0」に変更し再度実行

PHP のバージョンを確認
# php -v
PHP 7.3.3 (cli) (built: Mar 5 2019 13:50:38) ( NTS )

PHP 設定変更(開発用にエラーを画面表示する)
# vi /etc/php.ini (変更)
error_reporting = E_ALL
display_errors = On
date.timezone = Asia/Tokyo

PHP FPM 起動
# systemctl start php-fpm
PHP FPM 自動起動設定
# systemctl enable php-fpm

SSL インストール

# yum -y install mod_ssl
openssl 秘密鍵作成
# openssl genrsa -out php.sunabird.local.key 2048
openssl CSR 作成(緑文字は入力項目)
# openssl req -new -key php.sunabird.local.key -out php.sunabird.local.csr
You are about to be asked to enter information that will be incorporated
....
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Kanagawa
Locality Name (eg, city) [Default City]:Yokohama
Organization Name (eg, company) [Default Company Ltd]:sunabird
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:php.sunabird.local
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

openssl 自己署名サーバー証明書作成
# openssl x509 -req -in php.sunabird.local.csr -signkey php.sunabird.local.key -sha256 -days 3650 -out php.sunabird.local.crt
鍵と証明書を移動
# mv php.sunabird.local.key /etc/pki/tls/private/ # mv php.sunabird.local.crt /etc/pki/tls/certs/
サイト用のディレクトリ作成(DocumentRootにする)
# mkdir /var/www/php.sunabird.local DocumentRoot(ドキュメントルート) : ファイルを置くとブラウザからアクセスできるようになる場所。
VirtualHost 設定(SSL に自動リダイレクト、PHP FPM 連携)
# vi /etc/httpd/conf.d/php.sunabird.local.conf (全て追加)
<VirtualHost *:80>
ServerName php.sunabird.local

RewriteEngine on
RewriteCond %{HTTP_HOST} ^php\.sunabird\.local
RewriteRule ^/(.*)$ https://php.sunabird.local/$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /var/www/php.sunabird.local/
ServerName php.sunabird.local:443

SSLEngine on
SsLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateKeyFile /etc/pki/tls/private/php.sunabird.local.key
SSLCertificateFile /etc/pki/tls/certs/php.sunabird.local.crt

<Directory "/var/www/php.sunabird.local/">

AllowOverride All

<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</Directory>
</VirtualHost>

Apache と PHP FPM 再起動
# systemctl restart httpd # systemctl restart php-fpm
確認用ファイルを作成
# vi /var/www/php.sunabird.local/info.php (追加)
<?php
phpinfo();

Windows の hosts ファイルに追加
C:\Windows\System32\drivers\etc\hosts ファイルを開く
(追加)
192.168.56.108 php.sunabird.local 上書き禁止の場合、ファイルを右クリック > プロパティ > セキュリティ > 編集 > Users を選択し「フルコントロール」にチェックし「OK」 > Windowsセキュリティの警告「はい」> 「OK」


ブラウザからWebサーバーに https でアクセス。「PHP の設定」が表示されることを確認
https://php.sunabird.local/info.php
※詳細設定 >「php.sunabird.local にアクセスする(安全ではありません)」をクリック

SSLでアクセスできない...
・ネットワークにプロキシサーバーを利用している場合:インターネットオプション > 接続 > LANの設定 > 詳細設定 > プロキシの除外設定 に「php.sunabird.local」を追加

Windows(ホストOS)と LAMP環境(ゲストOS)の連携

VBox GuestAdditions に必要なパッケージをインストール
# yum -y install kernel-devel kernel-headers dkms gcc gcc-c++ bzip2
CentOS 再起動
# reboot
VirtualBox コンソール側の デバイス > 「GuestAdditions CDイメージの挿入...」


VBox GuestAdditions インストール
# mkdir /mnt/cdrom # mount -r /dev/cdrom /mnt/cdrom # cd /mnt/cdrom/ # sh VBoxLinuxAdditions.run
apache ユーザを vboxsfグループに追加
# gpasswd -a apache vboxsf
VirtualBox マネージャより共有フォルダーを設定する
・「設定」「共有フォルダー」右上「ディレクトリ+」アイコン
・フォルダーのパス:C:\www(Windows側で共有したいディレクトリ)
・フォルダー名:www(フォルダ名)
・「自動マウント(A):チェック」「永続化する(M):チェック」
・「OK」


Windows 共有ディレクトリ内に DocumentRoot 指定したディレクトリを作成する
C:\www\html
C:\www\php.sunabird.local

サーバ起動時に自動に共有化されるように設定
# vi /etc/rc.local (一番下に追加)
mount -t vboxsf www /var/www -o uid=apache,gid=apache
ディレクトリの権限設定
# chown -R apache:apache /var/www # chmod -R 777 /var/www # chmod u+x /etc/rc.d/rc.local
CentOS 再起動
# reboot
Windows 共有ディレクトリの DocumentRoot に確認用ファイル作成
C:\www\php.sunabird.local\test.php
(全て追加)
<?php
echo 'test';

ブラウザから確認ファイルにアクセス
https://php.sunabird.local/test.php
「test」と表示されたらOK
※これでWindows側の共有ディレクトリ内にファイルを作成すると仮想環境のWebサーバに反映されるようになる

MySQL8 インストール

mariadb アンインストール
# yum -y remove mariadb-libs
下記 URL で MySQL の最新バージョンを確認
https://dev.mysql.com/downloads/repo/yum/
2019.3.26 時点 「mysql80-community-release-el7-2.noarch.rpm」
MySQL 最新バージョンをインストール
# yum -y install http://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm # yum -y install mysql-community-server mysql-community-devel mysql-utilities yum コマンドが失敗する...
・ネットワークにプロキシサーバーを利用している場合「/etc/profile」ファイルの最下部にプロキシ設定を追加し CentOS 再起動
PROXY='プロキシIPアドレス:ポート番号'
export http_proxy=$PROXY
export HTTP_PROXY=$PROXY
export https_proxy=$PROXY
export HTTPS_PROXY=$PROXY

バージョン確認
# mysqld --version
/usr/sbin/mysqld Ver 8.0.15 for Linux on x86_64 (MySQL Community Server - GPL)

mariadb アンインストールで削除された Postfix を再度インストール
# yum -y install postfix
MySQL 起動と自動起動設定
# systemctl start mysqld
# systemctl enable mysqld

MySQL 初期パスワード確認(緑文字がパスワード)
# cat /var/log/mysqld.log | grep password
2019-03-26T08:27:57.063030Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ukU=ulK<#7ky

MySQL に初期パスワードでログイン
# mysql -u root -p
Enter password:

パスワードの変更
mysql> SET PASSWORD= 'Sunabird000000-';
root の認証方式を「caching_sha2_password」から「mysql_native_password」に変更(パスワードは同じ)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Sunabird000000-';
テスト用データベースとテーブルを作成しサンプルデータを登録する
mysql> CREATE DATABASE test;
mysql> use test;
mysql> CREATE TABLE t_test(id SERIAL PRIMARY KEY, name VARCHAR(20));
mysql> INSERT INTO t_test (name) VALUES ('kato makoto');
mysql> INSERT INTO t_test (name) VALUES ('tajima tae');

登録したサンプルデータを確認する
mysql> SELECT * FROM t_test;
+------+---------------+
 |  id | name
+------+---------------+
 |  1  | kato makoto
 |  2  | tajima tae
+------+---------------+
2 rows in set (0.00 sec)

MySQL ログアウト
mysql> exit;
PHP から MySQL への接続確認用のファイル作成
C:\www\php.sunabird.local\mysql_test.php
(全部追加)
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'Sunabird000000-');
foreach($dbh->query('SELECT * FROM t_test') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "エラー!: " . $e->getMessage() . "<br/>";
die();
}
?>

ブラウザからアクセスし DB に格納したサンプルデータが表示されることを確認
https://php.sunabird.local/mysql_test.php

以上で Virtual Box に LAMP 環境が構築されました。
これから PHP で楽しい Web システムをどんどん開発してください