「FrontPage – PukiWiki-official」を使っていましたが、PHP5.4では動かないようなので、移行について検討しています。PukiWiki Plus!が「miko2u/pukiwiki-plus-i18n · GitHub」で公開されているので、これを使うという方法がありますが、こちらもあまり活発に開発されているわけでもないというのが気になります。ということで、もう一つの候補であった「FrontPage – PukiWiki Advance」を使ってみることにしました。
http://example.jp/のように公開する場合と、http://example.jp/pukiwiki/sample/のように公開する場合とがありそうなので、両方試してみます。まずはUbuntu 12.04 Desktopへ入れてみました。apache2とphpはインストール済みだとします。また、FrontPage – PukiWiki Advanceのダウンロードから、PukiWiki Adv. 1.0.3.tar.xzをダウンロードして、pukiwiki_adv.1.0.3.tar.xzという名前へ変更してあるとします。
準備
ディレクトリの用意とアーカイブファイルの展開が必要です。
$ sudo mkdir /var/www_pukiwiki $ sudo mkdir /var/www_pukiwiki_sample $ sudo tar xf ~/Downloads/pukiwiki_adv.1.0.3.tar.xz -C /var/www_pukiwiki/ $ sudo tar xf ~/Downloads/pukiwiki_adv.1.0.3.tar.xz -C /var/www_pukiwiki_sample/
権限、所有者の調整。
$ sudo chown -R www-data:www-data /var/www_pukiwiki/ $ sudo chown -R www-data:www-data /var/www_pukiwiki_sample/ $ sudo su - # for f in `find /var/www_pukiwiki/ -name ".htaccess" -print`; do chmod 644 $f; done # for f in `find /var/www_pukiwiki_sample/ -name ".htaccess" -print`; do chmod 644 $f; done
環境によっては.htaccessは変更しなくても良さそうです。いちおう644か604にするようにドキュメントのどこかに書いてあったのでしています。
mecabのインストール
mecabのインストール。手元ではphp5-gdもなかったので追加インストール。(追記:mecabはインストールすると逆にはまるかもしれないのでインストールをしなくてもいいかもしれません。どういうところで必要なのかがよくわかっていませんが、なくてもPukiWiki Advanceは動作するようです)
$ sudo apt-get install php5-gd $ sudo apt-get install mecab mecab-ipadic-utf8 $ sudo apt-get install libmecab-dev libmecab1
「PHP で Mecab を使って日本語形態素解析の結果を簡単に取得するまでの設定まとめ | ウェブル」(http://weble.org/2011/09/26/php-mecab)を参考にして、下記を実行
$ sudo apt-get install php-pear $ sudo pear channel-discover pecl.opendogs.org $ sudo pear install opendogs/mecab-0.5.0
mecabをインストールしたら、指示にしたがって php.ini へ mecab.so の指定を追加するが、Ubuntuでは、/etc/php5/apache2/conf.d/mecab.ini を作成して次の内容にしておけば良い。
extension=mecab.so
Apache2の再起動は必要。次でするので、ここではやっていません。
Apacheモジュールの有効化
headerとrewriteのモジュールが必要なので、有効化します。
$ sudo a2enmod headers $ sudo a2enmod rewrite $ sudo service apache2 restart
Apache2を再起動してエラーとならないことを確認します。
webroot/.htaccessの変更
webroot/.htaccess は変更が必要です。Limit POSTではlocalhostを指定しました。他にも更新を制限したい場合は追加してください。また、RewriteRuleも不要におもえるものをコメントにして変更しました。
#略 <Limit POST> order deny,allow deny from all allow from .jp allow from localhost </limit> #略 <IfModule mod_rewrite.c> # AllowEncodedSlashes On Options +FollowSymlinks RewriteEngine On # RewriteCond %{HTTP_USER_AGENT} "^Mozilla/4\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1; SV1\)" [NC] # RewriteRule ^.*$ – [F] # RewriteCond %{REQUEST_FILENAME} -f [OR] # RewriteCond %{REQUEST_FILENAME} -d # RewriteRule ^.* - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?$1 [L,QSA] </IfModule> #略
他は変更なし。
http://example.jp:8081/で公開する場合の設定
ポートを追加してバーチャルホストを用意した方が問題が発生したときに確認が楽なので、http://example.jp:8081/ でアクセスできるようにします。/etc/apache2/ports.conf の最後に下記を追加。
NameVirtualHost *:8081 Listen 8081
下記の内容で /etc/apache2/sites-available/pukiwiki を作成。
<VirtualHost *:8081> DocumentRoot "/var/www_pukiwiki/webroot" DirectoryIndex index.html index.php <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory "/var/www_pukiwiki/webroot/"> Options Indexes FollowSymLinks AllowOverride All Order Deny,Allow Allow from All </Directory> </VirtualHost>
先ほど展開したPukiWiki Advanceは下記のようなディレクトリ構成になっているはず。
/var/www_pukiwiki ├── .htaccess ├── COPYING.txt ├── README.txt ├── doc/ ├── tools/ ├── webroot/ ├── wiki-common/ └── wiki-data/
用意ができたら、pukiwikiのサイトを有効にして、Webブラウザからhttp://localhost:8081/へアクセス。
$ sudo a2ensite pukiwiki $ sudo service apache2 restart
動作すればOK。画像が表示されていない場合は設定に問題があります。
パスワードの設定等
動作したら、パスワードの設定等をします。パスワード用文字列の取得はhttp://localhost/pukiwiki/sample/?cmd=md5で可能です。入手したら/var/www_pukiwiki/wiki-common/auth.ini.phpのパスワードを書き換えます。
$adminpass = '{x-php-md5}1a1dc91c907325c69271ddf0c944bc72'; // MD5('pass')
後は、管理設定(auth.ini.phpの書き換え)、サイト名の書き換え、index.phpのdefine(‘DEBUG’,true);をコメントアウトなどをします。
問題解決方法
うまく動作しない場合は、まずはApache2のログレベルをあげて、/var/log/apache2/error.log に出るエラーを確認。/etc/apache2/apache2.confのLogLevelをdebugにする。
LogLevel debug
よくわからないことが起きた場合は、index.phpを独自に用意して、.htaccessが動作しているか確認をすると良い。/var/www_pukiwiki//.htaccessと/var/www_pukiwiki/webroot/.htaccessはPukiWiki Advanceの同じものを使い、下記のようなディレクトリ構成とします。Apacheの設定もそのまま使います。
/var/www_pukiwiki/ ├── .htaccess └── webroot ├── .htaccess └── index.php
PHPプログラムは下記のようにリクエストを単純に表示するだけのものです。
<?php var_dump($_REQUEST);
正しい動作をしていると、http://localhost:8081/ へアクセスしたときに、Webブラウザには下記のように表示されるはず。
array(0) { }
正しい動作をしていると、http://localhost:8081/FrontPage へアクセスしたときに、Webブラウザには下記のように表示されるはず。
array(1) { ["FrontPage"]=> string(0) "" }
こうやって、Apache2の設定の問題なのか、PHP側の問題なのかを切り分けます。
http://example.jp/pukiwiki/sample/で公開する場合の設定
http://example.jp/pukiwiki/sample/のような設置方法についても確認します。
まずは/etc/apache2/sites-enabled/000-defaultへ下記を追加します。VirtualHostディレクティブ内へ記載します。
Alias /pukiwiki/sample /var/www_pukiwiki_sample/webroot <Directory "/var/www_pukiwiki_sample/webroot/"> AllowOverride All Allow from All </Directory>
RewriteBaseを追加します。/var/www_pukiwiki_sample/.htaccess を次のようにします。
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase /pukiwiki/sample RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule>
/var/www_pukiwiki_sample/webroot/.htaccess も書き換えます。http://example.jpの例に対してRewriteBaseを追加しただけです。
#略 <Limit POST> order deny,allow deny from all allow from .jp allow from localhost </limit> #略 <IfModule mod_rewrite.c> # AllowEncodedSlashes On Options +FollowSymlinks RewriteEngine On RewriteBase /pukiwiki/sample # RewriteCond %{HTTP_USER_AGENT} "^Mozilla/4\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1; SV1\)" [NC] # RewriteRule ^.*$ – [F] # RewriteCond %{REQUEST_FILENAME} -f [OR] # RewriteCond %{REQUEST_FILENAME} -d # RewriteRule ^.* - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?$1 [L,QSA] </IfModule> #略
/var/www_pukiwiki/wiki-data/pukiwiki.ini.phpのanonymousを書き換えます。
$modifier = 'anonymous';
/var/www_pukiwiki_sample/webroot/index.php のROOT_URIを変更します。
define('ROOT_URI', '/pukiwiki/sample/');
ここまでで動作するはずなので、一度 http://localhost/pukiwiki/sample/ を開いてみます。ここで動作しない場合はどこかで設定を間違えています。
メニューの一覧をクリックするとmecabでエラーがでる場合は、/var/www_pukiwiki_sample/wiki-common/lib/funcplus.php を修正します。$mecab->keywordを$mecab->splitにします。2箇所あります。
$mecab = new MeCab_Tagger(); return $mecab->split($input); //return $mecab->keyword($input);
後は、http://example.jpで動作させたときと同様にしてパスワードの設定などをします。