Edited at

データベース不要のWikiクローン「DokuWiki」の導入


はじめに

データベース不要で手軽なWikiを探していたところ見つけたのが「DokuWiki(ドクウィキ)」です。

使い易く汎用性の高いオープンソースのウィキソフトウェアであり、プラグインによる柔軟な拡張機能をサポートしています。

会社にはRedmineがあるのですがwikiとしてはあまり活用されてなく、見栄えが「DokuWiki」の方がいいので書くモチベーションが上がります。

現在、運用チームで仕事をしているのですが、30程度のシステムやサーバー管理など蓄積したナレッジベースをまとめたいと思ったしだいです。元々開発チームでシステム改修をしていたこともあり、システム的なところはソースコードから把握できるので運用チーム内で情報共有をしていきます。

下記サイトがDokuwikiサイトのイメージとして参考になるかと思います。


環境

Windows Server 2008R2

Apache Ver 2.4.20

PHP Ver 5.6.19 → PHP Ver 7.1(2017/03/01)

下記記事と同じサーバーとなります。

簡易グループウェア スケジュールWeb「LiteScl.oda」の導入

私個人では、さくらのレンタルサーバ ライト(Linux)に構築しています。

八寿のナレッジベース

他にもMicroApacheとDokuWikiをセットにしてUSBスティックから直接DokuWikiを実行する「DokuWiki on a Stick」もあり、関連して、dropboxでローカル環境のwikiを起動させる方法「DokuWiki on a Stick in DropBox」があります。


レンタルサーバのPHP7.1対応

2017/02/19にリリースされたDokuWikiの最新バージョン「Frusterick Manners」では、PHP7.1のサポートとjQuery3に対応しました。

私個人のさくらのレンタルサーバ ライトにて「PHP7.1」に変更して導入しました。

greensteelテンプレートを使用していたのですが、IndexMenuでCDATAが表示されるなど問題があり、対応としてテンプレートを変更しました。テンプレートやプラグインによっては不具合が出るかも知れませんね。


導入方法


Apache2.4の導入

D:\Apache24に64bit版を導入した

参照: Apacheのダウンロードとインストール - Windows環境

※ 参照記事は「Visual Studio 2012 の Visual C++ 再頒布可能パッケージ」であるが、現在は「Visual Studio 2015 の Visual C++ 再頒布可能パッケージ」をダウンロードしてください。そうしないとエラー「VCRUNTIME140.dllがない」が発生します。


httpd.conf の編集

Dドライブ直下にApache24フォルダおよびPHP5フォルダとして導入したため、関連部分は編集している。

また、ポートは80はIISで使用しているため、1080としている。


httpd.conf

ServerRoot "D:/Apache24"

#Listen 12.34.56.78:80
Listen 1080

LoadModule php5_module d:/php5/php5apache2_4.dll

DocumentRoot "D:/Apache24/htdocs"
<Directory "D:/Apache24/htdocs">
# None -> All  
AllowOverride All

Order allow,deny
Allow from all

Require all granted
</Directory>

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

<IfModule alias_module>
ScriptAlias /cgi-bin/ "D:/Apache24/cgi-bin/"

<Directory "D:/Apache24/cgi-bin">

<IfModule mime_module>
AddType application/x-httpd-php .php

PHPIniDir "D:\php5"


※httpd.confを編集したら、Apache2.4サービスを再起動しないと設定が反映されない。

もし、Apache2.4のサービスが開始できずにイベントログに「Apache2.4 サービスは、サービス固有エラー ファンクションが間違っています。」のログがある場合

対応方法 「httpd.exe -t」でエラー箇所が分かります。

D:\Apache24\bin>httpd.exe -t

httpd.exe: Syntax error on line 189 of D:/Apache24/conf/httpd.conf: Cannot load
modules/mod_python.so


PHP5.6の導入

D:\PHP5に導入した。

参照:PHPのダウンロードとインストール - Windows環境

環境変数 Pathに「;D:\php5」を追記

「php.ini-development」をコピーし、「php.ini」に名前変更した。


php.ini

extension_dir = "D:\php5\ext"

;コメントを外す(mysqlはDokuwikiでは使用しないのでコメントのままでもいい)
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
;なければ追加する
extension=php_openssl.dll

error_reporting = E_ALL & ~E_NOTICE

;コメントを外して変更
date.timezone = Asia/Tokyo

[mbstring]
;コメントを外す
mbstring.language = Japanese

;コメントを外して変更
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
mbstring.func_overload = 0


※Apatchのhttpd.confに「PHPIniDir "D:\php5"」を追加して、D:\php5\php.iniを読まれるように設定している。


PHP7.1に変更

PHP7はPHP5とくらべて実行処理速度が大幅に改善されたとのことで、バージョンアップしてみました。


設定変更点

環境変数 Pathを「;D:\php5」から「;D:\php7」に変更


httpd.conf

LoadModule php7_module d:/php7/php7apache2_4.dll

PHPIniDir "D:\php7"



php.ini

extension_dir = "D:\php7\ext"

;コメントを付けるか削除する
;extension=php_mysql.dll


プラグインの修正

更新が止まっているプラグイン(slidesharewp)等で警告が出ました。

Doku_HandlerとDoku_Rendererの後の「&」が不要となります。


プラグイン

public function handle($match, $state, $pos, Doku_Handler &$handler){

                 ↓
public function handle($match, $state, $pos, Doku_Handler $handler){

public function render($mode, Doku_Renderer &$renderer, $data) {
         
public function render($mode, Doku_Renderer $renderer, $data) {



DokuWikiの導入

DokuWikiのダウンロードサイトから、「Start Download」ボタンをクリックします。

「dokuwiki-xxxxxxxxxxxxxxxxxxx.tgz」がダウンロードされますので、解凍ソフトのLhaplus等を使って解凍します。

Webサーバー(D:\Apache24\htdocsフォルダ)内に「dokuwiki」フォルダを配置します。


初期設定

該当のサイトの初期設定ページ(install.php)にWEBアクセスしたうえでGUIで詳細設定を行います。

http://localhost:1080/install.php

デフォルトでは英語表記になっていますが、画面右上のセレクトBOXで「ja」を選択することによって日本語表記に切り替わります。


サイト管理情報の設定

ここからは下記サイトが図入りで説明が書かれているので、分からなくなったら参照してください。

参照:Dokuwikiサイトの構築

本サイトを運用していくにあたっての必要事項を入力します。


  • wiki名

  • スーパーユーザー(管理者用ID)

  • フルネーム   (上記の管理者用IDでログインし書き込んだ際に表示される名前)

  • メールアドレス

  • パスワード

  • 確認  (確認の為パスワードを再入力します)

  • ACL初期設定

  • 本サイトのコンテンツが属するライセンスを選択


アクセス制限

管理者メニューにある「アクセスコントロール管理」にて、アクセス制限を行います。

ログインしていないユーザーを含めて全員が「ALL」グループのメンバーになります。ユーザー以外を閲覧のみしたい場合、「読取」を選択してください。

「無し」にした場合、サイト設定の「アクセス管理を行う(ACL)」がチェックされていれば、ログイン画面が必ず表示されるようになります。


エラー対応

画面の右側に赤いAlertが表示されています。

これは本来WEBからアクセスできてはいけないファイル類が外部に

見える状態になってしまっている事が原因です。

D:\Apache24\httpd.confに下記設定を追記します。


httpd.conf

<Directory "D:/Apache24/htdocs/dokuwiki">

AllowOverride All
</Directory>

「PHP機能がSSLをサポートしていない」旨の警告がでている場合には、php.iniに下記を追加します。git等にあるプラグインがインストール出来ないため。


php.ini

extension=php_openssl.dll


※設定変更を反映させるためにApacheを再起動します。


トップページ

dokuwikiをdokuwikiフォルダ以外で作成(例 wiki)した場合、.htaccessファイルの「RewriteBase」の設定を変更する必要があります。


.htaccess

## Not all installations will require the following line.  If you do,

## change "/dokuwiki" to the path to your dokuwiki directory relative
## to your document root.
RewriteBase /wiki


構築完了

初期設定用のinstall.phpファイルを削除します。


プラグインのインストール

管理者でログインし、管理者メニューの拡張機能管理をクリックします。

検索とインストールのタブをクリックして、拡張機能の検索でプラグインの名前で検索します。

今回、Windowsのエクスプローラ風のレイアウトでnamespaceとpageを階層表示してくれる「IndexMenu」をインストールしてみます。

なお、IndexMenu pluginには右クリックメニューによる新規ページを作成するための機能も付いています。

20090712003912.png

dokuwikiで、URL中のdoku.phpを消す方法

参照:DokuWikiのインストールメモ


サイトの設定

管理者でログインし、管理者メニューのサイト設定をクリックします。

「最初の見出しをページ名とする(userheading)」を「常に使用する」にすると、ページ内ではじめに記述した見出し部分がそのままページのタイトルになります。この機能を使用しなければ、URLのページ名がそのまま表示されます。

日本語ページ名は下記のようにUTF-8に変換されてファイル名として保存されますので、ページ名は半角英数字を使うほうが望ましい。ChromeやEdgeは問題ないがIE11では日本語ページ名の表示が怪しい。

「テスト」→ dokuwiki/data/pages/%E3%83%86%E3%82%B9%E3%83%88.txt\

参照:DokuWiki はじめに行う10の設定


デザインの変更


サイドバーの追加

sidebarというページ名を作るとそのページがサイドバーになります。

※今だと標準のテンプレートに最初から付いているかも知れません。

サイドバーをエクスプローラー風にするのに「IndexMenu プラグインの日本語化」を参考にオプションを付けるといいでしょう。

下記オプションの設定では、msort:メタ・タグ順、nsort:名前空間もソートする、tsort:タイトル順にソートする、skipfile:対象外とするページIDとなります。


sidebar

{{indexmenu>|js msort nsort tsort skipfile+/sidebar/}}


【追記 2016/08/20】

indexmenuの設定については表示に数分かかりますが、CMSレジュメ Indexmenuプラグインが詳しいです。

wikiやplaygroundを表示したくない場合

※下記例では、sidebarも非表示となるので必要なら除外してください。


sidebar

{{indexmenu>|js msort nsort tsort skipfile=/(dokuwiki|syntax|welcome|sidebar)$/ skipns=/^(wiki|playground)$/}}



ページ内にメニューの追加

ページ内にもサイドバー同様にIndexmenuを表示することができます。

赤枠のアイコンをクリックするとIndexmenuウィザードが表示されます。

「js」にチェックを付けるとエクスプローラー風に階層のオンオフが出来るようになります。

Indexmenu.png

Indexmenuの設定内容についてはCMSレジュメ Indexmenuプラグインを見て下さい。


自分専用のスタイルリストの設定

Dokuwiki標準テンプレート CSS」を参考に「見出し」の区切りを下図のように分かりやすくします。

my_style.cssを追加したのに反映されないと思ったら、管理画面の「サイト設定」の「設定管理」の「保存」ボタンで保存することで反映されました。

スタイル.png


プラグイン


自動アップグレード

2016/06/26にアップグレードがあったので、拡張機能の検索で「upgrade」を入力して、作者 Andreas Gohrさんのアップグレードプラグインをインストールしました。

管理者メニューの追加プラグインに「Wiki のアップグレード」が追加されますので、指示に従ってクリックしていけば、ダウンロードから展開してファイルを自動的に更新してくれます。

※自動アップグレードでは「lib\tpl\dokuwiki\style.ini」も更新されるため、自分専用のスタイルリストの設定で「my_style.css = screen」を追記した場合には再度追記する必要があります。


使い方

基本的には下記サイトのマニュアルを見て下さい。

DokuWiki マニュアル

DokuWikiの記法はツールバーもあって結構使いやすいですが、markdownタグで囲むことでMarkdown記法で記述することができます。

ソースコードの構文のハイライト表示も標準でついています。

構文のハイライトの例


ページの新規作成

「IndexMenu」のプラグインを使うとフォルダアイコンとファイルアイコンを右クリックするとメニューが表示されて、名前空間の「新規ページ」またはページの作成で「Custom page」を選択すると新規ページを作成できる。

Dokuwikiメニュー.png

ページ名の入力

Dokuwikiメニュー2.png


ページの削除

空のページ(空白1つ残さず消す)を保存することでページが削除されます。


ページの移動

ページの移動をするには、先に移動プラグインをインストールします。

管理者メニューの追加プラグインに「ページ・名前空間の移動」が追加されますので、それをクリックします。「ツリー型の移動管理」リンクをクリックするとドラッグ&ドロップでページ移動が出来る画面に移動します。

pagemove.png


画像のアップロード

Dokuwikiアップロード.png

画像をアップロードした際に「Faild」エラーが出ました。ログを見ると下記のエラーが出力されていました。

PHP Deprecated:  

Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version.
To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead.
in Unknown on line 0, referer

php.iniの「always_populate_raw_post_data」を有効にしなさいとのこと。

これは将来のバージョンでの PHP の挙動を事前に体験できる機能である。

有効にすると画像をアップロードできるようになりました。


外部サイトにある画像表示

外部サイトにある画像表示をするには管理画面の「サイト設定」にある「HTML埋め込み」のチェックをオンにしてください。

そうすれば、DokuWikiの記事内でhtmlタグで囲った中は通常のHTMLとして処理されますので、imgタグを使用して外部サイトの画像表示ができます。

<html>

<img src="(画像のURL)">
</html>

参照:DokuWiki はじめに行う10の設定


テーブル表示

セルの結合などは、DokuWikiテーブルの使い方のサイトが分かりやすいです。

標準ではテーブルの幅は指定できないので、テーブルの幅、セルの幅を指定できるようにするプラグイン(Table Width Plugin)をインストールするとより見やすくできます。

その他のテーブル用プラグイン:Dokuwikiプラグインでテーブル設定


文字色

文字に色を付けるだけなら、「color」プラグインがありますが普段使うのは数種類なので、それなら「WRAP」プラグインをお勧めします。

編集時のツールバーにWrapプラグインアイコンが追加されるので、覚えることなく使えます。ただ、アイコン基本的な書き方のみです。

wrap.png

参照:Dokuwikiプラグイン : WRAP


その他

動画の埋め込みはプラグインを使うより、外部サイトにある画像表示で説明したようにhtmlタグで囲って、iframeタグを使うと楽かも知れません。


FFFTPでファイル転送に失敗

さくらインターネット上からバックアップを取ろうとしてFFFTPを使用したが「ダウンロードできませんでした」と失敗する。フォルダごと数百~数千といった大量のファイルを転送は無理なようです。

対応としては、WinSCPという別のソフトを使用した。

参照:さくらインターネット+FFFTPでファイル転送に失敗する場合の対処


Google Analyticsの導入

QiitaにGoogle Analyticsを過去に導入していてアクセス数が見れているので、Dokuwikiでもアクセス数を知りたくなりました。

QiitaでGoogleアナリティクスを利用してページ別ビュー数等を見る方法

Google Analytics ID(トラッキングID)を先に取得しておく必要があります。


Googleアナリティクスの「トラッキングID」とは、トラッキングコードにおける「UA-000000-2」のような文字列のことです。

GoogleアナリティクスのトラッキングIDとは? 発行・設置・確認方法を解説!


下記サイトを参考に「Google Analytics Plugin」を追加しました。

https://dokuwiki.oreda.net/access/googleanalytics.html

最低でも1日経たないと解析結果表示されてきません。

どのページがアクセス数があるのか分かるのはいいですね。


Google アドセンスの導入

下記サイトを参考に「Google AdSense」で広告を表示するようにしました。

DokuWikiでGoogle AdSenseを使う

Google AdSenseの「サイトを追加」で下記エラーで先に進みませんでした。


URL には有効なトップレベル ドメインを指定してください。


どうもトップレベルドメインでないと駄目なようで、index.htmlでリダイレクトするようにしました。


index.html

<meta http-equiv="refresh" content="0; URL='/wiki'" />



.htaccess

RewriteEngine on

RewriteCond %{THE_REQUEST} ^.*/wiki

※WinSCPでは、「.htaccess」は隠しファイルで表示されないので、オプション>環境設定>パネルにある「隠しファイルを表示する」にチェックを付ける。

これでサイトを追加は完了して審査の結果待ち・・・

もともと記事数はそれなりにあったので審査は1日で合格の通知が来ました。

広告が表示されるようになって見た際に広告サイズが少し小さかったので、表示サイズを調整しました。


サイト全体幅とサイドバーの幅は、管理画面のテンプレートのスタイル設定でstyle.iniファイルを使用して設定できるが、デフォルトはそれぞれ75em、16emとなっている。emはフォントサイズが元となるので、それぞれピクセル(px)にすると、1050px、224pxのようだ。

DokuWikiデフォルトテンプレートのカスタマイズ



style.ini

__site_width__      = "90em"            ; @ini_site_width

__sidebar_width__ = "24em" ; @ini_sidebar_width

ようやく広告がヘッダーとフッターとサイドバーに表示されるようになりました。

八寿のナレッジベース


最後に

情報共有の大切さはみんな分かっているのですが、メールだけで済ましたり特定の人に頼ってしまったり、忙しさにかまけてそのままになってしまう。特にチーム内で異動がなく新しい人も入らず固定化してしまうと、そのままになる傾向があります。いずれは退社する人もでてくるし異動もでてきて新しい人が入ってきた際に、情報共有のサイトを作成しておけば新しい人も速く仕事を覚えて戦力になってくれるはずです。

Let's DokuWiki !!