NextCloudを構築する(Docker使用)

既存のNextCloudが動作しなくなったのでインストールします。GMOグローバルサインの株主優待を使用して、wappyを契約していたのですが、システムの老朽化で新システムに移行することになりました。

新システムはwadaxとなり、NextCloudが動作しなくなりました。そこで、今回はOracle Cloudの仮想マシンでdockerを使用して、NextCloudをインストールします。新システムや、ほかのクラウドサービスでもインストールはできると思います。また、WindowsにインストールしたDockerでも可能です。Nextcloudは、オンラインストレージの作成と使用のためのクライアント・サーバ型のソフトウェアである。機能的にはDropboxに似ているが、オフプレミスのオンラインストレージサービスは提供しない。NextCloudの公式イメージを利用して作業します。

データベースが別の場所にある場合と、同じPCにどちらも設置する簡単セットアップの両方を説明します。

nextcloud - Official Image | Docker Hub
Nextcloud manual docker image

目標とするディレクトリ構造

今回の手順を通じて、ホスト側に以下のようなディレクトリ構造を作成することが目標です。

ファイルをホストにコピーする理由

NextCloudの設定やデータを確実に保存するために、ファイル自体をホストにコピーしておくことが重要です。これは、将来的にコンテナを削除したり再構築したりする際にも、データが安全に保持されるからです。特に、Docker Composeを使用する場合は、この手順が必要ないかもしれませんが、今回は手動での設定を行っているため、この方法を採用しています。

NextCloudコンテナの起動

まず、できるだけ少ないオプションでNextCloudコンテナを立ち上げます。このコンテナは、NextCloud関連のファイルを取得するためだけに使用します。そのため、後でこのコンテナは削除します。

docker run --name test -d nextcloud

コンテナ内のファイルを確認する

次に、コンテナにアクセスして、NextCloud関連のファイルがどこに保存されているかを確認します。

docker exec -ti test bash

次のディレクトリにファイルが存在することを確認します。

/var/www/html

ファイルの場所を確認したら、コンテナから退出します。

ホストへのファイルコピー

コンテナ内のファイルをホストにコピーしておかないと、データが失われる可能性があります。以前、ホストの空のディレクトリを、コンテナ内のデータがあるディレクトリとマウントした際、コンテナのデータが上書きされて消えてしまったことがありました。そのため、まずはホスト側にディレクトリを作成し、そこにNextCloud関連のファイルをコピーしておきます。

mkdir nextcloud
cd nextcloud
docker cp test:/var/www/html /root/nextcloud

ディレクトリを含んだコピーと修正

NextCloud関連のファイルをホストにコピーする際、ディレクトリ構造に注意しなければならないポイントがあります。ここでは、実際に間違った方法でコピーした後、その修正方法について説明します。

初めに行った間違い

まず、最初に試みたコピー方法では、html というディレクトリ全体がホストにコピーされました。これでは、目的のディレクトリ構造が正しく作成されず、ファイルが意図しない場所に配置されてしまいます。

docker cp test:/var/www/html /root/nextcloud

このコマンドの結果、/root/nextcloud ディレクトリ内に html というサブディレクトリが作成され、その中にNextCloud関連のファイルがコピーされました。これでは、期待していたディレクトリ構造とは異なる結果となります。

間違ったディレクトリ構造の例

最初に、誤った方法でコピーしてしまった場合のディレクトリ構造を示します。

この構造では、html ディレクトリが余計に含まれてしまっています。本来ならば、この html の内容が直接 nextcloud ディレクトリ内に配置されるべきです。

正しいディレクトリ構造

次に、正しいディレクトリ構造を示します。

この構造が最終的な目標であり、このようにファイルやディレクトリが配置されるように手順を進めていきます。

修正と正しいコピー方法

そこで、ディレクトリ構造を正しく保つために、html ディレクトリを削除し、改めて次のコマンドを使用してファイルをコピーします。このとき、重要なポイントは、ディレクトリの最後にピリオド(.)を付けることです。このピリオドは、html ディレクトリの内容(サブディレクトリやファイル)だけをコピーするための指示になります。

rm -rf html
docker cp test:/var/www/html/. /root/nextcloud

このコマンドによって、/root/nextcloud ディレクトリに html の内容が直接コピーされ、期待通りのディレクトリ構造が得られます。

コンテナの停止と削除

ファイルのコピーが完了したら、使用したコンテナを停止し、削除します。

docker stop test
docker rm test

Nextcloudのインストールでは、データベースに存在するもの以外のすべてのデータ (アップロードしたファイルなど) は、無名のdocker volumeに保存されます。場所は/var/lib/docker/volumes/。わかりやすくするため、指定してコマンドを入力します。

docker run -d \
--name nc \
-p 5050:80 \
-v /root/nextcloud:/var/www/html \
nextcloud

Nextcloudのインストールにおけるデータの保存先

NextcloudをDockerでインストールする際、特に注意すべき点は、データベース以外のすべてのデータ(例えば、アップロードされたファイルや設定ファイルなど)がDockerのボリュームに保存されることです。ボリュームとは、コンテナの外部にデータを保存するための仕組みで、コンテナが削除されてもデータが失われないようにするために使います。

データの保存場所

通常、NextcloudのデータはDockerの無名のボリュームに保存されます。これらのボリュームは、デフォルトで次の場所に作成されます。

/var/lib/docker/volumes/

このディレクトリには、Dockerが管理するすべてのボリュームが格納されています。しかし、特定のデータをどこに保存するかを明示的に指定することで、管理がしやすくなります。

データの保存場所を指定してコンテナを実行する

Nextcloudのインストールで、アップロードされたファイルなどのデータがどこに保存されるかを指定するために、docker run コマンドを使用してコンテナを立ち上げます。以下のコマンドは、Nextcloudのデータをホストの指定されたディレクトリ(/root/nextcloud)に保存するように設定します。

docker run -d \
--name nc \
-p 5050:80 \
-v /root/nextcloud:/var/www/html \
nextcloud

コマンドの説明

  • -d: バックグラウンドでコンテナを実行します。
  • --name nc: コンテナの名前を nc に指定します。
  • -p 5050:80: コンテナの80番ポート(HTTP)をホストの5050番ポートに割り当てます。これにより、ホストのhttp://IPアドレス:5050でNextcloudにアクセスできるようになります。
  • -v /root/nextcloud:/var/www/html: ホストの/root/nextcloudディレクトリを、コンテナ内の/var/www/htmlディレクトリにマウントします。これにより、Nextcloudのウェブファイルがホストに保存され、コンテナを削除してもデータが失われません。

データベースの場所について

この例では、データベースに関する設定は含まれていません。理由は、データベースが別の場所に存在しているためです。データベースの設定は、Nextcloudの初期設定時に指定することができ、その時点で必要な情報を入力すれば接続が可能です。

ポートのトラフィック許可設定とOracle Cloudのイングレスルール

NextcloudをDockerで動作させる際、指定したポート番号(この場合はポート5050)が正しく動作するように、必要なネットワーク設定を行う必要があります。特に、ファイアウォールの設定とクラウドサービスのネットワークルールの設定は重要です。

ファイアウォール設定

まず、ホストサーバーで使用されているポート5050に対して、外部からのアクセスを許可する必要があります。Linuxシステムでは、UFW(Uncomplicated Firewall)という簡単に設定できるファイアウォールが一般的に使われています。

  1. 現在のファイアウォールの状態を確認する
    最初に、現在のファイアウォール設定を確認して、ポートがどのように設定されているかを把握します。
    ufw status
  2. ポート5050のトラフィックを許可する
    次に、ポート5050へのトラフィックを許可します。これにより、外部からNextcloudにアクセスできるようになります。
    ufw allow 5050/tcp

この設定を行うことで、NextcloudのウェブインターフェースにホストのIPアドレスとポート番号を使ってアクセスできるようになります。

Oracle Cloudのイングレスルール設定

もしOracle Cloud上でサーバーをホストしている場合、上記のファイアウォール設定だけでは不十分です。Oracle Cloudのネットワーク設定(セキュリティリスト)でも、ポート5050へのアクセスを許可する必要があります。

  1. Oracle Cloudコンソールにアクセスする
    Oracle Cloudの管理コンソールにログインし、対象のインスタンスを選択します。
  2. セキュリティリストにルールを追加する
    「セキュリティリスト」セクションに移動し、ポート5050に対する「イングレスルール」を追加します。こうすることで、指定されたポートに対して外部からのアクセスが可能になります。

データベース設定

Nextcloudは、データベースを使用してユーザー情報や設定、その他のデータを管理します。今回はデータベースの作成を省略していますが、以下のことを確認しておく必要があります。

  1. データベースの事前作成
    Nextcloudで使用するデータベースを、MySQLやMariaDBなどのRDBMS(リレーショナルデータベース管理システム)で事前に作成しておく必要があります。
  2. 外部接続の設定
    データベースが外部接続を許可していることを確認します。これで、Nextcloudコンテナがデータベースにアクセスできるようになります。

Nextcloudへのアクセス

これらの設定が完了したら、ウェブブラウザで以下のURLにアクセスして、Nextcloudのインストール画面が表示されることを確認してください。

http://<
あなたのIPアドレス>:5050/

ここからNextcloudの初期設定を行い、データベース情報などを入力してセットアップを完了させます。

しかし、エラーが発生しました。この解決方法は次に説明します。

Can’t write into config directory!
This can usually be fixed by giving the webserver write access to the config directory.

エラーの対処: ファイルの書き込み権限の問題

Nextcloudをセットアップしていると、次のようなエラーが発生することがあります。

エラーメッセージ:

Can't write into config directory!
This can usually be fixed by giving the webserver write access to the config directory.

このエラーは、ウェブサーバー(ApacheやNginxなど)がNextcloudの設定ファイルを格納するディレクトリに書き込み権限を持っていない場合に発生します。ここでは、この問題の解決方法について説明します。

問題の原因

このエラーは、コンテナ内のファイルをホストにコピーした際に、ファイルやディレクトリの所有権がホスト側のrootユーザーに変更されてしまったために発生しています。rootユーザーはシステム管理者の権限を持っていますが、ウェブサーバーは通常、www-dataというユーザーアカウントで動作しており、このユーザーがファイルにアクセスできないためにエラーが起こります。

解決方法

この問題を解決するためには、Nextcloudのディレクトリ内にあるすべてのファイルとサブディレクトリの所有権をwww-dataユーザーに変更する必要があります。これにより、ウェブサーバーがファイルに書き込めるようになります。

コマンド:

chown -R www-data:www-data /root/nextcloud
  • chownコマンドはファイルやディレクトリの所有者を変更します。
  • -Rオプションは、指定したディレクトリ内のすべてのファイルとサブディレクトリに対してこの変更を適用します。
  • www-data:www-data は、所有者と所有グループをwww-dataに変更することを意味します。
  • /root/nextcloudは、Nextcloudのファイルが保存されているディレクトリのパスです。

このコマンドを実行することで、ウェブサーバーがNextcloudの設定ファイルにアクセスし、書き込みができるようになります。

エラー解消後の手順

所有権を変更した後、ブラウザで再度Nextcloudのインストールページにアクセスしてみてください。エラーが解消されていれば、正常に動作するはずです。

次に、MySQLやMariaDBなどのデータベースを選択し、必要な項目を入力してセットアップを続行します。この手順を経て、Nextcloudのインストールが完了します。

NextCloudの外部連携機能

Nextcloudは、以下のような外部サービスと連携することができます。

  • DropBox: ファイルをクラウドにバックアップし、共有するために使用されます。
  • GoogleDrive: Googleのクラウドストレージサービスとの連携が可能です。
  • CloudFlare: セキュリティやパフォーマンス向上のために使用することができます。

これらの連携機能を利用することで、Nextcloudをさらに便利に活用することが可能になります。

もし、データベースも同時にコンテナとして立ち上げたい場合、簡単セットアップをお勧めします。

Docker Composeを使ったNextcloudの簡単セットアップガイド

ここでは、Docker Composeを使ってNextcloudを簡単にセットアップする方法を紹介します。データベースを別途用意する必要はありません。まず、必要なファイルを準備し、その後、Docker Composeを使ってサービスを起動します。リンク先のGitHubリポジトリ(https://github.com/nextcloud/docker)は、Nextcloudの公式Dockerイメージをホストしています。ただし、このリポジトリにはdocker-compose.ymlファイルが含まれていません。READMEに記載されているdocker-composeファイルは、参考用の例として提供されているだけで、リポジトリのコード内には含まれていないようです。

クローンの必要性について

もしdocker-composeを使ってセットアップをする場合、リポジトリをクローンしても目的のdocker-compose.ymlファイルは含まれていないため、そのまま使えるわけではありません。したがって、クローンを作成する必要はないかもしれません。

Docker Compose vs Docker Run

このリポジトリは、docker runを使用してNextcloudをセットアップする手順が主に想定されています。そのため、クローンを作成した後にdocker-composeを使用したい場合は、READMEに記載されているdocker-compose.ymlの内容を自分で作成する必要があります。

1. Docker Composeの準備

NextcloudとMariaDBをセットアップするために、docker-compose.ymlファイルを作成します。このファイルには、Nextcloudとデータベースの設定が含まれています。

まず、以下の内容をコピーして、テキストエディタで新しいファイルを作成し、docker-compose.ymlという名前で保存します。

提案されたdocker-compose.ymlファイルについて

次に、READMEに記載されているdocker-compose.ymlファイルの内容を説明します。

version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - 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:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

このdocker-compose.ymlファイルは、NextcloudとMariaDBをセットアップするための簡単な構成を提供しています。以下に各セクションの説明を追加します。

app:
Nextcloudアプリケーションサービスです。Nextcloudのコードとデータはnextcloudボリュームに保存されます。

version: ‘2’
Docker Composeのバージョン指定です。

volumes:
データを永続化するためのボリュームを定義しています。nextcloudはNextcloudのデータを保存し、dbはMariaDBのデータを保存します。

services:
アプリケーションを構成する各サービスを定義しています。

db:
MariaDBを使用したデータベースサービスです。データベースデータはdbボリュームに保存されます。

2. Docker Composeでサービスを起動

ファイルを作成したら、次にDocker Composeを使ってサービスを起動します。ターミナル(またはコマンドプロンプト)を開き、docker-compose.ymlファイルがあるディレクトリに移動して、以下のコマンドを実行します。

docker-compose up -d

このコマンドで、NextcloudとMariaDBの両方のサービスがバックグラウンドで起動します。

3. Nextcloudへのアクセス

サービスが起動したら、ウェブブラウザを開いて、以下のURLにアクセスしてください。

http://localhost:8080/

ここで、Nextcloudのセットアップを行います。画面の指示に従ってデータベース情報などを入力し、設定を完了させましょう。

タイトルとURLをコピーしました