RaspberryPi3でNextcloudサーバ構築


RaspberryPi3にNextCloudをインストールして、オンラインストレージを作成してみました。
データの保存先はRaspberryPiのmicroSDでは容量も書き換え回数も不安でしたので、USB HDDを接続してそちらに保存するようにしてみました。

# 実施環境

+ ハーウェア
    + RaspberryPi 3B+
    + USB HDD(SSD) 1TB
+ ソフトウェア
    + Ubuntu Server 20.04.1 LTS (aarch64版)
    + Nextcloud (19.0.4snap2)
 
## USB HDDの準備

データ保存先をUSB HDDにするためにフォーマットしたりマウントしたりで準備をします。
今回は、ext4でフォーマットして使おうと思います。

### HDDのデバイス名を確認

+ `sudo lsblk`コマンドでデバイス名表示

```shell
$ sudo lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0  48.5M  1 loop /snap/core18/1883
loop1         7:1    0  48.8M  1 loop /snap/core18/1936
loop2         7:2    0  63.6M  1 loop /snap/lxd/16103
loop3         7:3    0  59.9M  1 loop /snap/lxd/18152
loop4         7:4    0  26.9M  1 loop /snap/snapd/9730
loop5         7:5    0    26M  1 loop /snap/snapd/8543
loop6         7:6    0 268.3M  1 loop /snap/nextcloud/24060
sda           8:0    0 931.5G  0 disk
└─sda1        8:1    0 931.5G  0 part
mmcblk0     179:0    0  29.2G  0 disk
├─mmcblk0p1 179:1    0   256M  0 part /boot/firmware
└─mmcblk0p2 179:2    0  28.9G  0 part /
```

上記ログでは**sda**が挿入したUSB HDDでした。
※分からなければ、抜き差しして増えているものを確認などで特定

### HDDをフォーマット

+ `parted`コマンドを使ってパーテーションを作成
+ `mkfs.ext4`コマンドでフォーマット

```shell
$ sudo parted -s -a optimal /dev/sda  mklabel gpt -- mkpart primary ext4 1 -1
$ sudo mkfs.ext4 /dev/sda1 -L 'nextcloud_a'
```

HDDフォーマットが成功したか確認します。

+ `blkid`コマンドでブロックデバイス一覧を表示

```shell
$ sudo blkid
/dev/mmcblk0p1: LABEL_FATBOOT="system-boot" LABEL="system-boot" UUID="B726-57E2" TYPE="vfat" PARTUUID="ab86aefd-01"
/dev/mmcblk0p2: LABEL="writable" UUID="483efb12-d682-4daf-9b34-6e2f774b56f7" TYPE="ext4" PARTUUID="ab86aefd-02"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/sda1: LABEL="nextcloud_a" UUID="409fa06a-20b3-4b60-b20f-2afb56ddf395" TYPE="ext4" PARTLABEL="primary" PARTUUID="d18a25ba-b177-4d1d-9807-709bbbb4f95c"
/dev/loop6: TYPE="squashfs"
```

⇒ **sda1**が、ラベル名:「**nextcloud_a**」、ext4でフォーマットされたことを確認。

### HDDのマウントポイントを作成

今回は、`/mnt/nextcloud_a` にHDDをマウントします。

+ `mkdir`コマンドで `/mnt/nextcloud_a` ディレクトリ作成

```shell
$ sudo mkdir /mnt/nextcloud_a
```

### ファイルシステムテーブルに追加

再起動時に自動マウントされるように、ファイルシステムテーブル `/etc/fstab`にマウントするデバイスの情報を追加します。

viなどで`/etc/fstab`を開き、以下行を追記する

```/etc/fstab
LABEL=nextcloud_a       /mnt/nextcloud_a        ext4    defaults        0       0
```

ちゃんとマウントできるか確認します。

+ `mount -a`コマンドを実行して `/etc/fstab`の記述内容にしたがってマウント
+ `mount`コマンドにてディスク状態確認

```shell
$ sudo mount -a
$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
～～～～
/dev/sda1 on /mnt/nextcloud_a type ext4 (rw,relatime)
```

## Nextcloudのデータ保存先をUSB HDDになるように準備

今回は、NextCloudをsnapでインストールするので、snapのnextcloudのデータ保存先ディレクトリ`/var/snap/nextcloud`が、USB HDDになるようにbind mountします。

### bind用のマウントポイントを作成

+ `mkdir`コマンドで、`/var/snap/nextcloud`ディレクトリ作成

```shell
$ sudo mkdir /var/snap/nextcloud
```

### bind用のデバイス先(データ保存先)ディレクトリを作成

+ `mkdir`コマンドで、`/mnt/nextcloud_a/nextcloud`ディレクトリ作成

```shell
$ sudo mkdir /mnt/nextcloud_a/nextcloud
```

### ファイルシステムテーブルに追加

こちらも、再起動時に自動マウントされるように、ファイルシステムテーブル `/etc/fstab`にマウントするデバイスの情報を追加します。

viなどで`/etc/fstab`を開き、以下行を追記する

```/etc/fstab
/mnt/nextcloud_a/nextcloud      /var/snap/nextcloud     none    bind    0       0
```

ちゃんとマウントできるか確認します。

+ `mount -a`コマンドを実行して `/etc/fstab`の記述内容にしたがってマウント
+ `mount`コマンドにてディスク状態確認

```shell
$ sudo mount -a
$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
～～～～
/dev/sda1 on /mnt/nextcloud_a type ext4 (rw,relatime)
/dev/sda1 on /var/snap/nextcloud type ext4 (rw,relatime)
```
これで、データ保存先の準備完了。

## Nextcloudのインストール＆設定

Snapを使って簡単にセットアップを済ませます。

### Snap packagesを使ってNextcloudのインストール 

nextcloud公式の [「Installation on Linux」](https://docs.nextcloud.com/server/20/admin_manual/installation/source_installation.html) ページの [「Installing via Snap packages」](https://docs.nextcloud.com/server/20/admin_manual/installation/source_installation.html#installing-via-snap-packages)の章を参考にしました。

+ `sudo snap install nextcloud` とコマンドを実行
    + 今回は、最新の`20.0.1snap1` がバグがありそうだったので、1つ前の`(19/stable) 19.0.4snap2`を指定してインストール

```shell
$ sudo snap install  nextcloud --channel=19/stable
nextcloud (19/stable) 19.0.4snap2 from Nextcloud✓ installed
```

## Installation wizardを使ってセットアップ

nextcloud公式の [「Installation wizard」](https://docs.nextcloud.com/server/20/admin_manual/installation/installation_wizard.html) ページには、
Webブラウザで`http://localhost/nextcloud` にアクセスと記載されていたが、
セットアップした際には `http://localhost` （`http://<IPアドレス>` ) でした。

※Ubuntu Serverにセットアップしているので、別PCのブラウザよりアクセス。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538393/fc97cd0c-e66a-e6be-4aff-3729b191e1e5.png)

+ **ユーザ名**／**パスワード**を入力
+ 「**推奨アプリをインストール**」は不要なら外しておく(後から入れることもできるし)
+ 「**セットアップを完了します**」を押下

セットアップにしばらく時間がかかりますが待っていれば終わります。


以上。