LAMP環境構築(FreeBSD11.2, PHP7.4, Apache2.4, MySQL5.7)

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

Virtual Box インストール

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

FreeBSD 11.2 インストール

下記URLより FreeBSD11.2 DVD ISO「FreeBSD-11.2-RELEASE-amd64-dvd1.iso」をダウンロード
https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/

Oracle VM VirtualBox マネージャーの「新規」ボタンクリックし、任意の名前を入力し、タイプ:BSD、バージョン:FreeBSD(64-bit)を選択し「次へ」
VirtualBox Manager

VirtualBox make Server OS

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

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

ハードディスクのファイルタイプはデフォルト「VDI(VirtualBox Disck Image)」で「次へ」
VirtualBox make Server File Type

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

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

設定 > ストレージ > コントローラー:IDE「空」を選択し右上のCDをクリック「仮想光学ディスクファイルを選択」しダウンロードした「FreeBSD-11.2-RELEASE-amd64-dvd1.iso」を選択し「OK」
VirtualBox make Server Storage

VirtualBox make Server Storage Disk

VirtualBox make Server Storage Disk Select ISO


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

FreeBSD のインストール画面が表示
FreeBSD Install Start

「Install」
FreeBSD Install Wellcome

「Japanese 106」を選択し「Select」
FreeBSD Install Keymap Selection

「SELECT」
FreeBSD Install Keymap Selected

任意のホスト名を入力し「OK」
FreeBSD Install Set Hostname

「lib32」「ports」を選択し「OK」
FreeBSD Install Distribution Select

「Auto (UFS)」を選択し「OK」
FreeBSD Install Partitioning

Partition の選択「Entire Disk」
FreeBSD Install Partition

「GPT」を選択し「OK」
FreeBSD Install Partition Scheme

設定した内容を確認して「Finish」
FreeBSD Install Partition Editor

「Commit」してインストール開始
FreeBSD Install Confirmation

FreeBSD Install Archive Extraction

root パスワードの設定(入力文字列は非表示)
FreeBSD Install root password

確認の為に root パスワードの再入力(入力文字列は非表示)
FreeBSD Install root password check

network を確認し「OK」
FreeBSD Install Network Configration

IPv4 設定「Yes」
FreeBSD Install Network Configration IPv4

DHCP 設定「Yes」
FreeBSD Install Network Configration DHCP

IPv6 設定「Yes」
FreeBSD Install Network Configration IPv6

SLAAC 設定「Yes」
FreeBSD Install Network Configration SLAAC

DNS 設定を確認し「OK」(OK, Cancel はTabキーで選択)
FreeBSD Install Network Configration Check

Time Zone「Asia」を選択して「OK」
FreeBSD Install Time Zone Selector

Country region「Japan」を選択して「OK」
FreeBSD Install Countries in Asia

「'JST'」を確認して「Yes」
FreeBSD Install Asia Confirmation

現在の日付を確認して「Skip」
FreeBSD Install Time & Date

時間を設定して「Set Time」
FreeBSD Install Time & Date Set

起動時に動作するサービスを選択し「OK」
FreeBSD Install System Configuration

セキュリティを強化するサービス。デフォルトのままで「OK」
FreeBSD Install System Hardening

root 以外のユーザーを追加。今回は開発環境の為、追加せず「No」
FreeBSD Install Add User Accounts

設定の修正、追加ができます。完了したら「Exit」を選択し「OK」
FreeBSD Install Final Configuration

追加設定の選択。今回は「No」
FreeBSD Install Manual Configuration

インストール終了。「Reboot」で再起動
FreeBSD Install Complete

※再起動後に FreeBSD のインストール画面が再度表示された場合
・仮想マシンの電源オフ
・設定 > ストレージ > 右上のCDアイコンクリック > 仮想ドライブからディスクを除去 > OK
・起動



root でログイン(パスワードの入力文字列は非表示)後、シャットダウン
login: root
Password:
...
# shutdown -p now

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


FreeBSD を起動しネットワークを設定する
bsdconfig コマンドでシステム設定メニューを開く
# bsdconfig
「Networking Managemant」を選択し「OK」


「Network Interfaces」を選択し「OK」


ネットワークアダプター2(ホストオンリーアダプター) em1 を選択し「OK」


「Save/Exit」を選択し「OK」

・DHCP : Disabled(自動IPアドレスの割当てを無効)
・ipaddr : 192.168.56.110(最後の 110 は任意。1~254の数値を入力)
・netmask : 255.255.255.0

設定したネットワーク em1 を起動「Yes」


gateway 10.0.2.2 が既にルーティングテーブルに存在しているエラーが表示される「OK」


「Networking Managemant」を終了。「Exit」を選択し「OK」


「Exit bsdconfig」でシステム設定を終了


ネットワーク em1 の IP が設定されている事を確認
em1 の inet が 192.168.56.110 になっている事
# ifconfig
em0: flags=...
    ...
    ...
em1: flags=...
    ....
    inet 192.168.56.110 netmask ...
    ....
lo0: flags=...
    ...
    ...

Windows(ホスト)のコマンドプロンプトより FreeBSD サーバーへの通信を確認
ping 192.168.56.110


root での SSH ログインを許可する
# vi /etc/ssh/sshd_config (変更)
#PermitRootLogin no
PermitRootLogin yes

#PasswordAuthentication no
PasswordAuthentication yes

SSH サーバーを再起動
# /etc/rc.d/sshd restart
パッケージアップデート
# pkg update -f

Apache 2.4 インストール

インストールする Apache パッケージを検索
# pkg search apache2
apache24-2.4.48
...

Apache2.4 インストール # pkg install -y apache24-2.4.48
Apache のバージョンを確認
# httpd -v
Server version: Apache/2.4.48 (FreeBSD)
Server built: unknown

Apache 設定
# vi /usr/local/etc/apache24/httpd.conf (開発用変更)
EnableMMAP off
EnableSendfile off
(ディレクトリ内のファイル一覧を見られないようにする)
Options Indexes FollowSymLinks
↓ (Indexes 削除)
Options FollowSymLinks
(rewrite を有効にする)
#LoadModule rewrite_module libexec/apache24/mod_rewrite.so ↓ (# 削除)
LoadModule rewrite_module libexec/apache24/mod_rewrite.so (ssl を有効にする)
#LoadModule ssl_module libexec/apache24/mod_ssl.so ↓ (# 削除)
LoadModule ssl_module libexec/apache24/mod_ssl.so
セキュリティ設定(新規ファイル作成)
# vi /usr/local/etc/apache24/Includes/security.conf
(追記)
# version data delete
ServerTokens Prod
ServerSignature Off

# inode data delete
FileETag None

# response header X-Powered-By delete
Header unset X-Powered-By

# httproxy counterplan
RequestHeader unset Proxy

# click jacking counterplan
Header append X-Frame-Options SAMEORIGIN

# XSS counterplan
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff

# XST counterplan
TraceEnable Off

Apache 起動設定
# vi /etc/rc.conf (追加) # Apache24 add
apache24_enable="YES"

Apache 起動 apachectl start
Apache 起動確認
# apachectl status
apache24 is running as pid ....

ブラウザから Web サーバーにアクセス。「It works!」が表示されることを確認
http://192.168.56.110

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

PHP 7.4 インストール

PHP で必要なパッケージをインストール
# pkg install -y php74-7.4.23 php74-curl-7.4.23 php74-gd-7.4.23 php74-imap-7.4.23 php74-json-7.4.23 php74-ldap-7.4.23 php74-mbstring-7.4.23 php74-openssl-7.4.23 php74-pdo-7.4.23 php74-pdo_mysql-7.4.23 php74-pdo_pgsql-7.4.23 php74-xml-7.4.23 php74-zip-7.4.23 mod_php74-7.4.23
PHP のバージョンを確認
# php74 -v
PHP 7.4.23 (cli) (built: Aug 31 2021 01:11:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

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

Apache 設定ファイル(httpd.conf)に PHP 読込み情報を追加
# vi /usr/local/etc/apache24/httpd.conf (追加)
# php AddType
AddType application/x-httpd-php .php

Apache 再起動
# apachectl restart
PHP確認ファイルを作成
# vi /usr/local/www/apache24/data/info.php (追加)
<?php
phpinfo();

ブラウザから Web サーバーにアクセス。「PHP Version ...」が表示されることを確認
http://192.168.56.110/info.php


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) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:sunabird
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []: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 /usr/local/etc/ssl/ # mv php.sunabird.local.crt /usr/local/etc/ssl/
httpd.conf に virtual hosts ファイル読込み設定
# vi /usr/local/etc/apache24/httpd.conf
# Virtual hosts
#Include etc/apache24/extra/httpd-vhosts.conf
(コメント削除)
# Virtual hosts
Include etc/apache24/extra/httpd-vhosts.conf

サイト用のディレクトリ作成(DocumentRootにする)
# mkdir /usr/local/www/apache24/php.sunabird.local DocumentRoot(ドキュメントルート):ファイルを置くとブラウザからアクセスできるようになる場所。
VirtualHost 設定(SSL に自動リダイレクト)
# vi /usr/local/etc/apache24/extra/httpd-vhosts.conf (既存設定をコメントアウト)
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
...
#</VirtualHost>

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host2.example.com
...
#</VirtualHost>
(全て追加)
<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>
  ServerName php.sunabird.local:443

  SSLEngine on
  SSLProtocol -all +TLSv1.2
  SSLCertificateKeyFile /usr/local/etc/ssl/php.sunabird.local.key
  SSLCertificateFile /usr/local/etc/ssl/php.sunabird.local.crt

  DocumentRoot "/usr/local/www/apache24/php.sunabird.local"
  <Directory "/usr/local/www/apache24/php.sunabird.local">
    AllowOverride All
    Options FollowSymLinks
    Require all granted
  </Directory>

</VirtualHost>

Apache の再起動
# apachectl restart
確認用ファイルを作成
# vi /usr/local/www/apache24/php.sunabird.local/info.php (追加)
<?php
phpinfo();

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


ブラウザからWebサーバーに https でアクセス。「PHP Version ...」が表示されることを確認
https://php.sunabird.local/info.php
※詳細設定 >「php.sunabird.local にアクセスする(安全ではありません)」をクリック
SSLでアクセスできない...
・ネットワークにプロキシサーバーを利用している場合:インターネットオプション > 接続 > LANの設定 > 詳細設定 > プロキシの除外設定 に「php.sunabird.local」を追加

MySQL 5.7 インストール

MySQL 5.7 をインストール
# pkg install -y mysql57-server-5.7.35
MySQL 起動設定
# vi /etc/rc.conf (追加) # MySQL add
mysql_enable="YES"

MySQL 起動
# /usr/local/etc/rc.d/mysql-server start
MySQL root 初期パスワード確認
# vi /root/.mysql_secret
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 への接続確認用のファイル作成
# vi /usr/local/www/apache24/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 "ERROR!: " . $e->getMessage() . "<br/>";
    die();
}
?>

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


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