第6話 LaravelのためのApache導入編 ~ 実践!Hyper-Vで開発環境構築! CentOS7+VSCode+Laravel
はじめに
これはLaravel開発環境構築のためにhyper-VでCentOS7をインストール済みで
そこから初めてLaravel開発環境を構築したい人向けの記事です。
そして、本記事はApacheの導入を解説します。
前提
-
Hyper-Vにインストール済みのCentOS7(ver: 7.9)
この記事ではHyper-VにインストールされたCentOS7にLaravelを開発環境として
構築するために必要な準備について解説します。CentOS7のバージョン確認するにはCentOSを起動して以下コマンドを実行してください。
cat /etc/centos-release
Linux release 7.9.2009 (core)
と表示されればOKですもしそうでなければ、以下記事を参考に導入してから本記事を閲覧頂ければと思います。
-
本記事は以下の要件導入を目指し、以下の状態を前提としています。
- Apache 2.4.58 --- 未導入
- MariaDB 10.4.32 --- 未導入
- PHP 8.2.12 --- 未導入
- composer (出来るだけ最新版) --- 未導入
本題のまえに・・・
この記事は上記の記事の内容を実施済みであることを前提に解説します。
前提は違えど自身の環境を把握して記事の内容との差分を理解して置き換えて読める方は
このまま閲覧頂ければと思います。
本記事からしばらくはゴリゴリにCentOS7でのお話になります。
本題
ApacheはWebサーバーのソフトウェアです。
ですが、そもそもWebサーバーとはなんでしょうか?
簡単に説明すると要求されたリクエストに対してWeb関連サービスを提供するソフトウェアになります。
LaravelはWebアプリケーションフレームワークです。
Laravelで開発されたアプリケーションはサービスそのものではありますが、LaravelはWebアプリケーションだけを開発するフレームワークなのでそれだけではせっかく開発したWebアプリケーションを使用者に届けることは出来ないのです。
勿論開発段階でもそれがWebアプリケーションとして機能しているかの確認テストのための実行環境としても必須になります。
そのため今回はWebサーバーとしてApacheを導入していきます。
そしてApacheを導入するためには以下の作業が必要です。
- Apacheのインストール
- Apacheの設定
- httpd.confの設定
- firewallの設定
- 自動起動設定
では、早速導入していきましょう。
Apache 2.4.58 の導入
まず、現在導入できるApacheのバージョンを確認しましょう。
# Apacheのバージョン確認。Apacheは[httpd]
[root@CentOS7 ~]# yum info httpd
# 実行結果
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* epel: ftp.kddilabs.jp
* extras: ftp-srv2.kddilabs.jp
* updates: ftp-srv2.kddilabs.jp
利用可能なパッケージ
名前 : httpd
アーキテクチャー : x86_64
バージョン : 2.4.6
リリース : 99.el7.centos.1
容量 : 2.7 M
リポジトリー : updates/7/x86_64
要約 : Apache HTTP Server
URL : http://httpd.apache.org/
ライセンス : ASL 2.0
説明 : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
残念ながら私の環境ではバージョンが足りないようです。
そしてApache 2.4.58は以下のリポジトリが必要になります。
- epel (Fedoraが提供するRedHat向けのパッケージ開発プロジェクトの名称)
- ius (Linux向けのパッケージ開発の有志プロジェクトの名称)
私の環境ではepelは導入済みのためこのままiusの導入をしていきます。
iusリポジトリの導入
# iusリポジトリの導入
yum -y install https://repo.ius.io/ius-release-el7.rpm
Apache 2.4.58のインストール
# Apacheに必要なモジュールも含めてインストール
yum -y install httpd24u-devel.x86_64 httpd24u-manual.noarch
# インストールされるもの
======================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
======================================================================================================
インストール中:
httpd24u-devel x86_64 2.4.58-1.el7.ius ius 221 k
httpd24u-manual noarch 2.4.58-1.el7.ius ius 2.4 M
依存性関連でのインストールをします:
apr15u x86_64 1.5.2-2.ius.el7 ius 112 k
apr15u-devel x86_64 1.5.2-2.ius.el7 ius 194 k
apr15u-util x86_64 1.5.4-3.ius.el7 ius 93 k
apr15u-util-devel x86_64 1.5.4-3.ius.el7 ius 77 k
cyrus-sasl x86_64 2.1.26-24.el7_9 updates 88 k
cyrus-sasl-devel x86_64 2.1.26-24.el7_9 updates 310 k
expat-devel x86_64 2.1.0-15.el7_9 updates 58 k
httpd24u x86_64 2.4.58-1.el7.ius ius 1.4 M
httpd24u-filesystem noarch 2.4.58-1.el7.ius ius 28 k
httpd24u-tools x86_64 2.4.58-1.el7.ius ius 92 k
libbrotli x86_64 1.0.9-10.el7 epel 308 k
libdb-devel x86_64 5.3.21-25.el7 base 39 k
libnghttp2 x86_64 1.33.0-1.3.el7 epel 69 k
mailcap noarch 2.1.41-2.el7 base 31 k
openldap-devel x86_64 2.4.44-25.el7_9 updates 805 k
依存性関連での更新をします:
cyrus-sasl-lib x86_64 2.1.26-24.el7_9 updates 156 k
expat x86_64 2.1.0-15.el7_9 updates 83 k
openldap x86_64 2.4.44-25.el7_9 updates 356 k
トランザクションの要約
======================================================================================================
インストール 2 パッケージ (+15 個の依存関係のパッケージ)
更新 ( 3 個の依存関係のパッケージ)
総ダウンロード容量: 6.9 M
インストール確認
# インストール済みの[httpd]を確認
[root@CentOS7 ~]# yum list installed | grep httpd
httpd24u.x86_64 2.4.58-1.el7.ius @ius
httpd24u-devel.x86_64 2.4.58-1.el7.ius @ius
httpd24u-filesystem.noarch 2.4.58-1.el7.ius @ius
httpd24u-manual.noarch 2.4.58-1.el7.ius @ius
httpd24u-tools.x86_64 2.4.58-1.el7.ius @ius
# インストールされたhttpdのバージョンを確認
[root@CentOS7 ~]# httpd -v
Server version: Apache/2.4.58 (IUS)
Server built: Oct 26 2023 16:56:39
よし、Apache 2.4.58のインストールが出来ました。
Apache 2.4.58 の設定
このままではApacheはまだ起動できません。
次に必要な設定を行っていきます。
httpd.confの設定
試しに早速httpdを起動してみましょう。
# 起動するぞい!
[root@CentOS7 ~]# systemctl start httpd
# エラーが出たぞい!?
Job for httpd.service failed. See "systemctl status httpd.service" and "journalctl -xe" for details.
# エラーを確認するぞい!
[root@CentOS7 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: failed (Result: protocol) since 日 2024-06-30 22:26:26 JST; 2min 21s ago
Docs: man:httpd.service(8)
Process: 6696 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=0/SUCCESS)
Main PID: 6696 (code=exited, status=0/SUCCESS)
Status: "Reading configuration..."
6月 30 22:26:26 CentOS7 systemd[1]: Starting The Apache HTTP Server...
6月 30 22:26:26 CentOS7 httpd[6696]: AH00558: httpd: Could not reliably determine the server'...sage
6月 30 22:26:26 CentOS7 httpd[6696]: httpd (pid 6608) already running
6月 30 22:26:26 CentOS7 systemd[1]: Failed to start The Apache HTTP Server.
6月 30 22:26:26 CentOS7 systemd[1]: Unit httpd.service entered failed state.
6月 30 22:26:26 CentOS7 systemd[1]: httpd.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
# とりあえず、httpd.confのチェックをしてみるぞい!
[root@CentOS7 ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::7b58:efe7:d3b7:d130. Set the 'ServerName' directive globally to suppress this message
Syntax OK
AH00558: httpd: fe80::7b58:efe7:d3b7:d130 を使用して、サーバーの完全修飾ドメイン名を確実に特定できませんでした。このメッセージを抑制するには、「ServerName」ディレクティブをグローバルに設定します。
と言っているようです。
ということは、/etc/httpd/conf/httpd.conf
でそれを設定する必要がありそうですね。
# httpd.confを編集
vi /etc/httpd/conf/httpd.conf
ServerNameはデフォルトではコメントアウトされています。
今回は新たにServerName localhost:80
と追記して上書き保存しました。
そしてhttpd.confに変更を加えてた時は反映のためにhttpdの再起動が必要になります。
# httpdを再起動
[root@CentOS7 ~]# systemctl restart httpd
# またエラーが出たぞい!?
Job for httpd.service failed. See "systemctl status httpd.service" and "journalctl -xe" for details.
# ここでエラー内容が確認できました。
[root@CentOS7 ~]# cat /var/log/httpd/error_log
[Sun Jun 30 21:46:03.882679 2024] [core:notice] [pid 6607:tid 6607] SELinux policy enabled; httpd running as context unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[Sun Jun 30 21:46:03.883367 2024] [suexec:notice] [pid 6607:tid 6607] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jun 30 21:46:04.025329 2024] [http2:warn] [pid 6608:tid 6608] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
[Sun Jun 30 21:46:04.025740 2024] [lbmethod_heartbeat:notice] [pid 6608:tid 6608] AH02282: No slotmem from mod_heartmonitor
[Sun Jun 30 21:46:04.027545 2024] [mpm_prefork:notice] [pid 6608:tid 6608] AH00163: Apache/2.4.58 (IUS) configured -- resuming normal operations
[Sun Jun 30 21:46:04.027559 2024] [core:notice] [pid 6608:tid 6608] AH00094: Command line: 'httpd'
[Sun Jun 30 21:46:04.025329 2024] [http2:warn] [pid 6608:tid 6608] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
ちょっと何言ってるか分からないですね。
ちょっと日本語に翻訳してみましょう。
[Sun Jun 30 21:46:04.025329 2024] [http2:warn] [pid 6608:tid 6608] AH10034: MPM モジュール (prefork.c) は mod_http2 ではサポートされていません。 MPM は、サーバー内での処理方法を決定します。 HTTP/2 にはこの点でさらに多くの要求があり、現在選択されている MPM では対応できません。これは勧告的な警告です。サーバーは引き続き動作しますが、HTTP/2 プロトコルは非アクティブになります
ふむふむ、Webサーバーとして実行は出来ているがHTTP/2とやらが使用できないようです。
さて、どうしましょう。ここからは技術選定の話になってしまいそうです。
簡単に説明すると、MPMとはマルチプロセシングモジュールの略称でマルチスレッドの概念が分からないと選定が出来ない部分のお話になります。
今回の記事は初心者向けですので出来るだけ簡単でハマらない方に判断を倒します。
結論→今出ているエラーをガン無視します!!
# httpd.confを編集してエラーをガン無視しちゃう♪
vi /etc/httpd/conf/httpd.conf
LogLevelをcore:errorに変更して上書き保存します。
次にOSを再起動します。
# この場合systemctl restartで反映されないので再起動する
reboot
再起動後以下コマンドでhttpdを実行
# httpdを起動
systemctl start httpd
# httpdのステータス確認
[root@CentOS7 ~]# systemctl status httpd
# 実行結果
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 月 2024-07-01 22:17:45 JST; 8min ago
Docs: man:httpd.service(8)
Main PID: 1385 (httpd)
Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec: 0 B/sec"
CGroup: /system.slice/httpd.service
├─1385 /usr/sbin/httpd -DFOREGROUND
├─1386 /usr/sbin/httpd -DFOREGROUND
├─1387 /usr/sbin/httpd -DFOREGROUND
├─1388 /usr/sbin/httpd -DFOREGROUND
├─1391 /usr/sbin/httpd -DFOREGROUND
└─1395 /usr/sbin/httpd -DFOREGROUND
7月 01 22:17:44 CentOS7 systemd[1]: Starting The Apache HTTP Server...
7月 01 22:17:45 CentOS7 systemd[1]: Started The Apache HTTP Server.
起動成功です!!
これでApacheのインストールはできました。
firewallの設定
さてさて、早速ブラウザでアクセスしてみましょう。
私のCentOS7のIPアドレスは172.16.10.2
です。
アドレスバーにhttp://172.16.10.2
と打ってアクセスしてみましょう。
・・・まあ、こうなります。
初期状態ではhttp(ポート:80)は開いていません。
このポートを開けないとhttpの通信を受け付けられない=アクセスできないのでポートを開けていきます。
以下のコマンド(firewall-cmd)を実行します。
# Apache(http)のサービスを永続的にポートを開ける
firewall-cmd --zone=public --add-service=http --permanent
# 変更反映の為にリロードする
firewall-cmd --reload
# 反映を確認
firewall-cmd --list-all
# 実行結果
[root@CentOS7 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
services:
にhttp
が設定されました。これでfirewallの設定は完了です。
試しに再度ブラウザのアドレスバーにhttp://172.16.10.2
と打ってアクセスしてみましょう。
ついにWebサーバーにアクセスできました!
自動起動設定
あと、もう一息です。
ひとまずWebサーバーにアクセスできるようになりましたが、このままでは再起動したときにアクセスできなくなりますのでhttpdサービスの自動起動設定を行います。
# enableオプションで自動起動設定にする
systemctl enable httpd
これでOKです。
Apache 2.4.58 の動作確認
-
再起動してアクセス出来るかを確認する
以下コマンドで再起動後ブラウザでアクセスしてください。CentOS7reboot
この画面が表示されたらOKです。
表示されない場合は自動起動設定が出来ていないかもしれません。
再度設定を行ってください。 -
テストページを作ってちゃんとアクセスできるかを確認する
せっかくなので簡単なhtmlファイルを作って表示させてみましょう!CentOS7# パス移動 cd /var/www/html/ # htmlファイルを新規作成 touch ./index.html # 新規作成したhtmlファイルを編集 vi ./index.html
こんな感じで適当に作ってみました。
内容は本当に適当で大丈夫です。
これを上書き保存したあと再度ブラウザでアクセスしてみましょう。ちゃんと自分が作成したページに置き換わってますね!
動作確認も問題なさそうです。
さいごに
Apache難しいですよね・・・。実際ちゃんとやろうとするととても難しいものだと思います。
良くある初心者向けのApache導入の記事では理由やそうしないとどうなるのかの説明なしに端的な手順だけの説明が多い気がします。
裏を返せばそれなりに説明しようとするとそのための前提知識が必要なので補足説明が多くなったり、そもそも最適な設定は必要要件次第なためこうするべきと言い切れないことが多いのだなと感じました。
今回の記事はあくまで最小要件で補足説明を多めにした結果記事が長くなりました。
Discussion