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!と表示されればうまくいった。
コメント
コメントを投稿