DokuWiki
DokuWikiはオープンソースのWikiツールです。

  1. PHPで書かれている
  2. RDBMSを必要としない(ファイルのみで内容を管理する)
という特徴があります。 全く同じ性質を持つWikiツールには他にPukiWikiがありますが、それよりも新しく、 また国産で大半が日本国内利用のPukiWikiに対して、世界中で使用されているのがDokuWikiの特徴です。

インストール
DokuWikiはPHPで動くので、PHPが動くWebサーバで稼働することになります。
今日代表的なWebサーバはApache HTTPD Serverとnginxで、DokuWikiの多くの情報はApache向けに書かれていますが、 ここではあえて nginx + PHP-FPMの環境で動かしてみます。
OSはRocky Linux 9.2(SELinux有効)、nginx 1.20.1、PHP 8.0.30です。

  1. 公式ダウンロードページに行き、
    • VersionはStableを選ぶ
    • Languagesはjaのみ残して他を外す
    • 右側のUpgrade Pluginを選択
    でStart Download ボタンを押すと「dokuwiki-***.tgz」というファイルがダウンロードできるので、 Webサーバに送信して、tar+gzipコマンドで展開します。
  2. 展開してできた dokuwikiディレクトリを、WebサーバのDocumentRootから参照できる場所に配置します。
    nginxの場合DocumentRootのデフォルトは /usr/share/nginx/html ですから、 ここでは展開したパスが /usr/share/nginx/html/dokuwiki となるようにしてみます。

    cd ~/work
    tar xozf dokuwiki*.tgz
    sudo mv -i dokuwiki /usr/share/nginx/html/.
    cd /usr/share/nginx/html/dokuwiki
    
    chmod -R 777 data
    chmod 777 lib/plugins/
    chmod 777 lib/tpl/
    # 上記で後日管理者画面のプラグイン管理でエラーが出る場合は以下も試してみよう
    # find /usr/share/nginx/html/dokuwiki/lib/plugins -type d -exec chmod 777 {} \;
    # find /usr/share/nginx/html/dokuwiki/lib/tpl     -type d -exec chmod 777 {} \;
    chmod 777 conf
    chmod 666 conf/*
    

    nginx + PHP-FPMの場合、PHP-FPMの起動ユーザーで記事が保存されるので、 そのユーザーで上記のディレクトリを読み書きできるようにパーミッションを調整します。
  3. dokuwikiディレクトリのサブディレクトリの内、data, bin, conf, inc, vendorの5つは、 Webブラウザから直打ちアクセスされるとファイル破壊などの攻撃材料になるため、 これらへのWebアクセスは禁止する必要があります。 Apacheの場合はこれらのサブディレクトリには.htaccessファイルが置かれていてデフォルトでアクセスが禁止されているのですが、 nginxの場合は自分で設定が必要です。
    具体的には、 /etc/nginx/default.d/php.conf を編集して以下を書き足します。

    location ~ ^/dokuwiki/(data|conf|bin|inc|vendor)/ {   # secure DokuWiki
        deny all;
    }
    

    変更を保存したら、

    systemctl restart php-fpm
    systemctl restart nginx
    

    で再起動します。両方再起動が必要です。
    なお、この設定をしないと、後述の管理者画面を開いたときに 「WARNING: It seems your data directory is not properly secured. Please read about Web Access Security in DokuWiki.」 という警告メッセージが表示されます。
  4. Linux系でもRHEL、RockyLinux、CentOSなどSELinuxを有効にしているWebサーバでは、 上記だけでは403(Forbidden / Access Denied)エラーになります。 以下のコマンドを実行して読み書きのアクセスを許可する必要があります。

    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/nginx/html/dokuwiki/conf(/.*)?"
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/nginx/html/dokuwiki/data(/.*)?"
    sudo restorecon -Rv /usr/share/nginx/html/dokuwiki/conf
    sudo restorecon -Rv /usr/share/nginx/html/dokuwiki/data
    # 以下は不要かも
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/nginx/html/dokuwiki/lib/plugins(/.*)?"
    sudo restorecon -Rv /usr/share/nginx/html/dokuwiki/lib/plugins
    

  5. http://{Webサーバ}/dokuwiki/install.php にブラウザでアクセスし、まず画面右上の「言語」をenからja(日本語)に変更します。
    ※ここで変更しそびれた場合、後で管理者画面⇒Configuration Settings(サイト設定)の「Interface Language」で変更できます。
  6. install.phpのフォームに入力します。この内容は後で管理者画面で変更できます。
    • Wiki Name
    • Enable ACL
    • Super User
    • Real Name
    • E-Mail
    • Password
    • Initial ACL Policy
    • Allow users to register themselves
    E-Mailも必須入力なので注意してください。 また後の管理者画面では、ここで入力するSuper User/Passwordでログインすることになります。
    入力を完了したら、install.php はサーバから削除しても構いません。
  7. 入力を完了すると「〜dokuwiki/doku.php?id=wiki:welcome」というURLのページが表示されます。 内容を確認し、改めてブラウザで http://{Webサーバ}/dokuwiki/ にアクセスすると、 今度は「〜dokuwiki/doku.php?id=start」というページになるので、鉛筆のアイコンで内容を編集します。 このページが、このWikiで初期表示されるホームページになります。
  8. 編集して保存したら、Webサーバの中を覗いてみます。Webサーバ上では、このページの内容は
    /usr/share/nginx/html/dokuwiki/data/pages/start.txt
    に保存されます。 このファイルの所有者はPHP-FPMプロセスの実行ユーザーになります。
    PHP-FPMの実行ユーザーは、/etc/php-fpm.d/www.conf 内で

    user  = nginx
    group = nginx
    

    の場所で変更できます。ただし既に一部のページを作ってしまった後に変更した場合、 data/cache、meta等のサブディレクトリのファイルの所有者をchownコマンドで全て変える必要があります。


主な操作方法、ページの記法
サイドバーをつける
いずれかのWikiページ内で[[sidebar]]とだけ編集して保存すると、sidebarという名前のページへのリンクが現れます。 それを編集して保存すれば、サイドバーが自動的に表示されます。
以後は、元のページから[[sidebar]]リンクを削除してしまっても、画面右上の「Sitemap」⇒sidebarを辿ることで編集できます。

外部リンク
ページにURLを書くだけで自動的にリンクされますが、リンクの文字列を変えたい場合、 [[https://dokuwiki.org|DokuWiki公式サイト]] のように入力すればOKです。
なお、リンクを別タブで開かせたい場合、管理者画面⇒サイト設定⇒リンクの中にある 「内部リンクのtarget属性」「外部リンクのtarget属性」などに値を入力すればOKです。 例えば「外部リンクのtarget属性」に「_blank」と入力すると、 Wiki内のリンクは同じタブで、外部リンクは別タブで開かせることができます。

ページの改名
「Move」というプラグインを入れればできますが、デフォルトではページの改名機能はないので、

  1. 新しい名前のページを作る
  2. 旧ページの内容を全てコピーペーストする
  3. 旧ページを削除する(=内容を空にして保存する)
  4. リンク元のページも全て手動で修正する
という手順が必要です。

見出しを挿入するショートカットキー
見出しは「====== 見出し ======」のような形式でキータイプすれば追加できますが、 Windows版のChromeでは、ALT+1〜ALT+4キーでそれぞれ見出し1〜4が自動的に挿入されます。とても便利。

コードブロック

言語別に文法を考慮したハイライトをする場合
<code bash>
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/nginx/html/dokuwiki/conf(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/nginx/html/dokuwiki/data(/.*)?"
sudo restorecon -Rv /usr/share/nginx/html/dokuwiki/conf
sudo restorecon -Rv /usr/share/nginx/html/dokuwiki/data
</code>

ハイライト不要な場合
<code>
location ~ ^/dokuwiki/(data|conf|bin|inc|vendor)/ {   # secure DokuWiki
    deny all;
}
</code>

言語別のハイライトは、bashの他にもjava,javascript,phpなどにも対応しています。
また <code> タグのほかに <file> というタグもあります。

テーブル
下のように、見出し行は^で、データ行は|で各列を区切って記述します。

^ 支店コード ^ 支店名称 ^ 地域コード ^ 従業員数 ^
| 00100 | 新宿 | 3 | 30 |
| 00200 | 横浜 | 3 | 40 |
| 00300 | 静岡 | 4 | 45 |
| 00400 | 名古屋 | 4 | 50 |

セルを右詰めにする場合は、右詰めにしたい値の「左側」に空白を2つ以上入れます。

^ 支店コード ^ 支店名称 ^ 地域コード ^ 従業員数 ^
| 00100 | 新宿 | 3 |  30 |
| 00200 | 横浜 | 3 |  40 |
| 00300 | 静岡 | 4 |  45 |
| 00400 | 名古屋 | 4 |  50 |

セルを結合する場合は、結合「される」側のセルの値を ::: とします。

^ 支店コード ^ 支店名称 ^ 地域コード ^ 従業員数 ^
| 00100 | 新宿 | 3 |  30 |
| 00200 | 横浜 | ::: |  40 |
| 00300 | 静岡 | 4 |  45 |
| 00400 | 名古屋 | ::: |  50 |

画像ファイルの添付(アップロード)
公式マニュアルはこちら
添付したいページを編集モードにし、額縁のような「Add Images and Other Files」のアイコンのボタンを押します。
するとMedia Filesウィンドウが開くので、PC上のファイルを選択します。ファイル名は変更できます。
アップロードできたら、一旦そのウィンドウを閉じてまた開くと選択可能になっているので選択して「Insert」 を押すと、元の編集中のページに次のようなタグが挿入されます。

{{:画像ファイル名.jpg?200|}}

これで「Save」すればOKです。

ユーザー管理とアクセス制御
詳細は公式マニュアルの ログインとユーザー登録、 アクセス制御リスト (ACL) の両ページで解説されています。
DokuWikiでは3つのユーザー管理方法が選べます。

  1. ユーザーを管理しない。誰でも匿名で編集できる。
  2. ユーザーを管理する。誰でも最初に編集したいとき自分で自分をユーザー登録できる。
  3. ユーザーを管理する。管理者が全てのユーザーを事前登録する。
管理者のユーザー登録/削除操作は管理者画面の「User Manager」で可能です。
アクセス制御はユーザーごと、ページごとに可能です。 管理者画面の「Access Control List Management」を開くと、 初期状態ではページ「*」、ユーザー「@ALL」に対して「Upload」の許可(Permission)がついていると思います。
権限は「閲覧」「編集」「作成」「アップロード」「削除」の種類があり、右の許可はそれよりも左の許可を全て含みます。
つまり「アップロード」の許可がある時点でそのページの閲覧、編集、作成も全て許可されている意味になります。

「@ALL」は「誰でも」という意味ですが、誰でもの中には匿名ユーザー(ログインしていないユーザー)も含む点に注意してください。 まとめると、初期状態では「ログインしていない人も含め誰でも、全ページ、閲覧・編集・新規作成・アップロード可能」 という意味になります。 編集履歴にIPアドレスが残って誰でも見れますから、企業内の限られた部門/メンバーの利用であればこれで問題ないと思います。
けれど、それではユーザー登録管理の意味がないのでは? …はい。初期設定の場合、編集履歴に名前が残る点以外、アクセス制御の面ではユーザーを登録管理する意味はありません。
これに対して、ユーザー登録時に「グループ」も設定できるので、@ALLの許可を「閲覧」だけに制限し、 もう1行、グループを限定した行を作って「アップロード」を許可すれば、所望の制御ができるようになります。


プラグインの導入準備
プラグインは管理者画面⇒拡張機能管理から簡単にインストールできますが、 企業プロキシを抜ける必要がある場合は、先に管理者画面⇒サイト設定内の 「プロキシ・サーバー名」や「プロキシ・ポート」を設定する必要があります。
なお「プロキシ・ユーザー名」と「プロキシ・パスワード」にはDokuWikiの管理者ユーザー/PWが初期設定されていることがあります。 これらの指定が不要であれば空欄に戻して保存すればOKです。


便利なプラグイン
Indexmenuプラグイン
[[sidebar]]ページのサイドバーは、手動編集で管理してもいいのですが、 新しいページを作るたびにサイドバーも手作業で書き足すのは結構手間が掛かります。 Indexmenuプラグインを使うと、追加したページへのリンクも自動的にツリー状に表示してくれるので、とても便利です。
使い方は簡単。表示したいページに {{indexmenu>:}} または {{indexmenu>.}} と書くだけで簡単に表示できます。
さらに、{{indexmenu>:|js navbar}} とすると、 "js" によってツリーが折りたたみ可能になります。また右クリックで「新規ページ」メニューが出て新規ページを作れてもっと便利です。 また "navbar" の指定により、現在表示しているページを含む名前空間が自動展開表示されるようになります。
なお jsを使うには、管理者画面⇒サイト設定の「機能フラグ」内にある「Defer_js」を無効にする必要があります。
また1点注意として「新規ページ」を押して出てくる「新規ページ名」欄では、名前空間を付ける必要はありません。 例えば「PC管理」名前空間の中に「ウィルス対策」というページ名を追加したい場合、 新規ページ名は「ウィルス対策」だけでOKです。 新規ページ名を「PC管理:ウィルス対策」とすると、「PC管理:PC管理:ウィルス対策」というページができてしまうので、注意してください。

Color(color syntax)プラグイン
文字の色を変えるには大きく次の二つの方法があります。

  • Colorプラグインを入れ、編集ページ中で対象文字列をカーソルで選択して、赤い「A」のアイコンで色を選ぶ。
  • htmlokプラグインを入れ、対象文字列に<span style="color:red">などのHTMLタグで色を付ける。
htmlokプラグインはJavaScriptを埋め込むこともできてセキュリティ上危険なページも作れるため、 単純に文字色を変えるだけの目的ならば、Colorプラグインで十分だと思います。

Misc. Topics Top

(first uploaded 2024/09/15 last updated 2024/09/16, URANO398)