プロジェクト

全般

プロフィール

Nextcloud12 インストール

Webファイルマネージャ兼DropBoxライクなWebシステム、Nextcloudのインストールについて。

NextcloudはownCloudの開発者がownCloudからフォークして開発しているシステム。
基本的にはほぼ同じものだが、ownCloud Enterprise版の機能をOSSで再実装している他
若干の独自機能を実装している。開発はownCloudのバージョンに追従しており、
向こうで実装された機能を継承して実装している。

Nextcloud12のCentOS 7.xへのインストール

  • リソースの入手
    https://nextcloud.com/install/#instructions-server
    
  • 「nextcloud-x.x.x.zip」または「nextcloud-x.x.x.tar.bz2」を取得して展開
  • 例として「/usr/local/nextcloud」として公開パスに配置後、所有者をapacheにしておくこと。
    # yum install wget unzip httpd mod_ssl
    # wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip
    # unzip nextcloud-12.0.0.zip
    # mv /nextcloud /usr/local
    # chown -R apache.apache /usr/local/nextcloud
    
  • 必要パッケージの入手(php以外)
    # yum install mariadb-server
    
    # systemctl enable httpd
    # systemctl start httpd
    # systemctl enable mariadb
    # systemctl start mariadb
    
    # mysql -u root
    MariaDB [(none)]> set password for root@localhost=password('設定するパスワード');
    MariaDB [(none)]> quit
    
    # mysql -u root -p
    MariaDB [(none)]> create database nextcloud default character set=utf8;
    MariaDB [(none)]> grant all privileges on nextcloud.* to "nextcloud"@"localhost" identified by "設定するパスワード";
    MariaDB [(none)]> quit
    
  • 必要パッケージの入手(php7系)
    # yum install epel-release
    # wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
    # rpm -ivh remi-release-7.rpm
    # yum install --enablerepo=remi,remi-php71 php php-devel php-xml php-mbstring php-gd php-pdo php-mysqlnd php-zip php-process php-mcrypt php-intl php-ldap
    
  • php.iniの設定
    default_charset = "UTF-8" 
    date.timezone = Asia/Tokyo
    
    memory_limit = 512M
    post_max_size = 256M
    upload_max_filesize = 256M
    
    • 「memory_limit>post_max_size=upload_max_filesize」とすること。memory_limitが
      不足あるいは同等値である場合、PHPの出力が真っ白な空白ページになってしまう。
      ただし現在、送信サイズはpost_max_sizeとupload_max_filesizeで制御しなくなっている。
    • 変更後、apacheを再起動する。
  • httpdの設定(/etc/httpd/conf.d/ssl.conf)
    パスは任意。ディレクティブ設定は同梱されている.htaccessを有効にするために設定する。
    LimitRequestBodyは送信サイズ制限。単一2GB以上のファイルのアップロードを拒否する。
    これは上記送信サイズ制限がないための予防策で、必要に応じて調整・コメントアウトしてもいい。
    Alias   /nextcloud       /usr/local/nextcloud
    <Directory /usr/local/nextcloud/>
      LimitRequestBody 2147483647
      Options +FollowSymlinks
      AllowOverride All
      <IfModule mod_dav.c>
        Dav off
      </IfModule>
      SetEnv HOME /usr/local/nextcloud/
      SetEnv HTTP_HOME /usr/local/nextcloud/
    </Directory>
    
  • Webブラウザで「https://ipアドレス/nextcloud」アクセスして初期設定
    • 管理者ユーザ名を指定する
    • 管理者パスワードを指定する
    • データフォルダを指定する
    • データベースをSQLiteからMySQL/Mariadbに切り替える
    • データベース設定を行う
    • セットアップ完了ボタンを押す

以上でインストールは完了。

推奨設定

管理画面を開いたときにチェックされる推奨設定に関する設定

httpdの設定

  • httpdの設定(/etc/httpd/conf.d/ssl.conf)
    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" 
    </IfModule>
    

メモリキャッシュの設定

  • php-pecl-apcのインストール
    # yum install --enablerepo=remi,remi-php71 php-pecl-apc
    # systemctl restart httpd
    
  • 設定ファイルにポート番号などを追記(nextcloud/config/config.php)
    installedの下に追加
      'installed' => true,
      'memcache.local' => '\OC\Memcache\APCu',
    );
    

php-opcacheの設定

  • opcacheの設定
    # yum install --enablerepo=remi,remi-php71 php-opcache
    
  • PHPの設定(/etc/php.d/10-opcache.ini)
  • 警告ではphp.iniを編集するよう促すが、実際には上記のファイルでチェックされる。
    opcache.enable=1
    opcache.enable_cli=1
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=10000
    opcache.memory_consumption=128
    opcache.save_comments=1
    opcache.revalidate_freq=1
    
  • php再読み込みと動作確認(phpと共にOPcachのバージョンが返ってくること)
    # systemctl restart httpd
    
    # php -v
    PHP 7.1.7 (cli) (built: Jul  6 2017 13:31:15) ( NTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
        with Zend OPcache v7.1.7, Copyright (c) 1999-2017, by Zend Technologies
    

バックグラウンドジョブの設定

  • cron の設定
    管理画面のBackground jobsをAjaxからCronに変更する。
    # crontab -u apache -e
    
    */15  *  *  *  * php -f /usr/local/nextcloud/cron.php
    

ファイルのアップロードサイズ制限が効かず、実質無制限になっている

(8/11 更新)

https://github.com/nextcloud/server/commit/7e701504be9352d21a25d17adca45dc5ed79d792
https://help.nextcloud.com/t/why-am-i-able-to-upload-files-bigger-than-my-post-max-size-details-inside/10612/5

POSTではなくPUTでアップロードするようになったため、PHPの「post_max_size」パラメータ
の影響を受けないようになり、既存の制限方法が適用されなくなった。(フォーラム/gitより)

コード側はファイルサイズ制限の記述を削除していく方針の模様。別の形でサイズ制限が実装
されるかは今のところ不明。

応急処置としてはファイルアクセス制御のほかに、apacheの「LimitRequestBody」でも
対応することができる。前者はアップロード後、後者はアップロード前にチェックする。
いずれの場合も、とりあえずNextcloud側でポップアップでのエラーメッセージが出る。
(デスクトップアプリも制限を受ける?)

  • 単一ファイルで2GBまで許可する例
    <Directory /usr/local/nextcloud/>
      LimitRequestBody 2147483647
      Options +FollowSymlinks
      AllowOverride All
      <IfModule mod_dav.c>
        Dav off
      </IfModule>
      SetEnv HOME /usr/local/nextcloud/
      SetEnv HTTP_HOME /usr/local/nextcloud/
    </Directory>
    

    注意点としてリバースプロキシの場合にはLimitRequestBodyは即時効果せず、一度リバース
    プロキシ側にアップロードされて転送先でブロックされるというファイルアクセス制御と似た
    のブロックタイミングとなる。
    http://httpd.apache.org/docs/2.2/en/mod/core.html#limitrequestbody