ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

Debian10でPHP7+lighttpdによる実行環境準備

Debian GNU/Linux 10 (buster)でPHP7の実行環境を準備する。ついでにPerlやPythonのスクリプトもCGIで動くようにする。ここではroot権限を得るためにsuを使っているが、sudo -iとしても同じ。

$ su
# apt update;apt install lighttpd php php-cgi
(中略)
以下の追加パッケージがインストールされます:
  lighttpd-modules-ldap lighttpd-modules-mysql php-common php7.3 php7.3-cgi
  php7.3-cli php7.3-common php7.3-json php7.3-opcache php7.3-readline
  spawn-fcgi
(中略)
アップグレード: 0 個、新規インストール: 14 個、削除: 0 個、保留: 0 個。
4,366 kB のアーカイブを取得する必要があります。
この操作後に追加で 23.5 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
(省略)

PHP-FPM(FastCGI Process Manager)を利用する場合にはphp-cgiの代わりにphp-fpmをインストールする。

$ su
# apt update;apt install lighttpd php php-fpm
(省略)

lighttpdの状態を確認する。この画面から抜け出すにはqキーを押す。

# service lighttpd status
● lighttpd.service - Lighttpd Daemon
   Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled; vendor preset:
   Active: active (running) since Mon 2019-04-15 22:55:29 JST; 1min 21s ago
(省略)

Active: active (running)という文字があることを確認し、ウェブ・ブラウザを起動してhttp://localhostにアクセスする。Placeholder pageというhtmlページが表示されればうまくいっている。

設定ファイルのlighttpd.confなどは/etc/lighttpdディレクトリ内にある。HTMLファイルを置くためのホーム・ディレクトリ(document root)は初期設定では/var/www/htmlになっている。そこにindex.htmlファイルがあれば初期設定ではそれが自動的に表示される。これらは/etc/lighttpdディレクトリ内のlighttpd.confをはじめとする各種設定ファイルを編集することで変更することができる。

しかし、lighty-enable-modとlighty-disable-modというコマンドによって/etc/lighttpd/conf-availableディレクトリ内に用意されているいくつかの設定ファイルを/etc/lighttpd/conf-enabledディレクトリ内へシンボリック・リンクすることで設定の変更を容易に行う方法がある。

たとえば、各々のユーザー用にHTMLファイルを置くためのホーム・ディレクトリを容易したい場合には次のようにする。

$ mkdir $HOME/public_html
$ su
# lighty-enable-mod userdir
Enabling userdir: ok
Run "service lighttpd force-reload" to enable changes
# service lighttpd force-reload

一般ユーザーのホーム・ディレクトリ直下にpublic_htmlというディレクトリを作成し、ルート権限を得てlighty-enable-modコマンドでuserdirを引数に指定している。こうすることで/etc/lighttpd/conf-availableティレクトリ内にある10-userdir.confという設定ファイルが/etc/lighttpd/conf-enabledディレクトリ内へシンボリック・リンクされて設定が有効になる。設定の変更をlighttpdサーバに反映させるために最後にserviceコマンドを実行することを忘れずに。

作成したpublic_htmlディレクトリ直下にindex.htmlファイルを置き、ウェブ・ブラウザでhttp://localhost/~username/にアクセスすればそのページが開く仕掛け。URLのusernameのところには具体的な各々のユーザー名を記述する必要がある。

この設定を無効にするには次のようにlighty-disable-modコマンドを使う。

# lighty-disable-mod userdir
Disabling userdir
Run "service lighttpd force-reload" to enable changes
# service lighttpd force-reload

これによって/etc/lighttpd/conf-enabledディレクトリ内にあったシンボリック・リンクが削除される。そしてserviceコマンドの実行によって設定の変更が反映される。

ちなみに、Placeholder pageというhtmlファイルの実体は/var/www/html/index.lighttpd.htmlであり、このファイル名の指定なしに表示させるには/etc/lighttpd/conf-enabledディレクトリ内へ/etc/lighttpd/conf-available/99-unconfigured.confがシンボリック・リンクされていなければならない。なぜならこの設定ファイルにindex-file.namesとして"index.lighttpd.html"が指定されているから。

lighttpdサーバの停止や起動など

lighttpdサーバそれ自体の操作には、serviceコマンド、systemctlコマンド、/etc/init.dを使う方法がある。いずれもルート権限が必要になる。serviceコマンドを使う場合は次のようになる。上から状態表示、設定の読み込み、停止、起動、再起動。

# service lighttpd status
# service lighttpd reload
# service lighttpd stop
# service lighttpd start
# service lighttpd restart

statusから抜け出すにはキーボードのqを押す。

systemctlコマンドを使った場合は次のようになる。上から状態表示、設定の読み込み、停止、起動、再起動。

# systemctl status lighttpd
# systemctl reload lighttpd
# systemctl stop lighttpd
# systemctl start lighttpd
# systemctl restart lighttpd

/etc/init.dを使った場合は次のようになる。上から状態表示、設定の読み込み、停止、起動、再起動。

# /etc/init.d/lighttpd status
# /etc/init.d/lighttpd reload
# /etc/init.d/lighttpd stop
# /etc/init.d/lighttpd start
# /etc/init.d/lighttpd restart

Debian GNU/Linuxの起動時にlighttpdサーバが自動的に起動しないようにするにはsystemctlコマンドを使って次のようにする。

# systemctl disable lighttpd
Synchronizing state of lighttpd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable lighttpd

こうするとlighttpdサーバはLinuxが起動してもActive: inactive (dead)の状態になるのでユーザーが手動でstartさせなくてはならない。

# service lighttpd start

disableの代わりにenableを指定すると、Linuxの起動時にlighttpdサーバが自動的に起動されるようになる。

# systemctl enable lighttpd
Synchronizing state of lighttpd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable lighttpd
Created symlink /etc/systemd/system/multi-user.target.wants/lighttpd.service → /lib/systemd/system/lighttpd.service.

PHPの実行環境を有効にする

いよいよ本題。PHPスクリプトの実行環境を有効にするにはやはりlighty-enable-modを使う。

# lighty-enable-mod fastcgi-php
Met dependency: fastcgi
Enabling fastcgi-php: ok
Enabling fastcgi: ok
Run "service lighttpd force-reload" to enable changes
# service lighttpd force-reload

fastcgi-phpを有効にすればfastcgiも一緒に有効になるはず。

そして、index.phpをホーム・ディレクトリ(/var/www/htmlか/home/username/public_html)直下に作成する。その内容は例えば次のようにする。

<?php
phpinfo();
?>

こうしておいてウェブ・ブラウザでhttp://localhost/またはhttp://localhost/~username/(usernameは各々の一般ユーザー名)を開く。うまくいけばPHPのバージョン情報などが表示されるはず。

404 Not Foundと表示された場合には、指定された対象が見つからないことを意味している。指定したURLが間違っていないか、指定したURLの対象が存在するかどうかを確認したほうがいい。403 Forbiddenと表示された場合には、指定されたファイルやディレクトリの読み込みが禁じられていることを示している。読み込みの権限(r)が与えられているかを確認したほうがいい。500 Internal Server Errorと表示された場合には、指定されたcgiスクリプトの実行権限(x)が与えられていないか、スクリプトの実行でエラーが生じている可能性がある。いずれのエラーメッセージもlighttpdサーバがactiveの状態のときに表示される。

PHPスクリプトの実行環境を無効にするにはlighty-disable-modを使う。

# lighty-disable-mod fastcgi
Disabling fastcgi
Reverse dependency met: Disabling fastcgi-php too
Disabling fastcgi-php
Run "service lighttpd force-reload" to enable changes
# service lighttpd force-reload

fastcgiを無効にすればfastcgi-phpも一緒に無効になるはず。serviceコマンドで設定の変更を反映させることを忘れずに。ちなみに、force-reloadはlighttpdサーバがactiveの状態でなければ働かないのでrestartを使う手もある。

# service lighttpd restart

Perlスクリプトを実行可能にする

lighty-enable-modコマンドによって/etc/lighttpd/conf-available/10-cgi.confを/etc/lighttpd/conf-enabledディレクトリ内へシンボリック・リンクすればいい。

# lighty-enable-mod cgi
Enabling cgi: ok
Run "service lighttpd force-reload" to enable changes
# service lighttpd restart

/usr/lib/cgi-binディレクトリ内に例えば次のPerlスクリプトを作成する。ここではenv.plというファイル名で保存した。

#!/usr/bin/perl
print "Content-type: text/html;charset=UTF-8\n\n";
print "<html><head><title>CGI環境変数一覧</title></head><body>";
print "<table><caption>CGI環境変数一覧</caption>";
# ハッシュのキーを取り出しソートして配列変数に代入
@envs = sort(keys(%ENV));
# 配列の数だけ処理を繰り返す
foreach $env_name(@envs){
  # 環境変数を取得する
  $value = $ENV{$env_name};
  # 環境変数を表示する
  print "<tr><th>$env_name</th><td>$value</td></tr>\n";
}
print "</table></body></html>";
exit;

そしてこのスクリプトのファイルに実行権限を与える。これを怠ると500 Internal Server Errorというエラーメッセージが表示されてしまう。

# chmod o+x env.pl

ウェブ・ブラウザでhttp://localhost/cgi-bin/env.plを開き、環境変数一覧が表示されたらCGIが正しく機能している。

Pythonスクリプトも試す

Perlスクリプトと同様にPythonスクリプトも動くはず。

#!/usr/bin/python
print ("Content-type:text/html\r\n\r\n")
print ('<html><head><title>Hello Python</title></head><body>')
print ('<h2>Hello Python!</h2>')
print ('</body></html>')

これをhello.pyというファイル名で/usr/lib/cgi-binディレクトリ内に保存する。そしてこのファイルに実行権限を与える。

# chmod o+x hello.py

こうしておいてからウェブ・ブラウザでhttp://localhost/cgi-bin/hello.pyを開く。Hello Python!と表示されればうまくいった。

コメント

このブログの人気の投稿

Visual Studio 2019にはC++のためのフォームデザイナーがない件

10の補数と9の補数と2の補数と1の補数

LATEXで数式:指数と順列などで使う添数・添字