今日は朝から本格的な雨が降っており、折角なので途中で止まっていたWebサーバーのApache2をインストールして見た。
ナゼWebサーバーを入れようとしたかと言いますと、データベースにデータを入力する際に、SQL文を書いて実行しなくてもWeb画面から入力が可能になれば良いかなと思ったこと。
更には、データベースのメンテを行うためにphpmyadminと言うアプリがあるが、これを実行するのにもWebサーバーが必要なため、Webサーバーをインストールしました。
Webサーバー自体もいろいろあるのですが、やはりLinuxで実績が一番あるということからApache2にしました。
Webサーバーを稼働させると、Webサーバーからデータベースにアクセスができるようになり操作性の向上につながる。
Apache2をインストールする
Apache2もラズパイではaptコマンドを使用することで簡単にインストールすることができます。
まずはいつものようにaptコマンドでApache2をインストールします。
$ sudo apt install apache2
jkawasaki@raspberrypi:~ $ sudo apt install apache2
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
状態情報を読み取っています… 完了
以下の追加パッケージがインストールされます:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0
提案パッケージ:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom
以下のパッケージが新たにインストールされます:
apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
2,348 kB のアーカイブを取得する必要があります。
この操作後に追加で 7,929 kB のディスク容量が消費されます。
続行しますか? [Y/n]
取得:1 http://security.debian.org/debian-security bullseye-security/main arm64 libapr1 arm64 1.7.0-6+deb11u2 [99.6 kB]
取得:2 http://security.debian.org/debian-security bullseye-security/main arm64 libaprutil1 arm64 1.6.1-5+deb11u1 [89.6 kB]
取得:3 http://security.debian.org/debian-security bullseye-security/main arm64 libaprutil1-dbd-sqlite3 arm64 1.6.1-5+deb11u1 [18.9 kB]
取得:4 http://security.debian.org/debian-security bullseye-security/main arm64 libaprutil1-ldap arm64 1.6.1-5+deb11u1 [17.1 kB]
取得:5 http://security.debian.org/debian-security bullseye-security/main arm64 apache2-bin arm64 2.4.56-1~deb11u1 [1,315 kB]
取得:6 http://deb.debian.org/debian bullseye/main arm64 liblua5.3-0 arm64 5.3.3-1.1+b1 [110 kB]
取得:7 http://security.debian.org/debian-security bullseye-security/main arm64 apache2-data all 2.4.56-1~deb11u1 [160 kB]
取得:8 http://security.debian.org/debian-security bullseye-security/main arm64 apache2-utils arm64 2.4.56-1~deb11u1 [261 kB]
取得:9 http://security.debian.org/debian-security bullseye-security/main arm64 apache2 arm64 2.4.56-1~deb11u1 [278 kB]
2,348 kB を 1秒 で取得しました (4,294 kB/s)
以前に未選択のパッケージ libapr1:arm64 を選択しています。
(データベースを読み込んでいます … 現在 98867 個のファイルとディレクトリがインストールされています。)
…/0-libapr1_1.7.0-6+deb11u2_arm64.deb を展開する準備をしています …
libapr1:arm64 (1.7.0-6+deb11u2) を展開しています…
以前に未選択のパッケージ libaprutil1:arm64 を選択しています。
…/1-libaprutil1_1.6.1-5+deb11u1_arm64.deb を展開する準備をしています …
libaprutil1:arm64 (1.6.1-5+deb11u1) を展開しています…
以前に未選択のパッケージ libaprutil1-dbd-sqlite3:arm64 を選択しています。
…/2-libaprutil1-dbd-sqlite3_1.6.1-5+deb11u1_arm64.deb を展開する準備をしています …
libaprutil1-dbd-sqlite3:arm64 (1.6.1-5+deb11u1) を展開しています…
以前に未選択のパッケージ libaprutil1-ldap:arm64 を選択しています。
…/3-libaprutil1-ldap_1.6.1-5+deb11u1_arm64.deb を展開する準備をしています …
libaprutil1-ldap:arm64 (1.6.1-5+deb11u1) を展開しています…
以前に未選択のパッケージ liblua5.3-0:arm64 を選択しています。
…/4-liblua5.3-0_5.3.3-1.1+b1_arm64.deb を展開する準備をしています …
liblua5.3-0:arm64 (5.3.3-1.1+b1) を展開しています…
以前に未選択のパッケージ apache2-bin を選択しています。
…/5-apache2-bin_2.4.56-1~deb11u1_arm64.deb を展開する準備をしています …
apache2-bin (2.4.56-1~deb11u1) を展開しています…
以前に未選択のパッケージ apache2-data を選択しています。
…/6-apache2-data_2.4.56-1~deb11u1_all.deb を展開する準備をしています …
apache2-data (2.4.56-1~deb11u1) を展開しています…
以前に未選択のパッケージ apache2-utils を選択しています。
…/7-apache2-utils_2.4.56-1~deb11u1_arm64.deb を展開する準備をしています …
apache2-utils (2.4.56-1~deb11u1) を展開しています…
以前に未選択のパッケージ apache2 を選択しています。
…/8-apache2_2.4.56-1~deb11u1_arm64.deb を展開する準備をしています …
apache2 (2.4.56-1~deb11u1) を展開しています…
libapr1:arm64 (1.7.0-6+deb11u2) を設定しています …
liblua5.3-0:arm64 (5.3.3-1.1+b1) を設定しています …
apache2-data (2.4.56-1~deb11u1) を設定しています …
libaprutil1:arm64 (1.6.1-5+deb11u1) を設定しています …
libaprutil1-ldap:arm64 (1.6.1-5+deb11u1) を設定しています …
libaprutil1-dbd-sqlite3:arm64 (1.6.1-5+deb11u1) を設定しています …
apache2-utils (2.4.56-1~deb11u1) を設定しています …
apache2-bin (2.4.56-1~deb11u1) を設定しています …
apache2 (2.4.56-1~deb11u1) を設定しています …
Enabling module mpm_event.
Enabling module authz_core.
Enabling module authz_host.
Enabling module authn_core.
Enabling module auth_basic.
Enabling module access_compat.
Enabling module authn_file.
Enabling module authz_user.
Enabling module alias.
Enabling module dir.
Enabling module autoindex.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module filter.
Enabling module deflate.
Enabling module status.
Enabling module reqtimeout.
Enabling conf charset.
Enabling conf localized-error-pages.
Enabling conf other-vhosts-access-log.
Enabling conf security.
Enabling conf serve-cgi-bin.
Enabling site 000-default.
Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /lib/systemd/system/apache2.service.
Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /lib/systemd/system/apache-htcacheclean.service.
man-db (2.9.4-2) のトリガを処理しています …
libc-bin (2.31-13+rpt2+rpi1+deb11u5) のトリガを処理しています …
関係するモジュールやライブラリーが自動敵意インストールされます。
インストールが完了すると、自動的にApache2が起動しますので実際に動いているかの確認をします。
$ ps agx
上記のコマンドを入れると、現在稼働している状況が全てみられますので、Apache2が以下の箇所で起動していることが確認できます。
31209 ? Ss 0:00 /usr/sbin/apache2 -k start
31211 ? Sl 0:00 /usr/sbin/apache2 -k start
31212 ? Sl 0:00 /usr/sbin/apache2 -k start
これでApache2が無事稼働していることが確認できました。
実際のApache2の画面を確認する
それでは実際にApache2が稼働していることを、別のPCからラズパイのIPアドレスに直接アクセスしてみます。
ラズパイのIPは192.168.10.136なので、このIPをブラウザのURL欄に直接打ち込みます。
Apache2の標準ページの確認ができましたので、Apache2は無事稼働していることが確認できました。
本来、外部からのアクセスを許可する場合にはhttpではなくhttpsにするのがセキュリティ面からも妥当なのですが、今回は自宅外からのアクセスは拒否しているので、当面はhttpのままで実行します。
phpの稼働を確認する
これから入れようとするデータベース管理アプリのphpmyadminや、データベースへの直接作業を実行するためには、phpのファイルがWebサーバーで読めなければいけません。
まずはデフォルトDIRにindex.phpと言うファイルを作成し保存します。
一般的にはindex.htmlなのですが、phpの動作を可能とするにはhtmlでなく、拡張子をphpにしたファイルを作成し、そのファイルをアクセスすることでphpの動作が確認できます。
今回、index.phpの中に各コードはお馴染みのphp動作確認用のコードです。
エディターを使用してindex.phpと言うファイルを作ります。中にはたった3行のコードを記述して保存します。
index.phpの中身は以下になります。
<?php
echo phpinfo();
?>
このコードをブラウザで呼び出すには
http://92.168.10.136/index.php
となります。※index.phpを付けないと、index.htmlが呼び込まれるため。
読み込んだ結果は以下の通り。
なんと!index.phpのソースコードがそのまま表示されてしまいます。これは大きな問題ですね。
何らかの対応をして、ソースコードが表示されないようにしなければいけません。
ブラウザのページでソースコードの表示される対策
Apache2をインストールした際に、モジュールの有効化はされているのですが、どうやらネットで調べていくと、phpに関するモジュールがインストールされていないのが原因のようです。
具体的には、Apache2でphpを使うために必要なライブラリーモジュールのようなんです。
そのモジュールは、libapache2-mod-phpと言うモノで、これをインストールしてからApache2を再起動しないと、phpを取り扱えないようなのです。
それでは実際にモジュールをインストールしていきましょう。
libapache2-mod-phpをインストールする
何時ものaptを使用してlibapache2-mod-phpをインストールしていきます。
$ sudo apt install libapache2-mod-php
jkawasaki@raspberrypi:~ $ sudo apt install libapache2-mod-php
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
状態情報を読み取っています… 完了
以下の追加パッケージがインストールされます:
libapache2-mod-php7.4
提案パッケージ:
php-pear
以下のパッケージが新たにインストールされます:
libapache2-mod-php libapache2-mod-php7.4
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
1,254 kB のアーカイブを取得する必要があります。
この操作後に追加で 4,637 kB のディスク容量が消費されます。
続行しますか? [Y/n]
取得:1 http://security.debian.org/debian-security bullseye-security/main arm64 libapache2-mod-php7.4 arm64 7.4.33-1+deb11u3 [1,247 kB]
取得:2 http://deb.debian.org/debian bullseye/main arm64 libapache2-mod-php all 2:7.4+76 [6,460 B]
1,254 kB を 0秒 で取得しました (2,935 kB/s)
以前に未選択のパッケージ libapache2-mod-php7.4 を選択しています。
(データベースを読み込んでいます … 現在 105408 個のファイルとディレクトリがインストールされています。)
…/libapache2-mod-php7.4_7.4.33-1+deb11u3_arm64.deb を展開する準備をしています …
libapache2-mod-php7.4 (7.4.33-1+deb11u3) を展開しています…
以前に未選択のパッケージ libapache2-mod-php を選択しています。
…/libapache2-mod-php_2%3a7.4+76_all.deb を展開する準備をしています …
libapache2-mod-php (2:7.4+76) を展開しています…
libapache2-mod-php7.4 (7.4.33-1+deb11u3) を設定しています …Creating config file /etc/php/7.4/apache2/php.ini with new version
Module mpm_event disabled.
Enabling module mpm_prefork.
apache2_switch_mpm Switch to prefork
apache2_invoke: Enable module php7.4
libapache2-mod-php (2:7.4+76) を設定しています …
libapache2-mod-php7.4 (7.4.33-1+deb11u3) のトリガを処理しています …
新規に2個パッケージがインストールされましたので、Apache2を再起動させます。
jkawasaki@raspberrypi:~ $ sudo service apache2 restart
再度phpファイルの動作を確認する
php用のモジュールをインストールして、Apache2を再起動したので再度index.phpを読込phpファイルの表示ができるかを確認する。
http://92.168.10.136/index.php
今度は書いたソースコードではなく、php infoのページが表示されました。
このphp infoのページを表示させることができたので、Apache2がphpファイルを取り扱える事が証明されました。
これで、phpによるデータベースへの入力が可能となりました。
まとめ
今回、データベースの入出力インターフェースとしてphpとWebサーバーのApache2を導入しました。
しかし、Apache2をインストールしただけではphpファイルを取り扱うことができず、phpで書いたファイルはそのままソースコードを表示してしまう状況でした。
調べた結果、原因としてはApache2のphpモジュールがインストールされていないことだったので、追加インストールをすることで無事にApache2でphpを取り扱えるようになりました。
Apache2を標準でインストールしただけではphpファイルを使えないと言う事実が分かった事が大きな成果ですね。
何らかの理由でラズパイにOSを再インストールしたときなど、環境の再構築をする際に忘れやすいポイントでもあります。
とりあえずApache2までインストールできましたので、次はデータベースのメンテナンスや操作で使用するphpmyadminをインストールしていきたいと思います。