Raspberry Piで立てたサーバにWebサーバ(Apache)をインストールして、PHPとMySQL、Perl、Ruby等が動作するように最低限の設定を行ってみる。
HTTPポートの開放
下記コマンドで既に作成したポート開放スクリプトにHTTP(80番ポート)のポート番号を追加する。
sudo sed -i -e 's/for port in \([0-9 ]*\); do/for port in \1 80; do/' /usr/local/bin/mydnsupdate.sh
CGIを使う
下記コマンドでApacheのCGIモジュールを有効化して、Apacheを再起動する。
sudo a2enmod cgid sudo systemctl restart apache2
以後、/usr/lib/cgi-bin/が/cgi-bin/として見えるようになり、/cgi-bin/ディレクトリ内のすべてのファイルがCGIとして実行可能になる(もちろん、CGIファイルには実行属性を付加しておく必要がある)。
下記コマンドで/usr/lib/cgi-bin/perltest.cgiが作成され、http://example.mydns.jp/cgi-bin/perltest.cgiで実行できることが確認できる。
sudo su -c 'echo "#!/usr/bin/perl" > /usr/lib/cgi-bin/perltest.cgi' sudo su -c 'echo '\''print "Content-type:text/plain\n\n";'\'' >> /usr/lib/cgi-bin/perltest.cgi' sudo su -c 'echo '\''print "Perl CGI test.";'\'' >> /usr/lib/cgi-bin/perltest.cgi' sudo chmod +x /usr/lib/cgi-bin/perltest.cgi
cgi-binディレクトリ以外でCGIを使う
下記コマンドでserve-cgi-binの設定ファイルを無効にして、securityの設定ファイルにWebサーバのルートディレクトリでのCGI実行を許可する設定を追加して、Apacheを再起動する。
sudo a2disconf serve-cgi-bin sudo sh -c 'echo "<Directory /var/www/html>" >> /etc/apache2/conf-available/security.conf' sudo sh -c 'echo " Options +ExecCGI" >> /etc/apache2/conf-available/security.conf' sudo sh -c 'echo " AddHandler cgi-script .cgi" >> /etc/apache2/conf-available/security.conf' sudo sh -c 'echo "</Directory>" >> /etc/apache2/conf-available/security.conf' sudo systemctl reload apache2
以後、/usr/lib/cgi-bin/は/cgi-bin/として見えなくなり、ディレクトリ内のファイルをCGIとして実行することは出来なくなるが、/var/www/html/ディレクトリ内で拡張子が.cgiのファイルをCGIとして実行することが出来るようになる。
.htaccessを使う
下記コマンドでsecurityの設定ファイルに.htaccessを許可する設定を追加して、Apacheを再起動する。(前提として、cgi-binディレクトリ以外でCGIを使う設定を行なっている必要がある。)
sudo sed -i -e '/<Directory \/var\/www\/html>/a\ AllowOverride All' /etc/apache2/conf-available/security.conf sudo systemctl reload apache2
ユーザディレクトリを使う
下記コマンドでuserdirモジュールを有効化して、Apacheを再起動する。
sudo a2enmod userdir sudo systemctl restart apache2
以後、/home/newuser/public_html/が/~newuser/として見えるようになる。
ユーザディレクトリでCGIを使う
下記コマンドでuserdirの設定ファイルにユーザディレクトリでのCGI実行を許可する設定を追加、書き換えて、Apacheを再起動する。
sudo sed -i -e '/<\/Directory>/i\\t\tAddHandler cgi-script .cgi' /etc/apache2/mods-available/userdir.conf sudo sed -i -e '/Options /s/IncludesNoExec/Includes ExecCGI/' /etc/apache2/mods-available/userdir.conf sudo systemctl reload apache2
ユーザディレクトリで.htaccessを使う
下記コマンドでuserdirの設定ファイルを.htaccessを許可する設定に書き換えて、Apacheを再起動する。
sudo sed -i -e 's/AllowOverride .*/AllowOverride All/' /etc/apache2/mods-available/userdir.conf sudo systemctl reload apache2
PHPのインストール
下記コマンドでPHPとApache用PHPモジュールをインストールする。
sudo apt-get install -y php libapache2-mod-php
下記コマンドで/var/www/html/phpinfo.phpが作成され、http://example.mydns.jp/phpinfo.phpで実行できることが確認できる。
sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php'
ユーザディレクトリでPHPを使う
下記コマンドでphp7.0の設定ファイルのユーザディレクトリでのPHP実行不可設定をコメント化して、Apacheを再起動する。
sudo sed -i -e '/<IfModule mod_userdir\.c>/,/<\/IfModule>/s/^/#/' /etc/apache2/mods-available/php7.0.conf sudo systemctl reload apache2
MySQLのインストール
下記コマンドでMySQLとPHP用MySQLモジュールをインストールし、MySQLのrootユーザーのパスワードを設定したら、PHP用MySQLモジュールを読み込ませるためにApacheを再起動する。
sudo apt-get -y install mysql-server php-mysql sudo mysqladmin -u root password 'sqlpass' history -c sudo systemctl restart apache2
WordPressのインストール
下記コマンドでWebサーバのルートディレクトリをリネーム、WordPressをダウンロードして展開、wordpressディレクトリをルートディレクトリとして設置後に所有者をWebサーバのユーザであるwww-dataに変更、MySQLにrootユーザーでログインし、WordPress用のデータベースを作成、WordPress用のユーザとパスワードを作成してデータベースの所有者に設定する。
sudo mv /var/www/html /var/www/html.bak wget http://wordpress.org/latest.tar.gz tar xzf latest.tar.gz sudo mv wordpress /var/www/html sudo chown -R www-data:www-data /var/www/html sudo mysql -u root -e "CREATE DATABASE wpdata;" sudo mysql -u root -e "GRANT ALL ON wpdata.* TO wpuser@localhost IDENTIFIED BY 'wppass';" history -c
- ※wpdata、wpuser、wppassの部分はMySQLのWordPress用の任意のデータベース名、ユーザ名、パスワードに置き換える。
- ※~/.bash_historyにパスワードが記載されてしまうので「history -c」でコマンド履歴を削除している。
- ※MySQLのユーザの削除は「DROP USER wpuser@localhost;」で、データベースの削除は「DROP DATABASE wordpress;」で行える。
- ※Webブラウザでhttp://example.mydns.jp/を開いて、日本語を選択→続ける→さあ、始めましょう!→データベース名にwordpress、ユーザー名にwpuser、パスワードにwppassを入力して、送信→インストール実行→サイトのタイトル、ユーザー名、パスワード、メールアドレスを入力して、WordPress をインストールで初回設定を行う。初回設定後、入力したメールアドレスにwordpress@example.mydns.jpから初回設定終了の旨のメールが届く。
- ※WordPressは初回設定したURL以外からアクセス出来ないので、URLを変更する場合は、ダッシュボード→設定→一般からWordPress アドレス (URL)とサイトアドレス (URL)を書き換えて、変更を保存(この後、エラー404が表示され、これまで使用していたURLからはアクセス出来なくなる)。
- ※WordPressのインポートで表示される最大サイズの2MBが小さい場合は、/etc/php/7.0/apache2/php.ini、/etc/php/7.0/cli/php.iniの「upload_max_filesize = 2M」を書き換えて、Apacheを再起動する。
tDiaryのインストール
下記コマンドでtDiary 5.0.8(基本セット)をダウンロードして展開し、tdiary-v5.0.8ディレクトリをユーザディレクトリのdiaryディレクトリとして設置、tDiary用ユーザー名とパスワードを作成、これに合わせて.htaccessを変更、tDiary用データディレクトリを作成してパーミッションを設定、これに合わせてtDiaryの設定ファイルを変更し、絵日記プラグインのimage.rbで使うimagesディレクトリを作成してパーミッションを設定する。
wget https://github.com/tdiary/tdiary-core/releases/download/v5.0.8/tdiary-v5.0.8.tar.gz tar zxf tdiary-v5.0.8.tar.gz cd tdiary-v5.0.8 mv dot.htaccess .htaccess mv tdiary.conf.beginner tdiary.conf mkdir images chmod 777 images chmod 777 data sed -i -e 's:/home/foo/.htpasswd:/etc/apache2/.htpasswd:' .htaccess sed -i -e 's/foo/tduser/' .htaccess cd sudo htpasswd -bc /etc/apache2/.htpasswd tduser tdpass history -c sudo mv tdiary-v5.0.8 /var/www/html/diary sudo chown -R www-data:www-data /var/www/html/diary
PerlのJcodeモジュールのインストール
下記コマンドでPerlのJcodeモジュール(Jcode.pm)をインストールする。
sudo perl -MCPAN -e shell install Jcode exit
※「Would you like to configure as much as possible automatically? [yes] 」が出たら「yes」を入力する。(初回のみ)
「perl -MJcode -e ''」と入力して何も出なければJcodeモジュールはインストールされている。
簡易BBSのインストール
下記コマンドで簡易BBS タイプ1 バージョン 10.32をダウンロードし、nkfコマンドでUTF-8に変換して、内部の表示処理もシフトJISからUTF-8に書き換えて、jcode.plを使わずにJcode.pmを使うように処理を書き換えて、ユーザディレクトリの/cgi-bin/ディレクトリに設置する。
wget http://www.rescue.ne.jp/cgi/minibbs/10.32/minibbs.cgi nkf -w --overwrite minibbs.cgi sed -i -e 's/charset=Shift_JIS/charset=utf-8/' minibbs.cgi sed -i -e 's/require.*jcode\.pl.*/use Jcode;/' minibbs.cgi sed -i -e 's/&jcode'\''convert(\*\([^,]*\),'\''\([^'\'']*\)'\'')/$\1 = Jcode->new($\1)->\2/' minibbs.cgi sed -i -e 's:/usr/local/bin/perl:/usr/bin/perl:' minibbs.cgi sed -i -e '/^$reload = /s#http://[^/]*/minibbs\.cgi#http://example.mydns.jp/cgi-bin/minibbs.cgi#' minibbs.cgi sed -i -e '/^$modoru = /s#http://[^/]*/#http://example.mydns.jp/cgi-bin/#' minibbs.cgi sudo mkdir /var/www/html/cgi-bin sudo mkdir /var/www/html/cgi-bin/data sudo chmod 777 /var/www/html/cgi-bin/data touch /var/www/html/cgi-bin/data/data.cgi sudo mv minibbs.cgi /var/www/html/cgi-bin/ sudo chmod 755 /var/www/html/cgi-bin/minibbs.cgi sudo chown -R www-data:www-data /var/www/html/cgi-bin
- ※Webブラウザでhttp://example.mydns.jp/cgi-bin/minibbs.cgiを開いて、新管理キーを任意に決めて、2箇所に入力して、OKで初回のマスターキーの設定を行う。
- ※example.mydns.jpの部分はMyDNS.JPに設定したドメイン名に置き換える。
phpMyAdminのインストール
下記コマンドでphpMyAdminをインストールして、Apache用の設定ファイルのシンボリックリンクを作成して、設定を有効化した後、Apacheを再起動し、別のユーザからrootログインできるようにMySQLのrootユーザからunix_socketプラグインをはずす。
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y phpmyadmin cd /etc/apache2/conf-available/ sudo ln -s ../../phpmyadmin/apache.conf phpmyadmin.conf cd sudo a2enconf phpmyadmin sudo systemctl reload apache2 sudo mysql -u root mysql -e "update user set plugin='' where user='root';" sudo mysql -u root mysql -e "flush privileges;"
Webブラウザで「http://example.mydns.jp/phpmyadmin/」を開き、「ユーザ名」に「root」、「パスワード」にMySQLのrootユーザのパスワードを入力して「実行」。
Webサーバを任意のユーザで実行する
下記コマンドでsuEXECモジュールのインストールと有効化を行う。
sudo apt-get install -y apache2-suexec-custom sudo a2enmod suexec sudo systemctl restart apache2
- ※「sudo /usr/lib/apache2/suexec -V」で確認できるが、/var/www以下はwww-dataで、public_html/cgi-bin以下はその所有者のユーザで実行される状態になっている。
- ※CGIファイルおよびCGIファイルの置かれているディレクトリの所有者が実行ユーザでなければ、Internal Server Errorとなるので注意。
下記コマンドでpublic_html/cgi-binではなくpublic_html以下がその所有者のユーザで実行されるように書き換える。
sudo sed -i -e 's:public_html/cgi-bin:public_html:' /etc/apache2/suexec/www-data sudo systemctl restart apache2
下記コマンドで/var/www以下の実行ユーザをwww-dataではなく、任意のユーザに変更する。任意のユーザを作成してパスワードを設定し、そのユーザ名を設定して、Apacheを再起動する。
sudo useradd wwwuser cat < EOT | sudo passwd wwwuser wwwpass wwwpass EOT history -c sudo sed -i -e '/DocumentRoot \/var\/www\/html/a\\tSuexecUserGroup wwwuser wwwuser' /etc/apache2/sites-available/000-default.conf sudo systemctl restart apache2