ラズパイのフォーラムはじめました

NextcloudとRaspberry Pi 3B+で作る自分専用クラウド

NextCloudの画面 作ってみた!
この記事は約20分で読めます。

ownCloudから派生したNextCloudに挑戦してみます。これはスマホでも皆が利用しているオンラインストレージを構築できるアプリケーションです。特にphotoサービスが多いですね。

今よりもラズパイに詳しく無い頃、ownCloudをインストール構築してみたことがあります。その頃はオープンソースのコミュニティ版しかありませんでした。

現在、ownCloudはサブスクリプション版のイメージが強くなっています。調べてみると、どうやらNextCloudはownCloudのメイン開発者が作り運営しているため、完成度が高くNextCloudの方が人気みたいです。こちらはオープンソースのコミュニティ版しかありません。助かります!

ただ、ネットワーク関係は見えないだけに理解が難しく、用語も概念も慣れないと全く意味不明です。私も昔々に資格を取ったことがある身として、それなりに理解していても取っつきにくい物です。

ネットにはいくつかインストール記事はあるものの、少し古かったので当ブログのコンセプトとして「簡単」「分かり易い」をモットーにまとめてみました。・・・そうは言っても長い。

部分的でも参考にしてみてください。

スポンサーリンク

やりたいこと

NextCloudはAppleのiCloudやGoogleドライブ、Amazon Driveなどと同じようなクラウドになります。それぞれ他のクラウドですと無料範囲に制限があります。今回、NextCloud用に外付けUSBハードディスク(1TB)を用意しました。こちらをext4形式にフォーマットしてクラウドのデータ置き場に使用します。ハードディスクの容量によっては自前のクラウド用としては大きな容量を確保できます。

主に写真画像と音楽ファイルを置きます。自宅Wi-Fi内に入ったら自動的に手持ちの画像をバックアップできるようにしたいと思います。SSL接続とダイナミックDNSを利用して、外出先からも閲覧や取り出せるようにしていきます。

  1. 写真画像と音楽ファイル置き場
  2. 自動でスマホから写真を取り出し保存(差分アップ)
  3. 外部からも利用したい(SSL接続)

この記事では一先ずNextCloudの稼働を目指します。

今回の環境と準備

最新のRaspberry Pi 3B+で構築したいところですが、ノーマル3Bしか余っていなかったのでRaspberry Pi 3Bで紹介します。ネットワークの速度の関係でどちらにしても有線LAN接続をオススメします。

今回のOSと構築環境

  • Raspbian Stretch(2019-04-08)
  • Apache2
  • PHP 7.0.33
  • MariaDB 10.3.15
  • NextCloud 15.0.0

※最新のNextCloud16はPHP7.1が必要です。Raspbianでは最新に対応しているPHPは7.0です。そのため、古いNextCloud15をインストールします。NextCloud16だとPHPが対応していないのでハマります。

  今回利用したパーツ一覧
Raspberry Pi 3B基板写真 Raspberry Pi 3B
team16g_fix2 microSDカード16GB
外付けハードディスクケースキット 外付けハードディスク
3.5型HDDケース SATA接続

なお、Raspberry Piにはモニターとキーボード&マウスを繋いで作業の方が無難です。私はSSH接続とVNCを利用して作業しました。

Raspbianまではインストールさせセットアップ済みとします。今回は分かり易いようにデスクトップ版を利用しました。実際にはデスクトップでの操作はないので、Raspbain Liteが望ましいでしょう。

Raspbianのセットアップはこちらを参考にしてください。

Raspberry Pi 3bのインストールと初期設定[2018年 Raspbian Stretch With Desktop]

セットアップされたRaspbianのパッケージの更新も済ませておきましょう。

sudo apt-get update && sudo apt-get -y upgrade

※今回アップグレードでchromiumブラウザのアップデートができないエラーに遭遇しました。もしもアップグレードできない場合は、オプションを付けて実行します。

sudo apt-get upgrade --fix-missing

外付けハードディスクのフォーマット

同じく先に外付けハードディスクもフォーマットして準備します。

外付けハードディスクはケースのみもあり、別にハードディスクを購入するか、古いハードディスクの使い回しに便利です。
2,000円前後から購入でき、ハードディスクが余っているならオススメです。
ケース自体がいくつまでのHDD容量に対応しているかと、USB3.0と2.0かなどに気をつけてください。ちなみにRaspberry Pi は未だにUSB2.0までしか対応していません。

4TBも安くなりました!

Raspbianに繋いでdfコマンドで接続先を確認します。

df

dfコマンド結果

私の場合は/dev/sda1に繋がっていました。それぞれdfコマンドで調べて読み替えてください。

フォーマットにはコマンドベースでfdisk、partedがあります。fdiskは2TBまでらしいので、それ以上の場合はpartedを利用してください。

大容量のHDDが普通になったため他のサイトでもpartedの紹介になっています。今回は1TBのHDDですが、partedを使いました。

sudo parted /dev/sda1
(parted)

とコマンドプロンプトが変わります。続けて、3つほど設定します。太字をタイプします。

(parted) mklabel

New disk label type? gpt
Warning: The existing disk label on /dev/sda1 will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes

(parted) mkpart

Partition name? []? nextcloud
File system type? [ext2]? ext4
Start? 0%
End? 100%

(parted) print

Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 1000GB 1000GB ext4 nextcloud

(parted) quit

Information: You may need to update /etc/fstab.

partedから抜けるにはquitです。途中のprintは出来たのかを確認するためです。最後のメッセージは/etc/fstabに追記するべきとあります。後で設定します。

これでパーティショニングが終わりました。続けてフォーマットします。

フォーマット形式はLinux用のext4です。

sudo mkfs.ext4 /dev/sda1

mke2fs 1.43.4 (31-Jan-2017)
Found a gpt partition table in /dev/sda1
Proceed anyway? (y,N) y

少し時間がかかってフォーマットが終了すると結果が文字で出され、UUIDも表示されます。後ほどfstabへの記述で使用します。コピペしておくか、後ほどblkidコマンドで調べます。

マウントする

このマウントという作業がLinuxでは取っつきにくいですね・・・。繋げるだけではダメでして、接続させる場所(フォルダ)を指定するという作業です。

一般的には/medea/または/mnt/にマウントします。

パイグリーン
パイグリーン

・・・だったら決まっていた方が・・・とWindowsユーザーは思うでしょう。

パイブラック
パイブラック

まぁ、束縛と自由みたいな感じ??

マウントする場所にフォルダを作ります。(例:hdd1t)

sudo mkdir /media/hdd1t

マウントします。

sudo mount /dev/sda1 /media/hdd1t

これでデスクトップにもHDDのアイコンが表示されるハズです。

fstabへ記入

先程のメッセージに「Information: You may need to update /etc/fstab.」とありました。自動的にマウントさせるために控えたUUIDを使ってfstabの既に記述がある下に追記します。

UUIDを調べるにはblkidコマンド(先にマウントしてある必要がありますね)

sudo blkid -o list

fstabを開きます。

sudo nano /etc/fstab

書き込む内容は以下

# nextcloud hdd
UUID=XXXXXXXXXXXXX /media/hdd1t ext4 defaults,nofail 0 0

fstabは慎重におこなってください。間違えるとRaspbianが立ち上がりません!

現在のRaspbianでは説明は省きますが、nofailを付けないとコケます。(忘れてコケました!)調べたところRaspbian jessieの頃からみたい。ちなみにnoatimeでコケました・・・。autoでも他の記述が間違ってエラーとなった場合はダメっぽい??ので、nofailにしておきましょう。

GPartedでもOK

パーティショニングやフォーマットは、GUIアプリケーションのGPartedでも可能です。GPartedは最初から入っていませんので、メインメニューの設定→Add/Remove Softwareからインストールしてみてください。

GPartedのインストール指定

fstabに記述できたら試しにここで一旦、再起動します。

sudo reoot

立ち上がってデスクトップにある外付けハードディスクのアイコンから覗いてみてください。

マウントされた外付けハードディスクのツリー

このようになっていればOKです。

NextCloudインストール前——LAMP環境構築

NextCloudはサーバーで動作させます。そのためサーバーになるように、ApacheとPHPを構築し、データベースにMariaDBもセットアップする必要があります。

LAMP環境とは? 以下の4つの機能を有する頭文字を取ったものです。

  • Linux
  • Apache
  • MariaDB(MySQL)
  • PHP(またはPerl、PythonのP)

これ以後、ターミナルでの作業は全てRaspberry Pi 3B側です。

インストールは公式ページに詳しく載っています。しかし、Raspberry Pi用ではありませんので、必要な箇所を読み取る必要があります。

Installation on Linux — Nextcloud latest Administration Manual latest documentation

Apache2のインストール

先ずはWebサーバソフトウェアであるApacheをインストール

sudo apt-get install apache2

Apacheのインストール

PHPのインストール

サーバー用のプログラミング言語であるPHPをインストールします。

sudo apt-get install php7.0

後でPHPの関係ファイルが足りないとエラーが出ます。予めインストールしておきます。

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

Apacheの再起動

sudo service apache2 restart

ここで一旦、Apacheのサービスだけを再起動します。

現在はこっちのコマンドかな。

sudo systemctl restart appache2

Apacheのサービスをリスタートした時点で、Chromiumブラウザにlocalhostまたはホスト名を叩き、Apacheのデフォルトページが表示されていれば成功です。

以下の例では「mynextcloud.local」というホスト名で接続しています。

Apacheのデフォルトページ

このようにデフォルトページが表示されれば、Apacheが正常に動作していることを確認できます。

NextCloudのインストール

少し前後します。LAMP環境のデータベースをインストールする前に、NextCloud本体をダウンロードし展開します。

データベースを作ってからでも良いのですが、ちょっと手間がかかるので、先にサクッとNextCloudと権限の付与を済ませます。

ダウンロードする場所はApacheのweb公開フォルダです。

Apacheのweb公開フォルダへ移動

cd /var/www/html

移動したhtmlのフォルダにダウンロードします。

ダウンロード

公式のダウンロードリンクページこちらから確認できます。

NextCloudのダウンロードリンク

冒頭でもお伝えしたとおり、今回はNextCloud15を使います。

ダウンロードはtarballとzipがあります。今回は.tar.bz2形式を利用しました。

先程の/var/www/htmlにコマンドでダウンロードをします。仮にGUIでブラウザからファイルをクリックしてダウンロードした場合は、/var/www/htmlにコピーすれば同じです。(コピーはcpコマンド)

ここではcurlでダウンロード

sudo curl -O https://download.nextcloud.com/server/releases/nextcloud-15.0.0.tar.bz2

オプション-Oは大文字オーです。ファイルとして保存します。

他にもwget コマンドでもOKです。

sudo wget https://download.nextcloud.com/server/releases/nextcloud-15.0.0.tar.bz2

解凍

ダウンロードしたtar.bz2ファイルを解凍します。

sudo tar -xf nextcloud-15.0.0.tar.bz2

データフォルダの作成(これはデフォルトです)

/var/www/html/nextcloudフォルダへ移動します。

cd nextcloud
sudo mkdir data

後で実際に保存・運用するファイルは外付けハードディスクの特定フォルダにする設定をしますが、一先ずデフォルトのフォルダをmicroSDカード内に作っておきます。

権限の追加

/var/www/html/nextcloud/dataをApacheからも読み込み・書き込みができるように権限を付与します。

www-dataはApacheのデフォルトのユーザーです。コロン後がデフォルトグループです。

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

次も権限です。

外付けハードディスクに対する設定ファイルを作ります。

(.ocdataというのは多分、ownCloudのocだと思う)touchコマンドで空のファイルを作ります。

sudo chown www-data:www-data /media/hdd1t
sudo touch /media/hdd1t/.ocdata
sudo chown www-data:www-data /media/hdd1t/.ocdata

これで設定ファイル、データ保存場所(外付けハードディスク)のフォルダに対する権限もできました。準備完了です。

MariaDBのインストール

mariadbのロゴ

やっとデータベースをインストールします。MariaDB(MySQL)を使うようです。

sudo apt-get install mariadb-client mariadb-server

設定のためMariaDBへ入ります。・・・が!

これまた厄介なことに、このままではrootで誰でも入れてしまいます。バグ?? 個人利用で無視できても、その後の初期設定でログインエラーが出てどうにもなりません。

面倒ですが回避策を施してからMariaDBの初期設定をおこないます。

root関連の回避策

これをやらないと恐らく進みません。

原因は、rootにunix_socketプラグインが設定されていることが問題らしいです。これを先ずは外します。

mysqlへ入ります。

sudo mysql -u root -p

Enter password:と訊かれます。が、まだroot用のパスワードがありませんので、そのままリターンで進みます。

すると以下のようなプロンプトに変わります。

MariaDB [(none)]>

試しにユーザー一覧を見てください。

MariaDB [(none)]> select Host, User, Password from mysql.user;

テキストベースで表示される表の右側にPluginの項目があります。そこにunix_socketってあると思います。こいつのセットを外します。

データベースを選んで

MariaDB [(none)]> use mysql;

早速外します。

MariaDB [(mysql)]> UPDATE user SET plugin='' WHERE User='root';

保存します。

MariaDB [(mysql)]> flush privileges;

これで一旦抜けます。

MariaDB [(mysql)]> quit

抜けたら、通常のターミナルに戻るので、質問形式(ウィザード)のに答えて行くセキュアインストールをします。

sudo mysql_secure_installation

Enter current password for root (enter for none):  ここはまだ設定していないのでENTERで飛ばす
Set root password? [Y/n]  当然Yesでパスワードを設定する
Remove anonymous users? [Y/n]  Yesでアノニマスを削除します
Disallow root login remotely? [Y/n] Yesでリモートからログインを不許可
Remove test database and access to it? [Y/n] Yesでテストデータベースを削除
Reload privilege tables now? [Y/n]  Yesで更新のためリロード

簡単に言えば、全部YESで問題ありません。これでroot用のパスワードも設定できました。

再度、入り直します。

sudo mysql -u root -p

今度はパスワードを訊かれたらウィザード形式で設定したものを入力し入れます。

データベースの作成

もう一度データベースを選びます。

MariaDB [(none)]> use mysql;

次にデータベースの作成

MariaDB [(mysql)]> CREATE DATABASE データベース名;

例:CREATE DATABASE mynextcloud;

DBユーザーの作成

MariaDB [(mysql)]> CREATE USER 'dbpi'@'localhost' IDENTIFIED BY 'パスワード';

例:CREATE USER ‘ユーザー名’@’ホスト名’ IDENTIFIED BY ‘パスワード’;

シングルコーテーションで括るのは、ユーザー名とホスト名とパスワードで、@は入れません。

権限の付与

作ったユーザにDB管理の権限を付与

MariaDB [(mysql)]> GRANT ALL PRIVILEGES ON mynextcloud.* to 'dbpi'@'localhost';

ここでもやはりシングルコーテーションを付けてください。

最後に適用し終了

MariaDB [(mysql)]> FLUSH PRIVILEGES;
MariaDB [(mysql)]> quit

これでDBの準備は終了です。お疲れ様でした。

NextCloudの設定

いよいよ、NextCloudの設定です。

chromiumブラウザからnextcloudへ入ります。

http://localhost/nextcloud

冒頭にも書いたように、新しいNextcloud16は、PHP7.1が必要です。RaspbianでインストールできるPHPのバージョンはPHP7.033なので、動きませんでした。

ここまででNextCloudの利用は可能です。(この状態はWi-Fi内からしかアクセスできません)

ログイン画面

成功すると、このログイン画面が出てきます。初期設定をすれば完了なのですけど、ここでもエラーが出ることもあるでしょう。

原因の一つとして、スペルミスや項目への記述が間違っていることが大半です。何度も確認すれば大丈夫です。

もしもこの画面すら出てこない場合は、PHPの必須バージョン違いか、必要なPHPのモジュールがインストールされていません。初めの方に戻ってみてください。

nextcloudログイン画面

上から順番に説明します。

管理者アカウント

ユーザー名とパスワード 新たに考えてください。

データフォルダー 外付けハードディスクの場所です。

データベースはそのままMariaDBのままでOKです。

データベースのユーザー名とパスワード mysqlコマンドで入力したものです(画面だとdb-pi)

データベース名 これもmysqlコマンドで入力したものです(画面だとmynextcloud)

ホスト名 localhost(またはIPアドレス)

※ポート番号を付ける必要はありません。

MySQLで設定したのは

例:CREATE USER ‘ユーザー名’@’localhost’ IDENTIFIED BY ‘パスワード’;

このような書式でした。ここのユーザー名とホスト名とパスワードを入れます。

なお、一先ず自宅内からならば、ホスト名はlocalhostで作成してください。(コマンドでも初期設定でも)

信頼するドメイン設定(NextCloud)

localhostが設定されていれば、自宅Wi-Fi内からアクセス可能です。しかし、上手くいかない場合(ブラウザにIPアドレスを指定してログイン)は信頼するドメインに追加してあげる必要があります。

設定するconfig.php

sudo nano /var/www/html/nextcloud/config/config.php

最初の方にあるrusted_domainsを探してください。恐らく0=>の1行しかないと思います。その下に1=>と追加してください。

 'trusted_domains' => 
array (
0 => 'mynextcloud.local',
1 => 'localhost',
2 => '192.168.0.%',
),

上記の例では、192.168.0.%がセグメント0の全てです。

% はSQLでワイルドカードとして使われます。

今後

ここまでの手順でとりあえず動作します。サンプルが表示されます。操作を確かめましょう。

この後、iOSアプリも試しましたが問題ありませんでした。

ios版nextcloudの画面

NextCloudのユーザーインターフェイスは使いやすいですね。

NextCloudの画面

ちょっと長くなってしまったので、次の機会に希望の機能を設定していきたいと思います。

  • ルーターのポート開放とルーティング
  • duckdnsのような独自固定ドメインの利用
  • ファイル書込の権限などの設定

これらが主に必要になります。転送速度は決して速くありません。しかし、写真画像やドキュメント、MP3くらいはあまりストレスを感じません。

個人的にDropBOXなどで利用しているファイルをこちらのNextCloudへ移行させ、どのように使っていくのか模索中です。

sql文や権限の付与など、調べても難しい内容だったり、NextCloudで検索にかかるのが数年前の古い情報だったりすると思います。

今回のNextCloudはバージョン15です。恐らく最新版だと15でのバグ修正もしてあると思います。しかし、Raspbianが対応していません。そもそもPHPも含め環境も異なります。この記事の手順はあくまでもRaspbianStretchとNextCloud15の環境での内容になります。ご理解ください。

あと、順番にも気を遣いました。前後すると上手く行かないこともあるでしょう。

最後に記事中のコマンドなどに間違いなどはあるかも知れません。(何度も見直しましたが・・・)その際はコメント欄やお問い合わせでご指摘ください。よろしくお願いします。

to be continued…

公式:https://nextcloud.com

アプリ:https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8

wiki:https://ja.wikipedia.org/wiki/Nextcloud

MariaDB:https://mariadb.org

コメント