はじめに
RaspberryPi3とNextCloudでプライベート用メディアサーバを構築してみました.本記事はその時の手順のメモになります.
また,本記事ではOSはRaspbianを採用し,データの保存場所はRaspberryPi3にUSB接続した外付HDDを使用しています.
ちなみにラズパイ上でNextcloudを使うためのNextCloudPiというOSもリリースされています.気になる方は調べてみてください. -> https://ownyourbits.com/2017/02/13/nextcloud-ready-raspberry-pi-image/
用意したもの
- Raspberry Pi 3 Model B
- micro SDカード 16GB
- Raspberry Pi用の電源ケーブル
- TOSHIBA 外付HDD 3TB
- USB接続のキーボードとマウス
NextCloudについて
NextCloudとはオンラインストレージを構築できるOpen Source Softwareです.
ownCloudというサービスをフォークして開発されています.
NextCloud HP - https://nextcloud.com
本編 -RaspberryPi3でNextcloudを使う-
初期設定
はじめにRaspberryPiにRaspbianをインストールします.
Raspbianのインストールについては過去に別の記事を書いているので省略します.Raspbianのインストール手順が分からない方は是非ご覧ください! -> Raspbianのインストールと初期設定
Raspbianをインストールしたらパッケージの更新もしておきます.
$ sudo apt-get update
$ sudo apt-get upgrade
Apacheのインストール
WebサーバソフトウェアのApacheをインストールします.
$ sudo apt-get install apache2
PHP7.0をインストールします.
$ sudo apt-get install php7.0
インストールが完了したら,とりあえずApacheを再起動しておきます.
$ sudo service apache2 restart
NextCloudのインストール
ディレクトリを移動します.
$ cd /var/www/html
インターネットからNextCloudをダウンロードして解凍します.
$ curl https://download.nextcloud.com/server/releases/nextcloud-13.0.1.tar.bz2 | sudo tar -jxv
解凍が終わったらそのディレクトリに移動し,dataフォルダを作ります.デフォルトではここにメディアサーバのデータが保存されます.
$ cd nextcloud
$ sudo mkdir data
最後に,各種ファイルとフォルダのアクセス権限を編集しておきます.www-data
とはApacheのデフォルトのユーザー(とグループ)です.
これでNextCloudのインストールは完了です.
$ sudo chown www-data:www-data /var/www/html/nextcloud/data
$ sudo chmod 750 /var/www/html/nextcloud/data
$ sudo chown www-data:www-data config apps
MariaDBのインストール
MariaDBをインストールします.
$ sudo apt-get install mariadb-client mariadb-server
インストールが完了したらDBの初期設定をしていきます.
MariaDBのモニター画面に入ります.
$ sudo mysql -u root -p
次にNextCloud用のDBを作成します.
CREATE DATABASE <db-name>;
データベースを利用するユーザーとパスワードを作成します.
CREATE USER '<db-username>'@'localhost' IDENTIFIED BY '<db-userpass>';
作成したユーザにDB管理の権限を与えます.
GRANT ALL PRIVILEGES ON <db-name>.* to '<db-username>'@'localhost';
コンソールから権限をフラッシュさせて,MariaDBを終了します.
FLUSH PRIVILEGES;
quit
外付HDDの設定
デフォルトだとメディアサーバのデータはRaspberryPi本体に挿入したMicro SDに保存されてしまうのでこれを外付HDDに変更します.
まずは外付HDDをLinuxのファイルシステムext4でフォーマットします.このときHDDに保存されているデータは消去されるため事前にバックアップ等しておく事をお勧めします.
HDDのフォーマットはfdisk
やparted
でできますが,fdisk
は2TB未満のパーティションしか作成できません.今回は3TBのHDDをフルに利用したいのでparted
を使いました.
最初にRaspberryPiにHDDを接続して,df
コマンド等で接続したHDDのデバイス名を確認しておきます.
$ df
以降はHDDの初期マウント先が/dev/sda
であったものとして解説を続けますので,/dev/sdb
などマウント位置が異なる方はその都度読み替えてください.
それではHDDをフォーマットします.
まずはGNU partedを使って既存のパーティションを消去し,新しくパーティションを作ります.以下を参考にしてください.
$ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
New disk label type? gpt
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? y
(parted) mkpart
Partition name? []? nextcloud
File system type? [ext2]? ext4
Start? 0%
End? 100%
(parted) print
Model: TOSHIBA External USB 3.0 (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 3001GB 3001GB ext4 nextcloud
(parted) quit
続いてHDDをext4でフォーマットします.
$ sudo mkfs.ext4 /dev/sda
次にHDDをマウントするフォルダを作ります./media
か/mnt
に作成するのが一般的だと思います(諸説あり).
$ sudo mkdir /media/hdd0
マウント先を変更します.
$ sudo mount /dev/sda /media/hdd0
ディスク容量の確認で,適切な位置にマウントされているかどうか確認してみてください.
$ df
次にHDDが自動マウントされるように設定します.
$ sudo blkid /dev/sda
表示されるUUIDをコピーしておいてください.
一応バックアップを作成してから/etc/fstab
を編集していきます.
$ sudo cp /etc/fstab /etc/fstab_backup
$ sudo vi /etc/fstab
最後の行に以下のように追記して保存してください.
# HDD for NextCloud
UUID=******** /media/hdd0 ext4 defaults,noatime 0 0
HDDを接続したままRaspberryPiを再起動して,HDDが所定の位置にマウントされていれば完了です.
sudo shutdown -r now
$ df
最後に,マウントしたHDDにデータの保存環境を構築します.
.ocdata
を作成し,アクセス権限を編集します.
$ sudo chown www-data:www-data /media/hdd0
$ sudo touch /media/hdd0/.ocdata
$ sudo chown www-data:www-data /media/hdd0/.ocdata
NextCloudの設定
Chromium等のブラウザからhttp://localhost/nextcloud
にアクセスしてNextCloudの初期設定をしていきます.
PHP関係で足りないものがあると怒られます.必要なものを入れてあげてApacheを再起動しましょう.
$ sudo apt-get install php7.0-mysql php7.0-pgsql php7.0-zip php7.0-dev php7.0-mbstring php7.0-gd php7.0-curl
$ sudo service apache2 restart
NextCloudが起動します.初回起動時は管理者アカウントのユーザー名とパスワードを設定する必要があります.
データフォルダには外付HDDをマウントした位置を,データベースのユーザー名,パスワード,データベース名にはそれぞれMariaDBの設定の際に作成したものを入力します.
「セットアップを完了します」をクリックしてNextCloudのセットアップは終了です.
NextCloudを使ってみる
NextCloudのメディアサーバにアクセスするときはhttp://<ラズパイのIPアドレス>/nextcloud
です.
Raspberry PiのIPアドレスは
$ ifconfig
$ ip route
などで確認できます.
また,最初にIPアドレス直打ちでアクセスしようとすると以下のエラーが出ることがあります.
Access through untrusted domain
Please contact your administrator. If you are an administrator, edit the "trusted_domains" setting in config/config.php like the example in config.sample.php.
Depending on your configuration, this button could also work to trust the domain:
"192.xxx.xxx.xxx" を信頼するドメイン名に追加
config.php
を開いて'trusted_domains'を編集してください.
$ sudo vi /var/www/html/nextcloud/config/config.php
'trusted_domains' =>
array(
0 => 'localhost',
1 => '192.xxx.xxx.xxx',
),
これでNextCloudからHDDにアクセスできるようになりました.お疲れ様でした.
その他
ファイルスキャン
フォーマットしたデータ保存用のHDDに大量のデータを入れたいときNextCloud経由でアップロードすると膨大な時間がかかってしまいます.このような場合,予めHDDにデータを全部入れた後にファイルを総スキャンしてDBに登録する方法がオススメです.
今回はexFATのHDDからデータをコピーしたかったのですが,LinuxはデフォルトではexFATをマウントできないので,最初にexFAT周りのパッケージをインストールしました.
$ sudo apt-get install exfat-fuse exfat-utils
NextCloudのデータ保存先である/media/hdd0/<nextcloud-username>/files
にデータをコピーします.
次にファイルの所有者をwww-dataに編集します.
$ sudo chown -R www-data:www-data /media/hdd0/<nextcloud-username>/files
最後に,ファイルを総スキャンします.
cd /var/www/html/nextcloud/
sudo -u www-data php occ files:scan <nextcloud-username>
再びNextCloudにアクセスすると,ファイルが追加されています.
IPアドレスの固定
RaspberryPiを再起動する度にIPアドレスが変わるとメディアサーバにアクセスしにくいため,IPアドレスを固定します.
最初に,ルーターの設定画面にアクセスしてDHCPサーバのアドレス範囲を確認します.固定IPアドレスを割り振る場合はこの範囲外に設定する必要があります.
固定IPアドレスを設定したらconfig.php
を更新してください.
終わりに
ラズパイ上でNextCloudを動かして,外付HDDを使用したプライベートメディアサーバを構築することができました.ラズパイとHDDを常時電源に接続しておく必要がありますがそれほど消費電力が多いわけでもありませんし,複数の端末からHDDにアクセスできるのは結構便利だと感じています.ただ,少し遅いと感じることも…
今回は自宅でしか使用しないプライベート用ということで設定をしましたが,そのうちポート開放,ドメイン取得,SSL化して外部からもアクセス可能にしようと思っています.
本記事に関して誤りの指摘や改良案,質問等ありましたらなんでもコメントください.閲覧ありがとうございました.