TrueNASに幾つかアプリケーションを入れて使ってみた：Nextcloud編

参照元：[TrueNASにアプリを幾つか入れて使ってみた
](https://qiita.com/exthnet/items/523396d4bfedf04674b5)

sambaのような共有ディレクトリよりクラウドストレージの方が使い勝手が良いという事例（ユーザ、利用環境）も多くなってきた……のかどうかは知らないけど、自分も諸々の都合によりNextcloudを使うことが増えてきた。Nextcloud+Cryptomatorによる暗号化共有ストレージの需要があるというのが正しいかもしれない。TrueNASにもiXsystems提供Plugins（Official Plugin）としてNextcloudがあるので、インストールしてみた。
インストール時に最低限必要なのはIPアドレス設定。今回は`192.168.1.109/24`を固定で割り当てた。
インストールに多少の時間はかかるが、問題なく成功。

**もしNextcloud管理下のデータ（ファイル・ディレクトリ）をjail内部のディレクトリではなくjail外のディレクトリに置きたい（jailとデータを分けたい）場合は、具体的な操作はせずに最後まで読んでから、改めて操作を開始して欲しい。**

# 普通に利用開始するだけの場合
割り当てたIPアドレスにWebブラウザでアクセスすると、config/config.phpのtrusted_domainsを修正するよう促される。

![2021-09-04 09_59_00-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199517/1d29d3a7-64ff-7997-1b22-83e389f4bbc8.png)

`/usr/local/www/nextcloud/config/config.php` を開くとこんな感じになっている部分がある。（192.168.1.102はTrueNAS自体のIPになっているはず。）

```
'trusted_domains' =>
array (
 0 => 'localhost',
 1 => '192.168.1.102',
),
```

ここにアクセス元として許すIPを追記すれば良い。ワイルドカードも使用可能。今回の環境はルータ下に`192.168.1.0/24`を使っているため、 `1 => '192.168.1.*'` に変更すれば解決。

この状態で再度Webアクセスすれば無事にNextcloudを利用可能になる。初期状態で存在するユーザとパスワードの情報は、Plugins画面のプラグイン選択部の下に表示されているインストール済プラグイン一覧からインストールしたNextcloudを選択し、`POST INSTALL NOTES`を選べば確認できる。

具体的にはこんな画面。（右下の`POST INSTALL NOTES`を選べばパスワードなどの情報が表示される。）

![2021-09-09 10_07_01-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199517/c3372040-490a-f41f-a74f-26deedd68e00.png)


以上でNextcloudが利用可能になる。Webインターフェイスで使っても良いが、個人的にはNextcloudクライアントでアクセスしたり、さらにCryptomatorで暗号化したりして使っている。上流のルータの設定次第でインターネット越しのアクセスもできるが、この場合も最初に設定した`trusted_domains`設定が影響する可能性がある点には注意した方が良い。


# データ置き場を変えて利用する場合
上記のとおりに利用開始した場合、Nextcloudのデータ置き場はjail用のデータ領域となる。標準的な設定では`config.php`に`'datadirectory' => '/usr/local/www/nextcloud/data',`という記述があり、ここで決められている。TrueNAS全体で見るとこれは
`/mnt/storage/iocage/jails/（jail名）/root/usr/local/www/nextcloud/data`
というディレクトリに相当する。

この設定はTrueNASのPoolの運用方法によっては不便が生じることがあるかもしれない。例えば、これは本当に意味があるのかはわからないのだが、**「jail本体は高速で冗長性なしのSSDに置いて動作を高速化し、Nextcloudで管理したいデータは冗長性のあるRAIDプールに置きたい」**ような場合、Nextcloudのデータ置き場をjail用のデータ領域の外にする必要がある。
こういうときはjail外のディレクトリをjail内にマウントしてやれば良い。具体的には、対象jailを停止し、各jailの`Mount Points`から設定を変更すれば簡単に設定できる。

以下のスクリーンショットは、**「`/mnt/extra/iocage/jails`に`nextcloud2`というjailが存在、その中の`/mnt/data`にjail外の`/mnt/storage/nextcloud2`をマウントする」**という設定の例になる。ちなみに`/mnt/data`はあらかじめ作っておかなくても大丈夫だが、`/mnt/storage/nextcloud2`は設定する前に作っておく必要がある。（TrueNASの`shell`メニューから`mkdir`しておけば良い。）

![2021-09-09 09_14_14-TrueNAS - 192.168.1.102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199517/8f42d20b-7553-07ed-f2ee-27bb3e8134e1.png)

あとは停止していたjailを起動し、`config.php`の`datadirectory`を`'/mnt/data'`に変更すれば良い。
この際、`/mnt/data`ディレクトリには`.ocdata`というファイルが必要となる（存在しないとアクセスした際にその旨が表示される）が、存在さえすれば空ファイルで構わないため、`touch /mnt/data/.ocdata`とでもしておくと良い。さらにNextcloudのデータ置き場は所有者をWebエンジンの実行者にしておくのが正しいようなので、`chown -R www:www /mnt/data`しておくと良い。
（ちなみに元々のデータディレクトリには`.htaccess`も置いてあるのだが、これは本来のディレクトリが`/usr/local/www`以下であるための措置のような気がするので、恐らく置かなくても大丈夫。）

あとはjailのIPアドレスにWebブラウザでアクセスすれば利用開始できるはずである。

# バッドノウハウ的な何か
一度デフォルト設定で利用開始してからデータ置き場を変更する場合、`config.php`の`datadirectory`を変更して、`.ocdata`を作り直すかそもそも従来置いてあったファイルを全てコピーや移動すれば良い……はずである。基本的にパーミッションも含めてコピーしてあげれば問題なく使えると思うのだが、この状態でWebから設定画面にアクセスすると、「管理」の「概要」を開いた時に以下のエラーが出てしまう。実際には「CLIからcronジョブを実行する」ことはなさそうな気もする（デフォルトでAjaxから実行されているみたい）ので大丈夫な気もするのだが……

```
CLI から cronジョブを実行することができませんでした。次の技術的なエラーが発生しています：
データディレクトリが無効です データディレクトリの直下に ".ocdata" ファイルがあるのを確認してください。
```

**あくまで経験上であるが、Webブラウザで初回アクセスする前に`datadirectory`を変更してしまえばこの問題は発生しないようなので、データ置き場を初期設定から変えたい場合には最初に変更しておくと良いようである。**

# おまけ
ところで、jail外のディレクトリをマウントして使いたい場合、以前はACL設定も必要だったような記憶があるのだが、いまは不要なのだろうか？状況によっては必要になるのだろうか？
参考設定：マウントポイント設定の右端から`Edit ACL`を選択し、`Create a custom ACL`を選択、右列`Access Control List`の一番下（3つめ）をUser, www, Allow, Basic, Full Control, Basic, Inheritあたりにして最下段の`SAVE`ボタンで保存。なんかこんな感じの設定が必要だった記憶が……。

![2021-09-04 10_39_26-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199517/106cc595-7276-b399-2658-19e04d4f5592.png)

# 二段階認証を有効化する
NextcloudをWebからアクセスできるようにする場合、流石に単純なパスワード認証だけというのは怖い。というわけで、今流行である二段階認証を導入した。
「アプリ」から`Two-Factor TOTP Provider`を有効化し、さらに「設定」の「セキュリティ」から二段階認証の強制も有効化した。
これでCryptomatorも併用すれば、とりあえず安全なんじゃないかな……。

# SSL化はどうしよう？
完全個人用途なのでいいかなあ、という気はするが、手順を知っておきたいという気持ちはあるので、試してみようかなぁ……。