【Nextcloud(Docker)】初心者が自宅ファイルサーバを建てるためにやったこと


はじめに

ファイルサーバを建てるにあたって、割と簡単に実現できそうで、かなり便利そうなNextcloudを採用することにしました。
ただし、手動インストール作業で手間取ったり、次回建てるときに手順書通りに進まなかったりするのが嫌なので、Docker環境にこだわりました。
ネット上に確認できる情報では不満・不十分な部分があったので、自分なりに改良しています。

なお、試しに使ってみたかっただけなので、最低限の設定にしてあります。

手順

  1. Docker環境でNextcloudを建てる
  2. GUIで各種設定をする
  3. ポート開放をする
  4. クライアントソフトを導入する。

1. Docker環境でNextcloudを建てる

以下の2ファイルを同一ディレクトリに用意します。

docker-compose
version: "3"

services:
  db:
    image: mariadb:10.5
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - type: volume
        source: db
        target: /var/lib/mysql
    env_file:
      - ./db.env

  app:
    image: nextcloud:22.2.0-apache
    restart: unless-stopped
    ports:
      - 8080:80
    volumes:
      - type: volume
        source: app
        target: /var/www/html
    environment:
      - MYSQL_HOST=db
    env_file:
      - ./db.env
    depends_on:
      - db

volumes:
  db:
    name: nextcloud_db
  app:
    name: nextcloud_app

ボリューム名指定が重要です。
未指定だと、親ディレクトリ名が含まれたボリュームが作成されます。
そのため、親ディレクトリ名を変えるだけで過去のデータが引き継げなくなってしまうため、指定しておくとよいでしょう。

また、個人的にはバインドマウントを利用したかったのですが、少なくともWindows環境においてレスポンスが著しく悪化したためボリュームマウントとしました。

db.env
MYSQL_ROOT_PASSWORD=password
MYSQL_USER=nextcloud
MYSQL_PASSWORD=password
MYSQL_DATABASE=nextcloud
PHP_UPLOAD_LIMIT=2048M
NEXTCLOUD_TRUSTED_DOMAINS=「ポート開放する場合はサーバアドレスを入力」

デフォルトでは、1ファイルあたりの最大アップロードサイズが512MBです。
PHP_UPLOAD_LIMIT を指定することで、これを2048MBまで拡張します。
作成されたコンテナの /usr/local/etc/php/conf.d/nextcloud.ini を見てみると、 PHP_UPLOAD_LIMIT という環境変数を参照していたことが確認できたため、このようにしました。
公式ドキュメントや他サイトで確認したわけではないので、他にいい方法があるのかもしれませんが、これで正常に動作はしています。

2. GUIで各種設定をする。

しばらく待つと、 http://localhost:8080 にて次のような画面が表示されます。
適当なユーザ名とパスワードで管理者アカウントを作成します。

あとはユーザアカウントを作成するなど、その他自由に設定していきます。

3. ポート開放をする

最も厄介だった作業です。

我が家は集合住宅向けのプロバイダ契約であって、グローバルなIPv4アドレスが割り当てられていませんでした。
また、我が家の契約ではIPv6 over IPv4でVPNが利用できないようで、VPNも断念しました。
仕方がないので、IPv6のポート開放で妥協しました。
幸いにも、自分の周りのネットワークはすべてIPv6に対応しているので、問題なくファイル共有できそうですが、しかし気軽に他人とリンクによるファイル共有などはしにくい欠点は残ります。

ポート開放手順はおま環なので省略します。
ネットワークの知識が全く無くて困っているのなら、設定するのが難しい上に危ない自体になりかねないので、一旦ローカルで遊ぶに留めるのが吉だろうと思います。

4. クライアントソフトを導入する

NextcloudにはPCやモバイル向けのクライアントソフトウェアがあり、これらを導入することで、OneDriveなどのクラウドストレージなどと変わらない利便性を享受できます。

さいごに

サーバ・ネットワーク周りに関してはズブの素人でしたが、今回の作業を通していろいろと勉強になりました。

直近の目標は、RAIDを組んで冗長化するなど、ファイルサーバとしての信頼性を高めていきたいと思います。

参考文献

「Nextcloud Docker-Compose」などと検索して出てくる記事たくさん