SynologyNASで短縮URLをホストする方法

短縮URLサービスは便利だけど…

例えばBitlyとかTinyURLみたいな、長いURLを短いURLに変換してくれるサービスがありますが、フリープランだと、大量のURLを変換とすると制限がかかるし、便利な管理機能の使用は限られます。
それに、この手のサービスは突然終了することがあり、Googleが最たる例で、「goo.gl」で始まる短縮URLサービスをやっていましたが、突然撤退。
これでは大量のリンク切れが発生する恐れがあり、安心して使えません

そこでセルフホストです

あ、あそこに良い機械がうごいてるじゃないですか、そうあれです、NASです。NASにそんなに大容量のHDDを搭載して、何してるんですか?エロ動画の保管場所ですか?それを24時間動かしているんですか?もったいない。NASで自分用短縮URLサービスを動かしてしまえばいいではありませんか。

設定の手順

0.SynologyNASとクライアントPCやスマートフォンにTailscaleを導入します

TailscaleはVPNというやつで、これを使えばポートを解放せずに、外出先から自宅のNASにあたかも自宅内からのようにアクセスできるようになります。加えて、MagicDNSというVPNの中でのみ有効なドメインを自由に決めてアクセスできるのでかなり便利になります。「ネットワークとかよくわかんない」という人はサービスを外部に公開すると攻撃される危険性もあるので、導入推奨です。
私の場合はサーバーを公開せず、完全に自分しか使わないつもりなので、その前提で構成していきます。
公開しないなら短縮URLをシェアできないから無意味じゃないかと思われると思いますが、個人的なニーズを満たしています。

1.必要に応じてNASにパッケージをインストールします

  • php7.4
    ⇒サーバーを動かすプログラミング言語が動作するために必要です
  • MariaDB 10
    ⇒パスワードを求められるので決めてください
    ⇒私の場合は自分しか使わないのでポートは開けません
  • phpMyAdmin
    ⇒MariaDB 10 を使用するためのGUI管理画面です
  • Apache HTTP Server 2.4
    ⇒WEBサーバーをインストールします。
    ⇒NGINXでも動作しますが、Apacheが推奨されているのでApacheを使用します。
  • WEB Station
    ⇒WEBサーバーの管理画面です。

2.WEB Stationを開きます

[Webサービス ポータル]タブから、デフォルトサーバーをダブルクリックして設定を開きます。
HTTPバックエンドサーバ:Apache
PHP:PHP7.4
として保存します

3.PHPプロファイルを編集します

[スクリプト言語の設定]タブから、ユーザー定義をダブルクリックして設定を開きます。
そして[拡張]タブで拡張機能をとりあえず全部有効にします。PDO関連は必須のようですが、PDO関連と思われるものだけ有効にしても動きませんでした。特定が面倒なので全部有効にしてしまいました。これは悪いやり方です。
phpMyAdminのプロファイルも同様に設定します。

4.phpMyAdminを開きます。

ユーザー名:root
パスワード:MariaDB 10のパスワード

左のデータベース一覧から[新規作成]を押して新しいデータベースを作成します。ここでは「yourls」として作成しました。

5. YOURLSをダウンロードしてきます

GitHubからソースコードをダウンロードして、解凍します。今回はバージョン1.9.2を使用。

6.共有フォルダ「web」の直下に解凍したファイルをコピーします

7.「.htaccess」ファイルを「web」の直下に作成します

中身は公式ドキュメントの通りにすればOK
# BEGIN YOURLS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /yourls-loader.php [L]
</IfModule>
# END YOURLS
そのままだとyourlsが「.htaccess」ファイルに書き込みできないので、File Stationから権限を与えておきましょう

8.config.phpを編集します

「user」フォルダの中に「config-sample.php」が置いてあるので、コピーして「config.php」に改名して編集します。
簡単な英語で書き方が書いてあるので、適当にその通りにします。
MariaDB 10のユーザー名
define( ‘YOURLS_DB_USER’, ‘root’ );
MariaDB 10のパスワード
define( ‘YOURLS_DB_PASS’, ‘hogehoge’ );
先ほど作ったデータベース「yourls」を指定
define( ‘YOURLS_DB_NAME’, ‘yourls’ );
データベースのデフォルトのポートは3306(localhostというのはNAS自身という意味です)
define( ‘YOURLS_DB_HOST’, ‘localhost:3306’ );
自分のサイトのルートを指定。
Tailscaleを使ってNASのドメインを「nas」としてあるから「http://nas」だけでNASにアクセスできてしまうのだ。SSLじゃないのでブラウザに警告が出るが、Tailscaleはend to endで暗号化されているから、通信が傍受されることはない。
define( ‘YOURLS_SITE’, ‘http://nas’ );
yourlsの管理画面にログインするためのユーザー名とパスワードを決める。
平文だからあとで公式ドキュメントを見てハッシュ化しておくこと。
$yourls_user_passwords = [
    ‘green’ => ‘potato’,
];

9.http://(あなたのドメイン)/admin/にアクセスする

インストールボタンをクリック

成功。

設定ファイルへの書き込み権限がないのでエラーが出てますが、あとで修正。
とりあえず無事管理画面が開かれました。お疲れ様でした。