2022 年度 OSS リテラシ 3 : Apache + PHP のセットアップ

はじめに

本演習ではサーバとして VMware 上の仮想マシンを用いる. 本資料では仮想マシンに Apache をインストールする手順をまとめる.

インストール

Web サーバ (Apache2)

Web サーバとして Apache2 を利用する. Debian パッケージを利用してインストールする.

$ sudo -s

# apt update

# apt install apache2

インストール確認

apache2 パッケージをインストールすると自動的に Web サーバが起動する. この段階では apache2 の設定ファイルを変更する必要はない.

ブラウザで自分の IP にアクセスしてみよ. 以下のような URL をブラウザに打ち込めば良い.

http://10.176.0.XXX (XXX は自分の IP に)

上記のデフォルトページに書かれているように, 設定ファイルは /etc/apache2 以下に存在する. デフォルトのドキュメントルートは /etc/apache2/sites-enabled/000-default.conf に書かれている. ファイルを見るとドキュメントルートが /var/www/html であることがわかる.

# less /etc/apache2/sites-enabled/000-default.conf 

  ...(略)...
  DocumentRoot /var/www/html
  ...(略)...

そのため, /var/www/html 以下に HTML ファイルを置けば, ブラウザ上から閲覧することが可能となる.

PHP

PHP を Debian パッケージを利用してインストールする.

パッケージは apt-cache search コマンドを用いて検索することができる.

$ apt-cache search php

  ...(略)...

PHP 関連のパッケージは大量に存在するが, php-common libapache2-mod-php php-cli を インストールしておけば依存関係によって必要なパッケージが概ねインストールされる. なお, Web サーバとして apache2 を使うので, apache2 用のモジュール (libapache2-mod-php) もインストールしている.

$ sudo -s

# apt update

  ...(略)...

# apt install php-common libapache2-mod-php php-cli 

  ...(略)...

設定

Web サーバ (Apache2)

Linux のディストリビューション毎に設定ファイルの置き方に多少の違いがあるが, Debian 系の Linux では設定ファイルは /etc/ の下にあるパッケージ名のディレクトリに置かれている.

# ls -l /etc/apache2/

  合計 80
  -rw-r--r-- 1 root root  7224 11月  4 03:46 apache2.conf
  drwxr-xr-x 2 root root  4096 12月  4 23:52 conf-available
  drwxr-xr-x 2 root root  4096 12月  4 23:52 conf-enabled
  -rw-r--r-- 1 root root  1782 11月  3 20:34 envvars
  -rw-r--r-- 1 root root 31063 11月  3 20:34 magic
  drwxr-xr-x 2 root root 12288 12月 10 15:33 mods-available
  drwxr-xr-x 2 root root  4096 12月 10 15:33 mods-enabled
  -rw-r--r-- 1 root root   320 11月  3 20:34 ports.conf
  drwxr-xr-x 2 root root  4096 12月  4 23:52 sites-available
  drwxr-xr-x 2 root root  4096 12月  4 23:52 sites-enabled

ここで, conf-available と conf-enabled, mods-available と mods-enabled, sites-available と sites-enabled のセットがあることに気づくだろう. それぞれ以下のような意味がある.

conf-      : 諸々の設定ファイル 
mods-      : モジュール
sites-     : サイトの設定 (root ディレクトリやサイト名, など)

-available : 利用可能なもの. 
-enabled   : 有効になっているもの. 

モジュールなどを有効・無効にするために, 以下のコマンドが用意されている.

a2enmod <module 名>
a2dismod <module 名>

a2enconf <conf 名>
a2disconf <conf 名>

a2ensite <site 名>
a2dissite <site 名>

また, ユーザは www-data グループに入れておくと良い. apache2 は www-data ユーザ・グループ権限で実行されるためである.

# usermod -aG www-data hogehoge

# grep www-data /etc/group 

  www-data:x:33:hogehoge   (自分のユーザ名を加わっていることを確認)

usermod の設定を有効にするには,とグインしなおせばよい. ログインし直した後に groups コマンドを実行すると www-data が含まれていることがわかる.

# exit 

$ su hogehoge   (自分自身に su )

$ groups

  hogehoge cdrom floppy sudo audio dip www-data video plugdev netde 

ユーザディレクトリの有効化と動作確認

URL で http://サイト名/~ユーザ名/ と書かれているケースがよくある. これは Apache2 で userdir モジュールを有効にすることで実現される. userdir モジュールを有効にすると, 各ユーザは自分の権限で Web ページを公開できるようになる (そうでなければ, 常に root 権限で /var/www/html/ 以下にファイルを置かねばならない).

userdir モジュールを用いるには, a2enmod コマンドを実行し, apache2 を再起動すれば良い.

$ sudo -s

# a2enmod userdir

# /etc/init.d/apache2 restart  (apache2 の再起動)

  [ ok ] Restarting apache2 (via systemctl): apache2.service.

# exit

$

Web ページを作成するためには, ホームディレクトリ以下に public_html という名前のディレクトリを作成し, その中にファイルを置けば良い.

$ mkdir ~/public_html

$ cd ~/public_html

$ vi helloworld.htm

  <html>
    <body>
      Hello World!
    </body>
  </html>

作成が終わったら, 自分の仮想マシンに接続し, helloworld.htm を表示してみよ. ブラウザを起動して, URL として "http://10.176.0.XXX/~USER/" を入力せよ (XXX は自分のIP, USER は自分のユーザ名に置き換えること)

PHP の設定

PHP をインストール後に mods-enabled ディレクトリ以下を確認すると, PHP を使うためのファイルが存在することがわかる. このことは /var/www/html 以下で PHP を使える状態にあることを意味する.

$ sudo -s

# cd /etc/apache2/

# ls mods-enabled/*php*

  mods-enabled/php7.4.conf  mods-enabled/php7.4.load

userdir (~/public_html/) において php を使うためには, mods-enabled/php7.4.conf の設定を変更する必要がある. コメントに書かれているように, php_admin_flag engine を On にする必要がある.

# vi mods-enabled/php7.4.conf

  ...(前略)...

  # Running PHP scripts in user directories is disabled by default
  # 
  # To re-enable PHP in user directories comment the following lines
  # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
  # prevents .htaccess files from disabling it.
  <IfModule mod_userdir.c>
      <Directory /home/*/public_html>
  #        php_admin_flag engine Off   (コメントアウトする)
           php_admin_flag engine On
      </Directory>
  </IfModule>

設定を変更したら, apache2 を再起動する.

# /etc/init.d/apache2 restart

  [ ok ] Restarting apache2 (via systemctl): apache2.service.

# exit 

$

動作確認

以下のような php ファイルを Web サーバのドキュメントルートに置いてみて動作確認を行う. なお, <? の前や, ?> の前に「空白文字を入れない」こと!

$ cd ~/public_html

$ vi hello.php

  <?php
  echo date("Y-m-d H:i:s");
  ?>

作成が終わったら, 自分の PC のブラウザで http://10.176.0.XXX/~hogehoge/ (IP は自分のものに変え, hogehoge は自分のユーザ名に置き換えること) に アクセスし, hello.php を表示してみよ. さらに,再読み込みボタンを押すと表示が変化すること,を確かめて下さい.

2022-09-18 20:24:52

課題

  • ~/public_html 以下に HTML, PHP を使ったファイルを作成し, それをブラウザで表示せよ. URL (IP アドレス(自分のユーザ名がわかるように)) とページの内容がわかるようにスナップショットをとり, それを wbt にアップロード登録せよ.
    • 3 年生の実験で Web ページを作ったはずである.それを思い出して,楽しい Web ページを作ってみて欲しい.
    • 4 年前期に PHP を習いましたよね?