Raspberry Pi3にNextCloudを構築する

以前にownCloudをRaspberryPi3に構築したのですが、NextCloudなるものを見つけてしまったので、衝動的に構築しました

今回構築に使ったのは以下の機材

1、RaspberryPi3 Model B

2、MicroSDカード

3、専用の電源

以上の組み合わせで構築しました

RaspberryPi3にOSインストールするという手順は、他のブログで既に詳細な説明があると思いますので割愛します

1、NextCloudを構築しよう

以前に参考にしたownCloudのページを参考に、以下のように構築していきます

何はともあれ、まずは以下のコマンドをRaspi上で実行していきましょう

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install nginx openssl ssl-cert php5-cli php5-sqlite php5-gd php5-common php5-cgi sqlite3 php-pear php-apc curl libapr1 libtool curl libcurl4-openssl-dev php-xml-parser php5 php5-dev php5-gd php5-fpm memcached php5-memcache php5-curl varnish

これで動作に必要なパッケージは整いました

2、Webサーバーの初期設定

裏で動かすnginxのユーザーはwww-dataで動かすので、まずはユーザーを作成しましょう

$ sudo groupadd www-data
$ sudo usermod -a -G www-data www-data

次にNextCloudを安全なHTTPSで動作させる為にSSLの証明書を作成しましょう

私は更新が面倒なので、いつも10年分作ります。作成個所はnginxのロケーションです

$ sudo openssl req $@ -new -x509 -days 3650 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key
$ sudo chmod 600 /etc/nginx/cert.pem
$ sudo chmod 600 /etc/nginx/cert.key

個人用ですし、証明書の情報は適当に入力しましょう

3、nginxの設定

Webサーバーであるnginxの設定は以下のコマンドで実施

$ sudo vim /etc/nginx/sites-available/default

defaultというファイルが無い場合は、上記のコマンドで新規ファイルが作成されます

その中身は以下の内容でコピペして上書きし、保存しましょう

upstream php-handler {
        server 127.0.0.1:9000;
        #server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        server_name サーバーのホスト名;
        return 301 https://$server_name$request_uri;  # enforce https
}

server {
        listen 443 ssl;
        server_name サーバーのホスト名;

        ssl_certificate /etc/nginx/cert.pem;
        ssl_certificate_key /etc/nginx/cert.key;

        # Path to the root of your installation
        root /var/www/nextcloud;

        client_max_body_size 1000M; # set max upload size
        fastcgi_buffers 64 4K;

        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 360;

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

        index index.php;
        error_page 403 /core/templates/403.php;
        error_page 404 /core/templates/404.php;

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) {
                deny all;
        }

        location / {
                # The following 2 rules are only needed with webfinger
                rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
                rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

                rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
                rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

                rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

                try_files $uri $uri/ index.php;
        }

        location ~ \.php(?:$|/) {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param HTTPS on;
                fastcgi_pass php-handler;
        }

        # Optional: set long EXPIRES header on static assets
        location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires 30d;
                # Optional: Don't log access to assets
                access_log off;
        }

}

サーバーのホスト名のところには、DDNS等で取得したホスト名を入れます

私がよく使うのは、DuckDnsです

DuckDNSについてはこちら

4、NextCloud用のディレクトリを作成

私は余っていた500GBの外付けUSBハードディスクを保存場所にするべく、Raspiに接続して使っています → [2017/01/25更新]外付けHDDからNASに乗せ換えました

マウントする必要があるので、とりあえずディレクトリを作成

$ sudo mkdir /mnt/hdd/nextcloud

次に、nginxが触れるようにパーミッション等を変更

$ sudo chown -R www-data:www-data /mnt/hdd/nextcloud
$ sudo chmod -R 770 /mnt/hdd/nextcloud

これでnginxからファイルにアクセス出来るようになりました

外付けHDDのマウント方法はまた別のブログで沢山紹介されているの、そちらをご参照ください

5、NextCloudのインストール

まず、インストーラーをダウンロードしてくる先のディレクトリを作成して、インストーラーを保存します

$ sudo mkdir -p /var/www/nextcloud
$ wget https://download.nextcloud.com/server/prereleases/nextcloud-11.0.1RC1.tar.bz2

保存した圧縮ファイルを解凍し、解凍したディレクトリを移動します

$ tar xvf nextcloud-11.0.1RC1.tar.bz2
 $ sudo mv nextcloud/ /var/www/
$ sudo chown -R www-data:www-data /var/www

これで/var/www/の直下にnextcloudのフォルダが出来ました

NextCloudのインストールは終了です

Raspiの再起動後にRaspiのIPアドレス宛にブラウザからアクセスしてみてください

例:https://192.168.100.100

このような画面が出ればインストールは成功です

この画面は既に初期設定を完了した後の画面ですが、初期アクセス時は管理者のユーザー名とパスワード、それからNextCloudが扱うデータディレクトリの場所、使用するデータベースを聞かれます

NextCloudが使うディレクトリの場所には、外付けのHDDを使用するので、Linux内でマウントしている/mnt/hdd/nextcloudと入力します

データベースにはMariaDBを使用しました

予めMariaDBにnextcloud用のデータベースを作成しておきましょう

6、インストール後の諸設定

NextCloudの管理画面に行くと、いくつか設定して下さいと警告が出ていると思います

・PHPのPATH環境設定の変更
・HTTP Strict Transport Securityの設定
・memcacheを有効にする

これ以外にもあるかもしれませんが、私は遭遇した事がありません

まず、PHPのPATH環境設定の変更ですが、以下の場所を参照してください

$ sudo vim /etc/php5/fpm/pool.d/www.conf

www.conf内の一番したにclear_env = noを追加して保存して終了です

次に、HTTP Strict Transport Securityを○○○○秒に設定うんぬん出てると思いますので、こちらはnginxのniginx.confに追加します

$ sudo vim /etc/nginx/nginx.conf

SSL Settingsのところに追加します

分かりやすいように前後の文章も載せますが、追加するのはadd_headerから始まる太字の部分です

##
# SSL Settings
##

 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
 ssl_prefer_server_ciphers on;
 add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;preload';
 
##
# Logging Settings
##
以下略・・・

これで保存して終了です

最後にmemcacheを有効にしてパフォーマンスを向上させます

以下のファイルを開きます

$ sudo vim /var/www/nextcloud/config/config.php

以下の一文を追加します。追加する箇所はどこでも良いです

'memcache.local' => '\\OC\\Memcache\\APCu',

追加したら保存して終了です

これでRaspiを再起動すれば設定が反映されます

7、アップロードファイルサイズを512Mから2GBに増やす

デフォルトの状態だと、NextCloudでは513MBまでしかアップロード出来ません

1GBのファイルをアップロードしたくても、この状態ではエラーで止まってしまいます

上限を2GBまで(Raspberry Piのような32bitOSの場合は2GBまで)引き上げるには、phpのアップロード設定を変更します※ ※Webブラウザからファイルをドラッグアンドドロップする場合に限る。デスクトップアプリからであれば、20GBのファイルもアップロード出来ました

$ sudo vim /etc/php5/fpm/php.ini

以下の箇所を2000Mに変更してください

upload_max_filesize = 2000M

post_max_size = 2000M

変更後、以下のコマンドを実行してphpを再起動します

$ sudo service php5-fpm restart

NextCloudにログインし、管理設定からアップロードの最大サイズを513MBから2000MBに変更します

ここで2GBとか打つと設定が反映されません。微妙に注意点かも

これでひとしきり設定は完了です。お疲れ様でした