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 システムをどんどん開発してください