LOG #0069 min read8 sections

【保存版】Synology NASにプライベートWikiを作る!MediaWikiをwiki.kaylog.ioで公開するまで

はじめに|「あのコマンド、どこに書いたっけ……」問題 PCで開発や環境設定をしながら、こんな経験はありませんか? 「あれ、このエラー、前も解決したはずなんだけど……どこにメモしたっけ?」 そう、僕はずっとこの問題に悩んで …

目次12 items

目次#

  1. MediaWikiをDSMからインストールする
  2. セキュリティ警告を完全解決する(.htaccess編集)
  3. DBエラー「Error 1044」を解消する
  4. wiki.kaylog.ioで公開するための設定
  5. WikiTextとMarkdownの違いを知っておく
  6. まとめ

ステップ① MediaWikiをDSMからインストールする#

まずは基本から。DSMのパッケージセンターを開いて「MediaWiki」を検索してインストールするだけです。

インストールが完了したら、WebステーションでエイリアスとしてMediaWikiを確認できます。デフォルトでは http://[NASのIP]/mediawiki/ みたいなURLでアクセスできる状態になっています。

この段階ではまだセットアップウィザードが走るだけなので、焦らず進めていきましょう。

ステップ② セキュリティ警告を完全解決する(.htaccess編集)#

インストール後、管理画面を開くとこんな警告が表示されました:

「え、インストールしたばっかりなのにもう脆弱性……?」

落ち着いて確認すると、images/ ディレクトリに配置されている .htaccess の設定が古くて、PHPファイルの実行制限が不十分だったのが原因でした。

修正手順#

SSHでNASにログインして(またはFile Stationから)、以下のファイルを編集します:

text1 lines
/volume1/web_packages/mediawiki/images/.htaccess

修正前の内容(デフォルト):

apache13 lines
<IfModule headers_module>
Header set X-Content-Type-Options nosniff
</IfModule>
<IfModule php7_module>
php_flag engine off
</IfModule>
<IfModule php_module>
php_flag engine off
</IfModule>
RemoveHandler .php
<FilesMatch "\.ph(p[3457]?s?|tml)$">
    SetHandler None
</FilesMatch>

修正後の内容:

apache20 lines
<IfModule headers_module>
    Header set X-Content-Type-Options nosniff
</IfModule>
<IfModule php7_module>
    php_flag engine off
</IfModule>
<IfModule php_module>
    php_flag engine off
</IfModule>
RemoveHandler .php .php3 .php4 .php5 .php7 .phtml .pht .phps
<FilesMatch "\.ph(p[3-8]?s?|tml|t)$">
    SetHandler None
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Deny from all
    </IfModule>
</FilesMatch>
Options -ExecCGI

主な変更点は3つ。RemoveHandler の対象拡張子を増やしたこと、FilesMatch のパターンを最新のPHPバージョンまでカバーするよう拡張したこと、そして Require all denied と Options -ExecCGI でCGI実行自体を無効化したことです。

保存してMediaWikiの管理画面をリロードすると……警告が消えました!! 完全解決です。

ステップ③ DBエラー「Error 1044」を解消する#

セットアップウィザードを進めていくと、次のエラーで止まりました:

text2 lines
Error 1044: Access denied for user 'Kay'@'localhost' to database 'kaylog'
Query: CREATE DATABASE `kaylog` CHARACTER SET utf8

「あー、DB作成権限がないやつだ……」

MySQLのユーザー Kay に、データベースを新規作成する権限が付いていなかったのが原因です。Synologyのパッケージ管理では、インストール時に自動でMySQLユーザーを作ってくれるんですが、権限が最小限に絞られていることがあります。

解決方法:phpMyAdminでSQLを実行#

DSMのパッケージセンターから「phpMyAdmin」を開いて、SQLタブで以下を実行します:

sql3 lines
CREATE DATABASE `kaylog` CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON `kaylog`.* TO 'Kay'@'localhost';
FLUSH PRIVILEGES;

これで kaylog データベースを手動で作成しつつ、Kay ユーザーに必要な権限を付与できます。

その後、MediaWikiのセットアップウィザードに戻って「データベース名:kaylog」「ユーザー:Kay」で再実行 → インストール完了!!

ステップ④ wiki.kaylog.ioで公開するための設定#

ここが今回のハイライトです。QuickConnectのURL(quickconnect.to/xxxx)ではなく、ちゃんとした独自ドメインで公開したかったんです。

前提状況#

  • kaylog.io(ポート80/443):WordPressがすでに稼働中
  • MediaWikiはWebステーションのエイリアスとして同居

「WordPressと共存できるの?」 という不安がありましたが、結論から言うと全く問題なしです。Webステーションは仮想ホストで別ポータルを作れるので、ドメインが違えばポート競合しません。

手順#

1. Webステーションで新しいポータルを作成

Webステーション → ポータル → 作成で、wiki.kaylog.io(HTTP 80 / HTTPS 443)を新規追加します。アプリケーションとして「MediaWiki」を割り当てましょう。

2. CloudflareのDNS設定

wiki のAレコードを追加します。ここで重要なのがグレーの雲(DNSのみ) にすること!!

オレンジの雲(プロキシ経由)にしてしまうと、Let’s Encryptの証明書取得時にCloudflareのIPが見えてしまって、NASのIPにDV(ドメイン認証)が通りません。

3. Let’s Encryptの証明書取得

DSM → コントロールパネル → セキュリティ → 証明書 → 追加で、wiki.kaylog.io に対してLet’s Encryptの証明書を取得します。

4. LocalSettings.phpを編集する

ここが404解決の鍵です!!

SSHで以下のファイルを開きます:

text1 lines
/volume1/web_packages/mediawiki/LocalSettings.php

以下の2行を修正します:

php2 lines
$wgServer = "https://wiki.kaylog.io";
$wgScriptPath = "";  // ← ここを空文字にする!

デフォルトでは $wgScriptPath = "/mediawiki"; になっていますが、これをそのままにしておくと https://wiki.kaylog.io/mediawiki/index.php にリダイレクトされて404になります。独自ドメインのルートで動かす場合は必ず空文字にしましょう。

「これに気づくまで30分溶けた……」

5. 証明書の割り当て設定

DSM → コントロールパネル → セキュリティ → 証明書 → 設定 で、wiki.kaylog.io:80 と wiki.kaylog.io:443 に先ほど取得した証明書を割り当てます。

これで https://wiki.kaylog.io にアクセスすると……証明書警告なし、完璧に表示されました!!

ステップ⑤ WikiTextとMarkdownの違いを知っておく#

Wikiができあがったあと、「よし、いままでNotionに書いてたメモをコピペしよう!」と思ってMarkdownをそのまま貼り付けると……見事に崩れます。

MediaWikiはMarkdownではなく「WikiText」という独自記法を使っています。主な違いはこちらです:

要素 Markdown WikiText
見出し(大) ## 見出し == 見出し ==
見出し(小) ### 見出し === 見出し ===
箇条書き - リスト * リスト
番号リスト 1. 番号 # 番号
太字 **太字** '''太字'''
リンク [text](URL) [URL text]
URLをそのまま表示 自動リンクになることも <nowiki>URL</nowiki>

まとめ#

  1. MediaWikiはDSMのパッケージセンターから簡単にインストールできます:ただしセキュリティ警告とDBエラーはほぼ確実に踏むので、この記事の手順を参考にしてください。
  2. WordPressと同じNASで完全共存できます:Webステーションの仮想ホスト機能を使えばポート競合しません。既存の kaylog.io への影響もゼロです。
  3. 独自ドメイン公開の鍵は $wgScriptPath = "";:ここを空にしないと404地獄に落ちます。Cloudflareはグレーの雲(DNSのみ)でLet’s Encryptを通してから設定しましょう。

締めの一言#

「ナレッジが散らばる問題」、Synology NASを持っているなら完全解決できます。

これからNASの設定手順だけじゃなくて、カメラのセットアップメモ、Lightroomのプリセット管理フロー、機材リストなんかも全部ここに集約していく予定です。「NASが自分専用の脳みそ」 になる感覚、最高ですよ。

Synologyユーザーで同じ悩みを抱えている方、ぜひ試してみてください!!