Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
29
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

RaspberryPi3とNextCloudでメディアサーバを構築する

はじめに

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のフォーマットはfdiskpartedでできますが,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
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化して外部からもアクセス可能にしようと思っています.

本記事に関して誤りの指摘や改良案,質問等ありましたらなんでもコメントください.閲覧ありがとうございました.

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
29
Help us understand the problem. What are the problem?