LAMP環境構築(CentOS8 Minimal, PHP7.4, Apache2.4, MySQL8)
仮想環境 Virtual Box にLAMP環境を構築します。PHPプログラマー向けの設定です。
Virtual Box インストール
下記URLより VirtualBox platform packages をダウンロードし、インストール
https://www.virtualbox.org/wiki/Downloads
「Windows hosts」を選択
CentOS 8 インストール
下記URLより CentOS Linux DVD ISO「CentOS-8.xxxxx-x86_64-dvd1.iso」をダウンロード
https://www.centos.org/download/
Oracle VM VirtualBox マネージャーの「新規」ボタンクリックし、任意の名前を入力し、タイプ:Linux、バージョン:Red Hat(64-bit)を選択し「次へ」
メモリーサイズはデフォルト(1024MB)で「次へ」
ハードディスクはデフォルト「仮想ハードディスクを作成する」で「作成」
ハードディスクのファイルタイプはデフォルト「VDI(VirtualBox Disck Image)」で「次へ」
物理ハードディスクにあるストレージはデフォルト「可変サイズ」を選択し「次へ」
ファイルの場所とサイズはデフォルトのままで「作成」
設定 > ストレージ > コントローラー:IDE「空」を選択し右上のCDをクリック「仮想光学ディスクファイルを選択」しダウンロードした「CentOS-8.xxxxx-x86_64-dvd1.iso」を選択し「OK」
Virtual Box マネージャから「起動」
「Install CentOS Linux 8」を選択
「日本語」を選択し「続行」
システム「インストール先」を選択
何も変えず「完了」をクリック
「ソフトウェアの選択」を選択
「最小限のインストール」を選択し「完了」クリック
「インストールの開始」を選択
「rootパスワード」を選択
パスワードを入力して「完了」
インストールが完了したら「再起動」
再起動後に CentOS Linux8 のインストール画面が再度表示された場合は下記対応を実施
・仮想マシンの電源オフ
・設定 > ストレージ > 右上のCDアイコンクリック > 仮想ドライブからディスクを除去 > OK
・起動
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 NetworkManager
任意の IP アドレスを設定
# nmcli c mod enp0s8 ipv4.method manual ipv4.addresses "192.168.56.108/24"
ネットワーク再起動
# systemctl restart NetworkManager
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)」
Apache 2.4 インストール
OpenSSL バージョン確認
# openssl version
OpenSSL 1.1.1c FIPS 28 May 2019
Apache インストール
# yum -y install httpd httpd-devel mod_ssl
Apache のバージョンを確認
# httpd -v
Server version: Apache/2.4.37 (centos)
Server built: Jun 8 2020 20:14:33
Apache 設定
# vi /etc/httpd/conf/httpd.conf
(開発用変更)
EnableMMAP off
EnableSendfile off
(ディレクトリ内のファイル一覧を見られないようにする)
Options Indexes FollowSymLinks
↓ (Indexes 削除)
Options FollowSymLinks
セキュリティ設定(新規ファイル作成)
# vi /etc/httpd/conf.d/security.conf
(追記)
# バージョン情報削除
ServerTokens Prod
ServerSignature Off
# inode 情報削除
FileETag None
# レスポンスヘッダから X-Powered-By を削除
Header unset X-Powered-By
# httpoxy 対策
RequestHeader unset Proxy
# クリックジャッキング対策
Header append X-Frame-Options SAMEORIGIN
# XSS 対策
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
# XST 対策
TraceEnable 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 サーバーにアクセス。「Test Page」が表示されることを確認
http://192.168.56.108
ブラウザでアクセスできない...
・ネットワークにプロキシサーバーを利用している場合:インターネットオプション > 接続 > LANの設定 > 詳細設定 > プロキシの除外設定 に「192.168.56.108」を追加
初期画面(Test Page)を非表示にする
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.back
PHP 7.4 インストール
epel リポジトリ追加
# yum -y install epel-release
remi リポジトリ追加
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-8.rpm
PHP7.4 インストール
# yum -y install --enablerepo=remi php74 php74-php-common php74-php-fpm php74-php-pdo php74-php-mbstring php74-php-gd php74-php-json php74-php-mysqlnd php74-php-xml php74-php-pecl-zip
epel や remi リポジトリを追加してから yum がエラーになる...
・「/etc/yum.repos.d/remi.repo」と「/etc/yum.repos.d/epel.repo」の「enabled=1」を「enabled=0」に変更し再度実行
PHP のバージョンを確認
# php74 -v
PHP 7.4.10 (cli) (built: Sep 1 2020 13:58:08) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
PHP 設定変更(開発用にエラーを画面表示する)
# vi /etc/opt/remi/php74/php.ini
(変更)
expose_php = Off
error_reporting = E_ALL
display_errors = On
date.timezone = Asia/Tokyo
PHP-FPM の設定
vi /etc/httpd/conf.modules.d/00-mpm.conf
(下記を追加)
# event MPM setting
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 50
ThreadsPerChild 50
MaxRequestWorkers 50
MaxConnectionsPerChild 0
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</IfModule>
PHP FPM 起動
# systemctl start php74-php-fpm
PHP FPM 自動起動設定
# systemctl enable php74-php-fpm
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 TLSv1.2 +TLSv1.3
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
</Directory>
</VirtualHost>
Apache と PHP FPM 再起動
# systemctl restart httpd
# systemctl restart php74-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サーバに反映されるようになる
MySQL 8 インストール
下記 URL で MySQL の最新バージョンを確認
https://dev.mysql.com/downloads/repo/yum/
2020.9.10 時点 「mysql80-community-release-el8-1.noarch.rpm」
MySQL 最新バージョンをインストール
# yum -y install http://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
# yum -y install mysql-server mysql-devel
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/libexec/mysqld Ver 8.0.17 for Linux on x86_64 (Source distribution)
MySQL 起動と自動起動設定
# systemctl start mysqld
# systemctl enable mysqld
MySQL にログイン
# mysql -u root -p
Enter password:(何も入力せず「Enter」)
パスワードの変更
mysql> SET PASSWORD= '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
メールサーバ Postfix インストール
# yum -y install postfix
CentOS のタイムゾーンを確認
# timedatectl status
(JSTではない場合、設定変更)
# timedatectl set-timezone Asia/Tokyo
以上で Virtual Box に LAMP 環境が構築されました。
これから PHP で楽しい Web システムをどんどん開発してください