TrueNAS Scale24.04でNextCloudをインターネット公開するまで
背景
NASに保存しているデータに外出先からアクセスできるようにしたく、TrueNAS上にNextCloudを立てたのですが、意外と日本語のナレッジが少ないため記事を書くことにしました。
やりたいこと
TrueNAS ScaleにはApplicationsという機能があり、その機能でなるべくGUI設定だけでNextCloudをインターネット公開します。
インターネット公開にはCloudflare tunnelというサービスを使います。cloudflaredというソフトウェアをホストにインストールし、ホストとCloudflare間の接続をセキュアなトンネル経由で指定したドメインで公開できます。インターネットに公開するためセキュリティ設定は気をつけたいところです。
前提条件
TrueNAS Scaleバージョン
Dragonfish-24.04
古いので更新したいですね。一旦これで完成させてしまったのでアップデートしたら新バージョンに対応した記事を書こうと思います。
ドメイン
Cloudflareで独自ドメインを取得済み。Cloudflareはドメインを原価で提供しており、ここで取っておくと他のCloudflareサービスとの接続も色々と楽なのでおすすめです。他のレジストラで取っていてもDNSの権限委譲で今回と同様のことは実現できるはずです。Tailscale/WireGuardを使えばドメインを取らずインターネット公開もせずに実現できそうですが、Tailscaleを使ったことがないのとクライアント側のVPN ON/OFFが面倒なため今回は採用しませんでした。Tailscale使いこなせるようになったら移行するかも。
手順
アプリケーションカタログの追加
デフォルトのカタログにはNextCloudが入っていないため、カタログを追加します。
- TrueNAS管理画面のApplicationタブのDiscoverからManage Catalogsを選択
- Add Catalogから任意の名前でRepositoryに
https://github.com/truenas/charts.git
を追加(注: deprecatedです。リポジトリのREADME.mdには24.10 or laterにアップデートしてhttps://github.com/truenas/apps
を使うよう案内があります。)
NextCloudのインストールと設定
- Discover AppsからNextCloudをインストールします。
- 設定画面でAdmin UserとAdmin Passwordを設定します。(なぜか後でもう一度設定することになりますが必須入力なので入力します)
- Storage ConfigurationはixVolumeで問題ありません。NASデータへのアクセスはNextCloudの外部ストレージ機能を使って行います。NextCloudのインストール先を指定したい場合はHost Pathを選択し、ACL設定を適切に行います。
- Web Portは他のアプリケーションと被らない値に設定します。
- インストールします。
- アプリケーション一覧のStatusがDeployingから動作中に変わったら、Application InfoのWeb Portalからweb管理画面に入ります。
- NextCloudの初期設定を行います。
- シェルで入って設定を行います。Application Info→Workloads→docker.io/library/nextcloud xx.x.xのシェル→Pods: nextcloud-xxxxx-xxx, Containers: nextcloud, Commands: /bin/bashを選んだら選択ボタンを押します。
- NextCloudのディレクトリに移動します:
cd /var/www/html
- aptで任意のテキストエディタを導入します:
apt install -y vim
- コンフィグファイルを開きます:
vim config/config.php
- trusted_domainsのarrayにNextCloudをインターネット公開するときに使うサブドメインを追加します。
- 適当な場所にNAS側のディレクトリをマウントするためのディレクトリを作成します。
- TrueNASのアプリ管理画面に戻り、Application Info→編集を開きます
- Additional Storageを追加し、TypeはHost Pathに、Mount Pathに先ほど作成したディレクトリのパスを、Host Pathの設定で参照したいデータセットを選択します。
- 画面下部のアップデートボタンを押し、ステータスが動作中になるまで待ちます。
- Host Path側のデータセットのACLでwww-dataがModifyできるように設定します。
- NextCloud Webポータルにアクセスし、アプリの設定からExternal Storage SupportをONにします。
- 管理者設定の外部ストレージから適当なフォルダー名で「ストレージを追加」プルダウンからローカルを選択し、「場所」に先ほど作成したディレクトリのパスを入力して追加します。
- MFAやログイン試行回数制限などのセキュリティ設定を行います。様々な方法があるためwebで調べてみてください。
Cloudflare tunnelのインストールと設定
Cloudflareアカウントがあり、Webダッシュボードに入れる前提で書きます。
- Cloudflareダッシュボード左ペインからZero Trust→ネットワーク→tunnelsを選択します。
- Cloudflaredを選択し、分かりやすい名前をつけてトンネルを保存します。
- 「コネクタをインストールして実行する」コマンドをコピーし、...service install xxxxx....と続く最後の長い文字列(Tunnel Token)をどこかに控えておきます。
- TrueNASでDiscover Appsからcloudflaredアプリケーションを追加します。
- 設定で先程控えたTunnel Tokenを入力します。
- Network ConfigurationのHost NetworkチェックボックスをONにします。
- インストールしてしばらく待つとCloudflare Web画面のtunnelがup状態になります。
- パブリック ホスト名を追加し、次のように設定します。URLにはnextcloudの設定のhostとweb port(例:192.168.1.100:9001)を設定します。
- 以上で設定したサブドメインからNextCloudにアクセスできるはずです。お疲れ様でした。
感想
初めてTrueNASのApplication機能を使ったのとcloudflaredやNextCloudを触るのも久しぶりだったため、勝手が分からずかなり試行錯誤しました。こうして日本語の手順を書き起こしてみると結構やることあるのでGUIも面倒だと思いました。設定はIaCで書きたい、私が知らないだけで書けそうな気もします。一方でメンテされたアプリがChartで公開されているのは非常に便利です。クラウドサービス使ったほうが楽に実現できそうな気もしますが、せっかく(高い電気代を払って)家にサーバー置いてるので勉強も兼ねて自分で構築したいという気持ちがあってトライしてみました。オンプレサーバーに限らずIT関連の知識は少し別のことやってると忘れてしまいますし。
Discussion