Warning: Undefined array key "options" in /home/c1397404/public_html/ict-worker.com/wp-content/plugins/elementor-pro/modules/theme-builder/widgets/site-logo.php on line 192

Raspberry Pi OS上に docker でNextcloudを構築する

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

前回は、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 の初期設定を行う

管理ユーザーを作成してログインすると、以下のように推奨アプリのインストールが推奨されます。