NextcloudをDockerで構築する手順

公開日:2018/08/20 更新日:2018/08/20
NextcloudをDockerで構築する手順のサムネイル

はじめに

プライベートなDropbox環境を構築することができるOwnCloudですが、最近OwnCloud社のCEOが交代し、元CEOがよりオープンなOwnCloudとしてNextcloudの開発を進めています。Nextcloudについては最近知りましたが、非常に高機能で驚きました。例えば、WebRTCによる通話、チャット、画面共有機能、タスク管理機能などが追加され利用できるようになっています。社内用のコミュニケーションプラットフォームとしてなど色々な使い方ができそうです。 このNextcloudを実際に触って使ってみるために、Dockerを使って環境構築したのでその手順をメモします。なお、すでにDockerを触ったことがあれば数分で自分のローカル環境にNextcloudを構築できます。

2020/1/8 追記

以下にNextcloudのSnap版をNginxと一緒に使う構成の構築手順をまとめました。

www.virment.com

Nextcloudは自前でGoogleドライブのようなサービスを構築できるオープンソースソフトウェアです。この記事では、Nginxをリバースプロキシとして使いNextcloudを動作させる環境の構築手順をまとめます。

前提となる環境

私はUbuntu18.04上で構築しました。DockerやDocker Composeの実行環境はすでに構築済とします。

手順

手順自体は公式サイトに従いました。 nextcloud/docker - GitHub

適当なディレクトリを作成

まず、Nextcloudのコンテナを格納する用の適当なディレクトリを作成します。ここでは、/home/user/dockernextcloudというディレクトリを作成します。

ホスト /home/user/docker
$ mkdir nextcloud

docker-compose.ymlを作成

作成したディレクトリに、以下のよう内容を記述したdocker-compose.ymlファイルを作成します。

ホスト /home/user/docker/nextcloud/docker-compose.yml
version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root # 適当なパスワードを設定
      - MYSQL_PASSWORD=root      # 適当なパスワードを設定
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    restart: always

上記のうち、各自で適当に設定が必要になる箇所がMYSQL_ROOT_PASSWORD=MYSQL_PASSWORD=の2箇所です。私は適当に両方共にrootに設定しました。あくまでローカルで試す想定なので、実際にインターネットに接続されたサーバ上で構築する場合などはセキュリティ対策を実施する必要あると思います。

Docker Composeのコマンドで構築、起動

あとは以下のコマンド1つでコンテナ構築から起動まで実行されます。以下のようにdoneが表示されれば完了です。

ホスト /home/user/docker/nextcloud/docker-compose.yml
$ docker-compose up -d
(・・・省略・・・)
Status: Downloaded newer image for nextcloud:latest
Creating nextcloud_db_1 ... done
Creating nextcloud_app_1 ... done

psコマンドでコンテナの稼働状況を確認すると、以下のように2つのコンテナがupになっていることを確認できます。これで構築は完了です。

$ docker-compose ps
     Name                    Command               State          Ports
-------------------------------------------------------------------------------
nextcloud_app_1   /entrypoint.sh apache2-for ...   Up      0.0.0.0:8080->80/tcp
nextcloud_db_1    docker-entrypoint.sh mysqld      Up      3306/tcp

動作確認とアカウント設定

実際に構築したNextcloudにアクセスしてみます。アクセスするには、ブラウザからhttp://localhost:8080にアクセスします。すると以下のようなログイン画面が表示されます。ここで「ストレージとデータベース」という部分をクリックします。

1-startpage.png

「ストレージとデータベース」をクリックすると、以下のようにNextcloudが使用するデータベースの設定入力フォームが展開します。ここにdocker-compose.ymlに記述した内容と合わせて入力していきます。 2-setup-652x1024.png

この記事と同じ内容のdocker-compose.yml、すなわち公式サイトと同じ内容で構築した場合は以下のように入力する必要があります。特に、最後のホスト名はデフォルトで入力されているlocalhostのままだとエラーになり、以下のようにdb:3306とする必要があるので注意が必要です。

  • 管理者アカウントユーザ名:任意のユーザ名(上記ではadmin)
  • 管理者アカウントパスワード:任意のパスワード(上記ではadmin)
  • データベース:MySQL/MariaDB を選択
  • データベースのユーザ名:root (docker-compose.ymlで指定したMYSQL_ROOT_PASSWORDの値と同じものを指定)
  • データベースのパスワード:root(docker-compose.ymlで指定したMYSQL_PASSWORDの値と同じものを指定)
  • データベース名:nextcloud(docker-compose.ymlで指定したMYSQL_DATABASEの値と同じものを指定)
  • ホスト名:db:3306(docker-compose.ymlでデータベース用コンテナ名とそのデータベースが使用するポート番号を指定。MySQLはデフォルトで3306を使用。)

最終的に以下のような入力状態になります。この状態で「セットアップを完了します」をクリックします。 4-correctsetup-902x1024.png

「セットアップを完了します」をクリックすると、以下のように「作業を完了しています」と表示されるのでしばらく待ちます。 5-creating-901x1024.png

作業が完了すると、以下のような画面が表示され、無事にNextcloudを使用できるようになります。 6-setuped-1024x482.png

色々なアプリを追加してみる

Nextcloudでは、冒頭で述べたように様々な機能が追加できます。具体的には、以下のように右上にあるアカウントメニューから「アプリ」を選択します。

9-getapp-1024x450.png

すると、色々なカテゴリ毎に追加できるアプリが表示されます。ここから目的のアプリを有効化することで使えるようになります。 10-choseapp-1024x722.png

遭遇したエラー

Nextcloudの構築自体はすんなりいったものの、初めてNextcloudにアクセスした時の設定がうまくいきませんでした。具体的には、以下のようにError while trying to create admin user: Failed to connect to the database: An exception occured in driver: SQLSTATE[HY000] [2002] No such file or directoryといエラーメッセージが表示されました。

3-2-setuperror.png

これの原因は、「ストレージとデータベース」の部分でデフォルトでlocalhostと入力されているホスト名が間違っているためです。公式サイトの手順通りにNextcloudをDockerで構築した場合は、ここのホスト名はdb:3306である必要があります。これはdocker-compose.ymlに記述したデータベース用のコンテナ名とデータベースが使用するポート番号を指定しています。

以下のようにホスト名がlocalhost127.0.0.1ではエラーになります。 3-setup-ex-736x1024.png

まとめ

OwnCloudをはじめて使った時からだいぶ時間経ちましたが、まさかOwnCloudからNextcloudが生まれこのような進化をしているとは思いませんでした。かなり色々なことができそうなため、色々と触ってみてまたまとめたいと思います。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。