見出し画像

自分用wikiを作った話

こんにちは!

今回は前回立てた自宅サーバーの利用法として、自分用にwikiを作ってみたことについて書いていきたいと思います。まだまだ有効利用できている段階ではないですが、工夫次第ではいろいろできそうなので、運用については今後考えていく予定です。

wikiとは

ご存知の方も多いかも知れませんが、wikiとは特定の管理者のみが編集するのではなく。参加者が自由に編集・閲覧できるタイプのウェブサイトです。最も有名なwikiはもちろんwikipediaですね。信頼性に多少難があるものの、特定の個人や団体がまとめるだけでは得られないような幅広い知を集積できているのが最大の特徴です。詳細はこちらをどうぞ。

今回作ったのはあくまでも個人的な利用のwikiなので、もちろん「みんなでつくる」というメリットは得られません。しかし、テキストベースで気軽に編集できたり、ごちゃごちゃした情報をザクッとまとめると言う意味ではなかなか便利なのではないかと思って作ってみたわけです。イメージ的にはクラウドメモアプリの「Evernote」とか「One note」に似ており、機能はそこまでたくさんあるわけではないものの、気軽にリンクを貼り付けたり軽量に使えるのが最大のメリットだと思います。One noteやEvernoteは軽量とは言い難いですからね。

今回、自分用のwikiを使おうと思った理由は主に、①メモをローカルで保存したかった、②プログラムで自動でメモを作れるような仕組みを実装できるようにしたかった、③EvernoteやOne noteに散らばったメモを集積する場所が欲しかった、あたりですね。EvernoteやOne noteは便利でよく使っているのですが、いざという時のためにローカルでもデータは持っておきたいですし、色々と凝ったことをしようとすると制限が出てきてしまうので、やはり自前のものがあるといいなぁと思ったわけです。

まあ、とは言っても半分くらいはWEBサーバーの"apache"を一回使ってみたかったというのが正直なところですけどねw せっかくサーバー用のPCを設定したので、その活用にもなりますし、勉強にもなるかなぁと思って今回のようなことをやってみたわけです。まだ有効活用しきれているかは微妙なところですが、そのあたりの運用面はこれからも引き続き考えていきたいところです。

ちなみに、今回のwikiをローカルのみにしたのは、セキュリティ対策をするのが面倒だというのと、色々と個人的な情報をおいておきたいというのが理由です。気になることはとりあえずここに放り込んでいくつもりなので、プライベートな内容とか仕事の内容とかも入れることを考えると流石に公開する気にはならないですねw 特に公開するメリットがあるとも思えないので、今回はあくまでもローカルオンリーです。


dokuwikiのダウンロード

サーバー上で動くwikiにも色々と種類があるようですが、今回利用したのは「dokuwiki」というこれまたオープンソースのwikiソフトです。データベースを使わないというのが特徴らしく、このあたりはLinux的な(UNIX的な)思想に基づいている感じですね。2020年現在でも開発が継続されていますし、wikiとしても一般的なもののようなので、あまり深く考えずにこれをつかうことにしました。日本語版の解説も多少はあるので、なにか困ったときにも調べやすいですしね(とはいえ、訳のバージョンが古かったり、翻訳されていない資料も多いので結局は英語を読むことも多いですが。。。)

まずは上記の公式ページからdokuwikiの本体をダウンロード。その後は圧縮ファイルを解凍したり、dokuwikiの本体を公開フォルダに移動させたりと細々とした操作を実施。

$ cd ~/Download
$ tar -xzvf dokuwiki-8a269cc015a64b40e4c918699f1e1142.tgz
$ sudo cp -r dokuwiki /mnt/storage/www

ここまで出来たら、ブラウザからインストール用のphpファイルにアクセスします。具体的には「{サーバー機のipアドレス}/dokuwiki/install.php」をブラウザに入力します。


インストール時に問題発生

しかし、ここで問題発生。エラーを吐かれてインストール出来ず。。。スクショを撮り忘れましたが、permissionの問題がどうのこうのというエラーだったので、そちらの方面でちょっと調べてみました。

結論としては、ブラウザで動かした場合のユーザーは別個に設定されているらしく、「install.php」の実行権限がこのユーザーに付与されていないのが問題のようです。

実際に、apacheの設定ファイル「/etc/apache2/apache2.conf」を見てみると下記の記載があります。

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

つまり、apacheで動かしている時のユーザーとグループはそれぞれ「APACHE_RUN_USER」と「APACHE_RUN_GROUP」という変数で設定されているようですね。もう少し調べてみると、「/etc/apache2/envvars」に環境変数が格納されていることがわかりました。

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

デフォルトではwww-dataというユーザー・グループで動いているわけですね。

ここまでわかったところで、以下のような方針で対応することとしました。

①サーバーマシンに「apache」というユーザーを作成
②「dokuwiki」フォルダの所有者を「apache」に変更
③apahceの「APACHE_RUN_USER」および「APACHE_RUN_GROUP」の変数をapahceに変更

これでいけるはずですね。具体的なコマンドは

$ sudo groupadd apache     # apacheグループを作成
$ sudo useradd -g apache apache     # apacheグループでapacheユーザーを作成

としたうえで

$ sudo cp /etc/apache2/envvars /etc/apache2/envvars.bk    # 念の為バックアップ
$ sudo vim /etc/apache2/envvars     # 環境変数の変更

として

export APACHE_RUN_USER=apache
export APACHE_RUN_GROUP=apache

のように変更して環境変数を「apache」変更。さらに下記でdokuwikiフォルダの所有者を変更。

$ sudo cd /mnt/storage/www    # 公開フォルダに移動
$ sudo chown -R apache:apache dokuwiki     # 所有者の変更
$ sudo service apache2 restart     # apacheを再起動

これで無事にインストール出来る状況にできました。インストール画面はこんな感じです。

画像1


インストールと運用について

あとはブラウザの指示に従って入力していけばインストール完了です。インストールを完了したら、install.phpを削除しておきます。

$ cd /var/www/html/dokuwiki
$ sudo rm install.php 

あとは、dokuwiki上でセキュリティ警告が出ていたので、その指示に従ってapacheの設定を行います。まあ、これもローカルで使う分には特に気にしなくてもいいとは思いますが。。。

具体的には「dokuwiki」フォルダに入っている「conf」「data」「inc」「vendor」を公開しないように設定します。設定する箇所は「/etc/apache2/apache2.conf」です。

<Directory /mnt/storage/www/dokuwiki/data>
      order deny,allow
      deny from all
</Directory>

上記は「data」についてですが、それ以外のものも同様に設定すればOK。これでようやっと設定が終わってwikiが使えるようになりました。

画像2

冒頭に書いたように、現時点での運用は限定的ですが既に多少は役に立ってくれています。例えば今回の記事で使用したコマンド等は、すべてwikiにメモをしており、そこからnoteにコピペするという方法で書いていたりします。まだまだクラウドストレージと比較して有意があるような使い方ではないですが、もう少し工夫して有効活用したいところですね。

具体的に考えているのは、読書会のリスト自動化の記事で書いたウェブスクレイプとの連携です。読書メーターから読んだ本のデータ(本情報や感想、読了日など)を引っ張ってきて、自分のwikiに流し込むみたいなイメージですね。dokuwikiのデータの実態はtxtファイルなので、おそらくそんなにハードルは高くないかなと。そういう少し高度な機能を「Evernote」等でやるのはちょっと難しそうなので(できなくはないかもしれませんが)、自作のwikiをつくった意味はでてくるのかなと。まあ、妄想は広がりますねw


まとめ

今回は、前回構築したapacheウェブサーバーにwikiを立てたことについて書いてみました。まだあまり有効活用できていないのが現状ですが、プログラム・自動化との相性は良いツールだとは思うので、また何か思いついたらnoteに書いていきたいと思います。

それでは、また!

この記事が気に入ったらサポートをしてみませんか?