











前回は、Raspberry Pi OS を、4TBのRAID1 ボリュームから起動するように構成しました。何故か? と言えば自前のファイルサーバーその他諸々を構築したいから、ですね。
今回は主目的であるファイルサーバーを Nextcloud と Docker でお手軽に構築していきます。
Nextcloud とは?
オープンソースな Dropbox や OneDrive, Box のような高機能なストレージを実現する。Cloudと名前がついているものの、オンプレミスで会社や自宅にインストールすれば当然、クラウドストレージにはならない(当たり前)。
クライアントソフトとウェブインターフェースだけというのが主流のクラウドストレージサービスと異なり、webdavなど色々なプロトコルでファイルを共有できるのが魅力。また、使うかは分からないけれど、チャットやグループウェアといった機能も搭載されている。故障のリスクと扱える人材がいるなら、中小企業の IT システムの大半をお安く実現できそうな感じ。
複数のサーバーのアカウントを切り替えて使えるので、プロジェクトごとにサーバーを立てるといったことも可能。
Nextcloud のイマイチなところ
クライアントソフトの同期機能が、「コピー」だけなところ(2022年9月末現在・説明を読んだ限りでは)。大手クラウドストレージはオンデマンドな同期で、必要になるまでファイルをダウンロードしないのが主流になっていて、モバイル用途だと帯域逼迫などが起きないのでこの方がうれしい。SSDの寿命も気にしなくていいし。
説明が同期となっていますが、Nextcloud Client をインストールし、サーバー設定をする段階で「必要になるまでファイルをダウンロードしない」設定が選択できます。つまり全然イマイチじゃないです。
Docker のインストール
まだインストールしていなければ
sudo apt-get install docker.io
sudo usermod docker -aG $USER
sudo apt-get install docker-compose
sudo reboot
途中、何か聞かれたら y で。Docker はちゃんとやろうと(イメージ作ったり)すると多分とても大変なんですが、楽介のように楽をしたいだけの人からすると、色々なサーバーをお手軽に構築できる便利なツールという位置づけなので、こんな感じです。
Docker 本体と、構成を楽にしてくれる docker-compose をインストールし、現在のユーザーpi にdocker の起動許可を与えて rebootします。
Docker 上でNextcloud を動かす
再起動が終わったら、
mkdir nextcloud
cd nextcloud
として、ユーザー pi のホームディレクトリ /home/pi にnextcloud ディレクトリを作成、移動します。
Docker は仮想環境なので、root 権限が必要な特殊なディレクトリではなく、ホームディレクトリ内で作業を行います。
touch docker-compose.yml
nano docker-compose.yml
として、docker-compose.yml ファイルを作成、続けて nano で編集します。
docker-compose.yml は、Docker を起動するのに必要な、様々なオプションをまとめて記録して、(ただでさえ楽な)Docker によるサーバーの構築を楽にしようという仕組みです。
しかも、この docker-compose.yml はテンプレートが既に用意されているので、自分で書く必要がほとんどありません。
Docker Hub のNextcloudのページからコピペしてきて(開かなくてもいいように、以下にもコピペします)
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb:10.5
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- /home/pi/nextcloud/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
restart: always
ports:
- 8080:80
links:
- db
volumes:
- /home/pi/nextcloud/nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
このファイルの MYSQL_ROOT_PASSWORDと、MYSQL_PASSWORD(2箇所)を設定すれば動きます。PASSWORDなので、一応、ランダムで強固なものを設定した方がいいと思います。仮に、ルーター越しにサーバーを公開する予定があるなら、なおのことですが(仮想環境内に隔離されているので、大丈夫だとは思いますが)。
また、楽介はvolumes:… 以下にある設定を標準から少し変えています。
- db:/var/lib/mysql
(中略)
- nextcloud:/var/www/html
の2行を、
- /home/pi/nextcloud/db:/var/lib/mysql
- /home/pi/nextcloud/nextcloud:/var/www/html
と変更しています。
ここはバインドボリュームという設定で、仮想環境内のディレクトリを親のディレクトリにマウントします。こうしないと、データ類が再起動時に削除されてしまうためです。
: で挟んで前半が親の実環境、後半がDocker 内のパスとなっています。実環境を絶対パスにしたのは、実データ(特にnextcloudディレクトリ)がどっかにいかないようにです。
docker-compose.yml の記述が終わったら、保存してnano を閉じ、
docker-compose up -d
コマンドで Docker イメージを起動します。作業ディレクトリが docker-compose.yml と同じディレクトリでないと動作しないので注意します。
初回起動時には、記述された Docker を動かすためのダウンロードが行われるため、起動までに時間がかかります。
昔、Linuxをいじっていた楽介としては、設定やら依存関係やらきちんとしてmake とかしなくてもapt-get のようなパッケージマネージャーが、依存関係も含めてインストールしてくれるだけでも感動したのですが、この楽さは衝撃ですね……。いちいちダウンロードに行かなくてもいいので、ある意味ではGUIより楽です。ほぼスマホのアプリストアレベルですね。CLIなのに。
無事起動したら、ls コマンドでバインドボリュームがディレクトリ内に出来ていることを確認します。
Windows からブラウザでアクセスしてみる
Raspberry Pi OS インストール時にいじっていなければ、sshと同様にraspberrypi.localでNextcloud にアクセスできます。
ブラウザのアドレスバーに
http://raspberrypi.local:8080/
と入力し
こんな画面が表示されたら成功です。画面の指示通りに、管理者アカウントを作成しましょう。
Nextcloud の初期設定を行う
管理ユーザーを作成してログインすると、以下のように推奨アプリのインストールが推奨されます。