LAMP環境構築(AlmaLinux8.6, PHP8.1, Apache2.4, MySQL8)

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


Virtual Box インストール

▼ 下記URLより VirtualBox platform packages をダウンロードしてインストール

https://www.virtualbox.org/wiki/Downloads

「Windows hosts」を選択

AlmaLinux 8.6 インストール

▼ 下記 URL から AlmaLinux ISO ファイルダウンロードページにアクセス

https://mirrors.almalinux.org/isos.html

▼ AlmaLinux ISO リンク x86_64 Versions 8.6 を選択

AlmaLinux Download ISO architectures select

▼ 近くのミラーサイト ftp.iij.ad.jp を選択

AlmaLinux Download ISO mirror site select

▼ AlmaLinux ISO ファイル AlmaLinux-8.6-x86_64-minimal.iso をダウンロード

AlmaLinux Download ISO minimal select

▼ Oracle VM VirtualBox マネージャーの「新規」クリック

仮想マシンの新規作成

▼ 仮想マシン情報を入力して「次へ」

仮想マシンの名前とオペレーティングシステム入力
  • 名前  : AlmaLinux86LAMP
  • マシンフォルダー  : (そのまま)
  • タイプ  : Linux
  • バージョン  : Red Hat(64-bit)

▼ 仮想マシンのメモリーサイズを 1024 に設定して「次へ」

仮想マシンのメモリーサイズ設定

▼ 仮想マシンのハードディスク 仮想ハードディスクを作成する を選択して「作成」

仮想マシンのハードディスクを選択

▼ 仮想ハードディスクのファイルタイプ VDI(VirtualBox Disk Image) を選択して「次へ」

仮想ハードディスクのファイルタイプを選択

▼ 仮想ハードディスクのストレージ 可変サイズ を選択して「次へ」

仮想ハードディスクのストレージを選択

▼ 仮想ハードディスクのファイル場所とサイズ(そのまま)を設定して「作成」

仮想ハードディスクのファイル場所とサイズを設定

▼ 作成した仮想マシンを選択

仮想マシンの選択

▼ 設定 > ストレージ > コントローラー:IDE「空」を選択し右上の CD アイコン をクリック「ディスクファイルを選択」

仮想マシンのストレージを設定

▼ ダウンロードした AlmaLinux ISO ファイル AlmaLinux-8.6-x86_64-minimal.iso を設定して「OK」

仮想マシンのストレージに AlmaLinux の ISO ファイルを設定

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

仮想マシンのネットワークアダプター追加

▼ Virtual Box マネージャから仮想マシンを「起動」


▼「Install AlmaLinux 8.6」を選択

AlmaLinux 8.6 インストール

▼ インストール時の使用言語 日本語 を選択して「続行」

AlmaLinux インストール時の言語選択

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

AlmaLinux インストール先選択

▼ 何も変えず「完了」

AlmaLinux インストール先設定

▼ ユーザーの設定「rootパスワード」を選択

AlmaLinux root パスワード選択

▼ root パスワードを入力して「完了」(脆弱なパスワードの場合、2回クリック)

AlmaLinux root パスワード設定

▼「インストールの開始」クリック

AlmaLinux インストール開始

▼ AlmaLinux のインストール中...

AlmaLinux インストール

▼ AlmaLinux のインストールが完了したら「システムの再起動」

AlmaLinux インストール完了

▼ 再起動後に AlmaLinux8.6 のインストール画面が表示された場合...

  • 仮想マシンの電源オフ
  • 設定 > ストレージ > 右上のCDアイコンクリック > 仮想ドライブからディスクを除去 > OK
  • Virtual Box マネージャから仮想マシンを「起動」

▼ root でログイン

localhost login: root
Password: (パスワードは非表示の為、見えない)


▼ ネットワークの確認

# ip a
1: lo: <LOOPBACK,UP,....
    link/loopback 00:...
    inet 127.0.0.1/8 scope...
...
2: enp0s3: <BROADCAST,...
    link/ether 08:...
...
3: enp0s8: <BROADCAST,...
    link/ether 08:...
...


▼ ネットワークアダプター1(enp0s3)の設定

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

変更

ONBOOT=yes

▼ vi エディタの操作方法

  • 編集モード:「i」キー
  • コマンドモード:「Esc」キー
  • 保存して終了:コマンドモードで「:wq」入力後に「Enter」キー
  • 保存せず終了:コマンドモードで「:q!」入力後に「Enter」キー

▼ ネットワークアダプター2(enp0s8)の設定

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8

変更

BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.56.107
PREFIX=24


▼ ネットワーク再起動

# systemctl restart NetworkManager


▼ ネットワークの確認(enp0s8 の inet に 192.168.56.107 が設定されていること)

# ip a
1: lo: <LOOPBACK,UP,....
    link/loopback 00:...
    inet 127.0.0.1/8 scope...
...
2: enp0s3: <BROADCAST,...
    link/ether 08:...
    inet 10.0.2.15/24 brd 10.0.2.255 scope...
...
3: enp0s8: <BROADCAST,...
    link/ether 08:...
    inet 192.168.56.107/24 brd 192.168.56.255 scope...
...


▼ パッケージのアップデート

# dnf update -y

▼ dnf コマンドが失敗する...
・ネットワークにプロキシサーバーを利用している場合、プロキシ設定を追加し AlmaLinux 再起動

# vi /etc/profile

最終行に追加

PROXY='プロキシIPアドレス:ポート番号'
export http_proxy=$PROXY
export HTTP_PROXY=$PROXY
export https_proxy=$PROXY
export HTTPS_PROXY=$PROXY

# reboot


▼ SELINUX 無効化

# vi /etc/selinux/config

変更

SELINUX=disabled


▼ AlmaLinux 再起動

# reboot


Apache 2.4 インストール

▼ OpenSSL バージョン確認

# openssl version
OpenSSL 1.1.1k FIPS 25 Mar 2021


▼ Apache インストール

# dnf install -y httpd httpd-devel mod_ssl


▼ Apache のバージョンを確認

# httpd -v
Server version: Apache/2.4.37 (AlmaLinux)
Server built: May 10 2022 08:06:36


▼ Apache 設定

# vi /etc/httpd/conf/httpd.conf

ディレクトリ内のファイル一覧を非表示(Indexs 削除)

#Options Indexes FollowSymLinks
Options FollowSymLinks

開発用変更

#EnableMMAP off
#EnableSendfile on
EnableSendfile off


▼ セキュリティ設定(新規ファイル作成)

# 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 の設定確認

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  ...


▼ Firewall http(80番ポート)を開放

# firewall-cmd --permanent --add-service=http --zone=public
success


▼ Firewall https(443番ポート)を開放

# firewall-cmd --permanent --add-service=https --zone=public
success


▼ Firewall 再起動

# systemctl restart firewalld


▼ Firewall の設定確認(service に http と https が追加)

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client http https ssh
  ports:
  protocols:
  ...


▼ ブラウザから Web サーバーにアクセス。「AlmaLinux Test Page」表示

http://192.168.56.107
Apache 初期画面「AlmaLinux Test Page」

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


▼ 初期画面(Test Page)を非表示にする

# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.back


▼ Apache 再起動

# systemctl restart httpd


PHP 8.1 インストール

▼ epel リポジトリ追加

# dnf -y install epel-release


▼ remi リポジトリ追加

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-8.rpm


▼ dnf パッケージのアップデート実施

# dnf update -y


▼ インストール可能な PHP パッケージの確認

# dnf module list php
AlmaLinux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
php 8.0 common [d], devel, minimal PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled


▼ PHP 8.1 インストール

# dnf module install -y php:remi-8.1
# dnf install -y php-pdo php-pdo php-gd php-json php-mysqlnd php-pecl-zip php-pear


▼ PHP のバージョンを確認

# php -v
PHP 8.1.6 (cli) (built: May 11 2022 01:14:18) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies


▼ PHP 設定(開発用にエラーを画面表示するなど)

# vi /etc/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 php-fpm


▼ PHP FPM 自動起動設定

# systemctl enable php-fpm


SSL インストール

▼ openssl 秘密鍵作成

# openssl genrsa -out test.sunabird.local.key 2048


▼ openssl CSR 作成(緑文字は入力項目)

# openssl req -new -key test.sunabird.local.key -out test.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) []:test.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 test.sunabird.local.csr -signkey test.sunabird.local.key -sha256 -days 3650 -out test.sunabird.local.crt


▼ 鍵と証明書を移動

# mv test.sunabird.local.key /etc/pki/tls/private/
# mv test.sunabird.local.crt /etc/pki/tls/certs/


▼ サイト用のディレクトリ作成(DocumentRootにする)

# mkdir /var/www/test.sunabird.local

DocumentRoot(ドキュメントルート) : ブラウザからアクセス可能なディレクトリ


▼ VirtualHost 設定(https に自動リダイレクト)

# vi /etc/httpd/conf.d/test.sunabird.local.conf

全て記載

<VirtualHost *:80>
  ServerName test.sunabird.local

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

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

  ErrorLog "/var/log/httpd/test.sunabird.local.error.log"
  TransferLog "/var/log/httpd/test.sunabird.local.access.log"

  SSLEngine on
  SSLProtocol TLSv1.2 +TLSv1.3
  SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
  SSLCertificateKeyFile /etc/pki/tls/private/test.sunabird.local.key
  SSLCertificateFile /etc/pki/tls/certs/test.sunabird.local.crt

  <Directory "/var/www/test.sunabird.local/">
    AllowOverride All
  </Directory>
</VirtualHost>


▼ Apache と PHP FPM 再起動

# systemctl restart httpd
# systemctl restart php-fpm


▼ 確認用ファイルを作成

# vi /var/www/test.sunabird.local/info.php

全て記載


▼ Windows の hosts ファイル(C:\Windows\System32\drivers\etc\hosts)の編集

追加

192.168.56.107 test.sunabird.local

▼ 上書き禁止の場合、ファイルを右クリック > プロパティ > セキュリティ > 編集 > Users を選択し「フルコントロール」にチェックし「OK」 > Windowsセキュリティの警告「はい」> 「OK」

windows10 ファイル権限変更

▼ ブラウザからWebサーバーに https でアクセス。PHP 設定情報が表示されることを確認

https://test.sunabird.local/info.php

▼「詳細設定」クリック

ブラウザエラー「この接続ではプライバシーが保護されません」

▼「test.sunabird.local にアクセスする(安全ではありません)」クリック

ブラウザエラー「test.sunabird.local にアクセスする(安全ではありません)」

▼ PHP 設定情報表示「PHP Version 8.1....」表示を確認

ブラウザ PHP 設定情報表示「PHP Version 8.1....」

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


MySQL 8 インストール

▼ MySQL 8 をインストール

# dnf install -y mysql-devel mysql-server


▼ バージョン確認

# mysqld --version
/usr/libexec/mysqld Ver 8.0.26 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 への接続確認用のファイル作成

# vi /var/www/test.sunabird.local/mysql_test.php

全て記載


▼ ブラウザからアクセスし DB に格納したサンプルデータの表示を確認

https://test.sunabird.local/mysql_test.php

ブラウザ MySQL接続、データ表示確認

▼ AlmaLinux のタイムゾーンを確認

# timedatectl status

▼ JST ではない場合、設定変更
# timedatectl set-timezone Asia/Tokyo


▼ NTP サーバー設定

# vi /etc/chrony.conf

変更

#pool 2.cloudlinux.pool.ntp.org iburst
pool ntp.nict.jp


▼ chrony 再起動

# systemctl restart chronyd

時刻の同期には時間がかかります


メールサーバー Postfix 設定

▼ Postfix インストール

# dnf install -y postfix


▼ Postfix 起動と自動起動設定

# systemctl start postfix
# systemctl enable postfix


▼ PHP から メール送信

# vi /var/www/test.sunabird.local/mail_test.php

全て記載


▼ ブラウザからアクセスして 送信先メールアドレス にメールが送信されることを確認

https://test.sunabird.local/mail_test.php

ブラウザメール送信、データ表示確認

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

▼ VBox GuestAdditions に必要なパッケージをインストール

# dnf install -y kernel-devel kernel-headers dkms gcc gcc-c++ bzip2 perl make


▼ AlmaLinux 再起動

# reboot


▼ VirtualBox コンソール側の デバイス > 「GuestAdditions CD イメージの挿入...」

VirtualBox コンソール GuestAdditions CD イメージの挿入...

▼ VBox GuestAdditions インストール

# mkdir /mnt/cdrom
# mount -r /dev/cdrom /mnt/cdrom
# sh /mnt/cdrom/VBoxLinuxAdditions.run

インストールに失敗する場合、最新バージョンの Virtual Box にアップデートして再実行


▼ apache ユーザを vboxsfグループに追加

# gpasswd -a apache vboxsf


▼ VirtualBox マネージャより共有フォルダーを設定


▼ 設定 > 共有フォルダー > 右上「ディレクトリ+」アイコン

VirtualBox マネージャ「共有フォルダーの追加」
  • フォルダーのパス:(Windows側で共有したいディレクトリ)
  • フォルダー名:(フォルダ名)
  • 「自動マウント(A):チェック」「永続化する(M):チェック」
  • 「OK」

▼ サーバ起動時に自動に共有化されるように設定

# vi /etc/rc.local

最終行に追加

mount -t vboxsf (共有フォルダーのフォルダー名) /var/www/test.sunabird.local -o uid=apache,gid=apache


▼ ディレクトリの権限設定

# chown -R apache:apache /var/www/test.sunabird.local
# chmod -R 777 /var/www/test.sunabird.local
# chmod u+x /etc/rc.d/rc.local


▼ AlmaLinux 再起動

# reboot


▼ Windows 共有ディレクトリの DocumentRoot に確認用ファイル作成

C:\www\test.sunabird.local\test.php

全て記載


▼ ブラウザから確認ファイルにアクセス。「test」と表示されたらOK

https://test.sunabird.local/test.php

ブラウザ「test」表示確認

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