Docker で CentOS を用いて Nextcloud を構築してみた

株式会社プライムストラクチャーのエンジニアのSayaです。

今回は Docker で CentOS イメージを用いて Nextcloud を構築してみましたのでその方法を紹介します。

Nextcloud とは

オンラインストレージが作成出来る、オープンソースのアプリケーションです。
ownCloud のフォークによって誕生しました。

Nextcloud は自分のサーバー上にオンラインストレージを実装できるため、セキュアに運用できるのが特徴です。

利用するには LAMP 環境を整える必要があります。

Nextcloud を Docker 上で実装する

検証環境

この検証は以下の環境で行いました。

  • macOS Mojave 10.14.5
  • Docker Engine 18.09.2
  • Docker Compose 1.23.2

Docker Compose を記述する

CentOS のイメージを使用した Docker Compose ファイルを作成します。
またポートを指定しておきます。

[docker-compose.yml]
version: "3.6"
services:
    nextcloud-centos:
        image: "centos:latest"
        tty: true
        volumes:
        - ./:/app
        ports:
        - "8080:80"
        privileged: true
        command: /sbin/init

Docker を起動する

以下のコマンドで Docker コンテナを起動します。

$ docker-compose up -d

そして以下のコマンドで起動したコンテナ内に入ります。

$ docker-compose exec nextcloud-centos bash

CentOS 内で依存関係のダウンロードを行う

ここからは公式ドキュメントを参考にしながら進めていきます。

CentOS 内で以下のコマンドを使って依存関係のダウンロードを行います。

$ yum install -y epel-release yum-utils unzip curl wget \
bash-completion policycoreutils-python mlocate bzip2

そして以下のコマンドでちゃんとアップデートされているか確認します。

$ yum update -y

Apache をインストール・起動する

以下のコマンドで Apache をインストールします。

$ yum install -y httpd

以下のバーチャルホストファイルを作成します。

$ vi /etc/httpd/conf.d/nextcloud.conf

作成したファイルの中に以下の内容を記述します。

[nextcloud.conf]
<VirtualHost *:80>
  DocumentRoot /var/www/html/
  ServerName  your.server.com

<Directory "/var/www/html/">
  Require all granted
  AllowOverride All
  Options FollowSymLinks MultiViews
</Directory>
</VirtualHost>

そして以下のコマンドで Apache を有効化・起動します。

$ systemctl enable httpd.service
$ systemctl start httpd.service

PHP モジュールをインストールする

まず以下のコマンドで PHP のモジュールをインストールします。

$ yum install -y centos-release-scl
$ yum install -y rh-php72 rh-php72-php rh-php72-php-gd rh-php72-php-mbstring \
rh-php72-php-intl rh-php72-php-pecl-apcu rh-php72-php-mysqlnd rh-php72-php-pecl-redis \
rh-php72-php-opcache rh-php72-php-imagick

シンボリックリンクを作成します。

$ ln -s /opt/rh/httpd24/root/etc/httpd/conf.d/rh-php72-php.conf /etc/httpd/conf.d/
$ ln -s /opt/rh/httpd24/root/etc/httpd/conf.modules.d/15-rh-php72-php.conf /etc/httpd/conf.modules.d/
$ ln -s /opt/rh/httpd24/root/etc/httpd/modules/librh-php72-php7.so /etc/httpd/modules/
$ ln -s /opt/rh/rh-php72/root/bin/php /usr/bin/php

Nextcloud をインストールする

Nextcloud のダウンロードページへ行き、サーバー向けの Nextcloud をダウンロードします。
これを docker-compose.yml と同じ階層に入れてもう一回$ docker-compose exec nextcloud-centos bashでコンテナの中に入ります。

etc/httpd/conf/httpd.confに Apache のドキュメントルートが記載されているので、そこに Nextcloud のファイルをコピーします。

nextcloud ファイルが入っている app ファイルに入り以下のコマンドを実行します。

$ cp -r nextcloud ../var/www/html

/etc/httpd/conf.d/nextcloud.conf の ServerName に localhost を指定します。

そして以下のコマンドを実行して Apache に権限を与えます。

$ chown -R apache:apache /var/www/html/

Nextcloud を起動する

https://localhost:8080 へアクセスして Nextcloud が表示されるか確認します。

表示されたらユーザー名、パスワードを設定して中に入ります。

これで Nextcloud の機能を Docker 上に実装することが出来ました。

まとめ

今回は Docker で CentOS イメージを用いて Nextcloud を構築する方法を紹介しました。

Google などのアカウントを用いずにプライベートな環境でファイル共有や色々なツールが使えるのは便利だと感じました。

また今回のケースではデータベースは自動的に SQLite が選択されていますが、自分でデータベースを選択して構築することもできます。

より本格的な運用を目指すならデータベースも自分で構築すると良いと思います。

参考文献

Nextcloud
Installation on Linux — Nextcloud 15 Administration Manual 15 documentation
Database configuration — Nextcloud 15 Administration Manual 15 documentation