WSL上でNextCloudをDockerで実行する-HTTP通信-

これまで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を利用しているコードを利用してください。

サンプルコード:https://github.com/nextcloud/docker/blob/master/.examples/docker-compose/insecure/mariadb/apache/docker-compose.yml

どちらの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)。そして、キャッシュの用途として下記二つが挙げられています。

  1. OPacache:PHPのコードを「バイトコード」としてキャッシュしておく。アクセレレーターのこと。
  2. memcache:データキャッシュのことで、読み込んだデータなどを一時的にメモリ上に保存すること

基本的なキャッシュ機能ですが、NextCloudではこれらを実現するためにRedisを利用しているみたいですね。設定方法について追々確認していこうと思います。

Dockerのデータボリュームについて

これはNextCloudと全く関係ないのですが、Dockerの機能としてデータボリュームというものがあります。(コンテナでデータを管理

特に、docker-compose.yamlでの下記の部分で定義されるデータボリュームは、名前付きデータボリュームとも呼ばれ、下記の例ではnextcloudと呼ばれるデータボリュームが作成され、コンテナ内の/var/www/htmlにマウントされることになります。

    volumes:
      - nextcloud:/var/www/html:z

公式ドキュメントに記載がありますがデータボリュームは、コンテナ間で共有・再利用が可能でDockerイメージを変更しても変わらないデータディレクトリのことです。

ようするに、コンテナを落としても保持されるデータの保存場所ということですね。

まとめ

この記事では、ベースとなるNextCloudのDockerファイルを紹介しました。公式ドキュメント通りなので、とても簡単ですね。

今後、SSL化やRAIDとの接続などを実施していきたいと思います。

  • この記事を書いた人

たかさん

犬と暮らすクラウドエンジニア。GCPが好きだけど良く触るのはAWSとAzureです。

-NextCloud
-,