これまでNASとしてSynologyNASを利用してきましたが、勉強がてら自分でNAS or オンラインストレージを作ろうと思ったので、NextCloudを使って独自オンラインストレージの構築を目指します。
いきなり専用のサーバーを購入して構築すると、失敗したときに無駄な出費になってしまうので、まずは手元にあるWindows11のWSL2上でNextCloudを構築します。
この記事では、まず最も基本的なイメージ(HTTP通信+外部ストレージなし)を作っていきます。
NextCloud用のdocker-compose.yamlファイルを作成
公式リポジトリにサンプルがあるので、それをそのまま利用します。
GitHub:https://github.com/nextcloud/docker/tree/master/.examples/docker-compose/insecure/postgres/apache
version: '3'
services:
db:
image: postgres:alpine
restart: always
volumes:
- db:/var/lib/postgresql/data:Z
env_file:
- db.env
redis:
image: redis:alpine
restart: always
app:
image: nextcloud:apache
restart: always
ports:
- 127.0.0.1:8080:80
volumes:
- nextcloud:/var/www/html:z
environment:
- POSTGRES_HOST=db
- REDIS_HOST=redis
env_file:
- db.env
depends_on:
- db
- redis
cron:
image: nextcloud:apache
restart: always
volumes:
- nextcloud:/var/www/html:z
entrypoint: /cron.sh
depends_on:
- db
- redis
volumes:
db:
nextcloud:
app
で参照しているdb.env
ファイルを作成します。
POSTGRES_PASSWORD=<set your password>
POSTGRES_DB=nextcloud
POSTGRES_USER=nextcloud
用意するファイルは以上です。
NextCloudの起動
下記コマンドで、Dockerコンテナをバックグラウンドで実行します。
docker compose up -d
起動したら、ブラウザでhttp://localhost:8080/にアクセスします。下記の画面が表示されるので、管理者ユーザー名とパスワードを設定します。
その後、推奨アプリをインストールするか聞かれますが、必要ならばインストールしてください。スキップしても後から入れることは可能です。
ログイン後に設定のシステムに移動すると、利用されているDBやPHPのバージョンを確認できます。
docker-compose.yamlに記述した通り、PostgreSQLが利用されていることが確認できますね。
NextCloudの終了
起動したDockerコンテナは、下記コマンドで止めることが可能です。
docker compose down
一度設定した管理者ユーザーは、名前付きデータボリュームに保存されているので、次に起動してももう一度設定する必要はありません。
各種設定の説明
dcoker-compose.yamlは公式に用意されていたものをそのまま利用しました。このままだとそれぞれが何をしているかわからないので、個人的に調べたことを書きにまとめておこうかと思います。
DBの種類 PostgreSQL vs MariaDB
上記のコードではPostgreSQLを利用していますが、公式に推奨されているのはMariaDBです。もし公式に推奨されているDBを使いたい場合は、MariaDBを利用しているコードを利用してください。
どちらのDBを利用すべきかは、フォーラムでも議論が起きています(MariaDB or Postgresql)。
個人的にはPostgreSQLへの信頼度のほうが高いのでPostgreSQLを利用していきたいと思いますし、フォーラムで下記のように言及されている通り、個人利用レベルでは差はないと思っています。
If you are a home or small business user, you will hardly run into any serious issues with both databases, and if in doubt, just use what’s recommended. Performance differences between MariaDB and Postgresql are negligible on small instances.
Redisの使い道
Redisは有名なインメモリDBですが、何に使われているのでしょうか。
公式ドキュメントによると、メモリキャッシュによるパフォーマンス改善に利用されているとのことです(Memory caching)。そして、キャッシュの用途として下記二つが挙げられています。
- OPacache:PHPのコードを「バイトコード」としてキャッシュしておく。アクセレレーターのこと。
- memcache:データキャッシュのことで、読み込んだデータなどを一時的にメモリ上に保存すること
基本的なキャッシュ機能ですが、NextCloudではこれらを実現するためにRedisを利用しているみたいですね。設定方法について追々確認していこうと思います。
Dockerのデータボリュームについて
これはNextCloudと全く関係ないのですが、Dockerの機能としてデータボリュームというものがあります。(コンテナでデータを管理)
特に、docker-compose.yamlでの下記の部分で定義されるデータボリュームは、名前付きデータボリュームとも呼ばれ、下記の例ではnextcloudと呼ばれるデータボリュームが作成され、コンテナ内の/var/www/htmlにマウントされることになります。
volumes:
- nextcloud:/var/www/html:z
公式ドキュメントに記載がありますがデータボリュームは、コンテナ間で共有・再利用が可能でDockerイメージを変更しても変わらないデータディレクトリのことです。
ようするに、コンテナを落としても保持されるデータの保存場所ということですね。
まとめ
この記事では、ベースとなるNextCloudのDockerファイルを紹介しました。公式ドキュメント通りなので、とても簡単ですね。
今後、SSL化やRAIDとの接続などを実施していきたいと思います。