Nextcloud

Table of Contents

オープンソースのオンラインストレージ
当初は、podman等のコンテナでのインストールも考えたが、php等がインストール済みで、同じソフトを複数インストールするのが無駄に思えたので通常インストールに変更

インストール

使用するソフトのインストール

手順は、Apachemod_sslepelphpImageMagickMySQLを参照

必要なモジュールなどをインストール

# dnf --enablerepo=powertools,epel install php-pear php-mbstring php-pdo php-intl php-gd php-pecl-zip php-mysqlnd php-bcmath php-gmp php-opcache php-pecl-apcu ImageMagick ImageMagick-devel make unzip nfs-utils samba-client cifs-utils

sambaクライアントの設定

# dnf --enablerepo=powertools install samba-client cifs-utils libsmbclient-devel
# pecl install smbclient

PHPの設定

以下はサーバースペックや NextCloud の使用状況に応じて要調整
基準がわからなかったので、参考にしたHPの内容をほぼコピペ

# vi /etc/php.ini
------------------------------------------------------
max_execution_time = 3600
memory_limit = 2G
post_max_size = 2G
upload_max_filesize = 2G
max_input_time = 3600
max_input_vars = 2000
date.timezone = Asia/Tokyo
extension=smbclient.so
------------------------------------------------------
# vi /etc/php.d/10-opcache.ini
------------------------------------------------------
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 1
opcache.save_comments = 1
------------------------------------------------------

PHPの再起動

# systemctl restart php-fpm

nextcloudのデータベースとアカウント登録

# mysql -u root -p
CREATE DATABASE nextcloud CHARACTER SET utf8mb4;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '(パスワード)';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';

Apacheの設定

vi /etc/httpd/conf.d/nextcloud.conf
------------------------------------------------------
Timeout 3600
ProxyTimeout 3600

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
  Header set X-Download-Options: noopen
</IfModule>

Alias /nextcloud "/opt/nextcloud/"

<Directory /opt/nextcloud>
  Require all granted
  Options FollowSymlinks MultiViews
  AllowOverride All
  SSLRequireSSL

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /opt/nextcloud
 SetEnv HTTP_HOME /opt/nextcloud
</Directory>
# vi /etc/httpd/conf.d/ssl.conf
------------------------------------------------------
<VirtualHost _default_:443>

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^/\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
    RewriteRule ^/\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
    RewriteRule ^/\.well-known/webfinger /nextcloud/index.php%{REQUEST_URI} [R=301,L]
    RewriteRule ^/\.well-known/nodeinfo /nextcloud/index.php%{REQUEST_URI} [R=301,L]
    RewriteRule ^/\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
    RewriteRule ^/\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
</IfModule>

</VirtualHost>
------------------------------------------------------
## nextcloudのソースを展開して起動
# wget https://download.nextcloud.com/server/releases/latest-24.zip -P /opt/
# unzip /opt/latest-24.zip -d /opt/
# chown -R apache. /opt/nextcloud
# mkdir /usr/local/data
# chown -R apache. /usr/local/data

データフォルダは安全を考えて、ソースとは別の場所に指定

設定ファイルのチェック

# apachectl configtest
Syntax OK

サービス起動

# systemctl restart httpd

https://www.chinaz.org/nextcloud/

初期設定

項目
ユーザ名 root
パスワード (パスワード)
データフォルダ /usr/local/data
データベース MySQL
データベースユーザ名 nextcloud
データベースパスワード (パスワード)
データベース名 nextcloud
データベースサーバ名 localhost

config.phpの設定

# vi /opt/nextcloud/config/config.php
------------------------------------------------------
<?php
$CONFIG = array (
  'memcache.local' => '\OC\Memcache\APCu',   ←追加
  'default_phone_region' => 'JP',            ←追加
  'default_language' => 'ja',                ←追加
  'force_language' => 'ja',                  ←追加
  'default_locale' => 'ja',                  ←追加
  'instanceid' => 'ocqq40af7p20',
------------------------------------------------------

起動後の初期設定

  • [設定]-[管理]-[基本設定]-[メールサーバ]-メールの送信設定を登録
  • [アプリ]で検索欄にアプリ名を入力して有効化
    「External storage support 」
    「Registration」

システムのCronにバックグランドジョブを設定

バックグランドジョブは定期実行が良さげな記事があったので、cronに変更

  • コマンドラインからのPHP実行時にAPCuを有効にする
    # vi /etc/php.ini
    ------------------------------------------------------
    apc.enable_cli=1
    ------------------------------------------------------
  • Nextcloudのバックグランドジョブの設定を変更
    [設定]-[基本設定]-[バックグラウンドジョブ"]で[Cron]を選択
  • ユーザ指定のcrontabに5分毎に実行するタスクを追加
    $ sudo crontab -u apache -e
    ------------------------------------------------------
    */5 * * * * /usr/bin/php -f /opt/nextcloud/cron.php 
    ------------------------------------------------------

セキュリティ&セットアップ警告

  • Strict-Transport-Security "HTTP ヘッダーの秒数が少なくとも"15552000" に設定されていません。

    # vi /etc/httpd/conf.d/nextcloud.conf
    ------------------------------------------------------
    <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
    </IfModule>
    ------------------------------------------------------
  • 下記の4件のエラーが発生

    Webサーバーで "/.well-known/webfinger" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください
    。
    Webサーバーで "/.well-known/nodeinfo" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    Webサーバーで "/.well-known/caldav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    Webサーバーで "/.well-known/carddav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。

    下記の追記で、「webfinger」以外はエラーがでなくなった。
    そのあとに、使用メモリの拡張などを行なっていたっらいつの間にかOKになっていた?

    # vi /etc/httpd/conf.d/ssl.conf
    ------------------------------------------------------
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^/\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
    RewriteRule ^/\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
    RewriteRule ^/\.well-known/webfinger /nextcloud/index.php%{REQUEST_URI} [R=301,L]
    RewriteRule ^/\.well-known/nodeinfo /nextcloud/index.php%{REQUEST_URI} [R=301,L]
    RewriteRule ^/\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
    RewriteRule ^/\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
    </IfModule>
    ------------------------------------------------------
  • ご使用のシステムには、デフォルトの電話地域が設定されていません。

    # vi /opt/nextcloud/config/config.php
    ------------------------------------------------------
    <?php
    $CONFIG = array (
    'default_phone_region' => 'JP',   ←追加
    'instanceid' => 'ocqq40af7p20',
    'passwordsalt' => 'Ym+Uz5HtoG2n4uyO5P5c/d84WLrrUY',
    ------------------------------------------------------
  • メモリーキャッシュが構成されていません。パフォーマンスを向上させるために、可能な場合はmemcacheを構成してください。

    # vi /opt/nextcloud/config/config.php
    ------------------------------------------------------
    <?php
    $CONFIG = array (
    'memcache.local' => '\OC\Memcache\APCu',   ←追加
    'default_phone_region' => 'JP',
    'instanceid' => 'ocqq40af7p20',
    'passwordsalt' => 'Ym+Uz5HtoG2n4uyO5P5c/d84WLrrUY',
    ------------------------------------------------------
    # vi /etc/php.ini
    ------------------------------------------------------
    max_execution_time = 3600
    memory_limit = 2G
    post_max_size = 2G
    upload_max_filesize = 2G
    max_input_time = 3600
    max_input_vars = 2000
    date.timezone = Asia/Tokyo
    extension=smbclient.so
    ------------------------------------------------------
    # vi /etc/php.d/10-opcache.ini
    ------------------------------------------------------
    opcache.enable=1
    opcache.enable_cli=1
    opcache.memory_consumption = 128
    opcache.interned_strings_buffer = 8
    opcache.max_accelerated_files = 10000
    opcache.revalidate_freq = 1
    opcache.save_comments = 1
    ------------------------------------------------------
  • [suexec:notice] [pid 10695:tid 140206761417024] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
    暫定で設定からモジュールのロードをコメントアウト

    # vi /etc/httpd/conf.modules.d/00-base.conf
    ------------------------------------------------------
    #LoadModule suexec_module modules/mod_suexec.so
    ------------------------------------------------------
  • [Sun May 08 11:25:11.832262 2022] [lbmethod_heartbeat:notice] [pid 10695:tid 140206761417024] AH02282: No slotmem from mod_heartmonitor
    モジュールのロードはコメントアウトされているので原因不明

  • The PHP OPcache module is not properly configured. See the documentation ↗ for more information.
    The OPcache interned strings buffer is nearly full. To assure that repeating strings can be effectively cached, it is recommended to apply opcache.interned_strings_buffer to your PHP configuration with a value higher than 8.
    2倍の16でも再発したので、4倍の32に拡張

    # vi /etc/php.d/10-opcache.ini
    opcache.interned_strings_buffer=8
    ↓
    opcache.interned_strings_buffer=16
    ↓
    opcache.interned_strings_buffer=32
  • ユーザ追加時に初期値を日本語に変更

    # vi /opt/nextcloud/config/config.php
    ------------------------------------------------------
    <?php
    $CONFIG = array (
    'default_language' => 'ja',                ←追加
    'force_language' => 'ja',                  ←追加
    'default_locale' => 'ja',                  ←追加
    ------------------------------------------------------
  • The OPcache buffer is nearly full. To assure that all scripts can be hold in cache, it is recommended to apply opcache.memory_consumption to your PHP configuration with a value higher than 128 .
    足りなくなったようなので、2倍の256に拡張

    # vi /etc/php.d/10-opcache.ini
    ------------------------------------------------------
    opcache.memory_consumption = 128
    ↓
    opcache.memory_consumption = 256
    ------------------------------------------------------
  • Nextcloud Security ScanでX-Download-Options がエラー
    ユーザーがダウンロードしたファイルを直接「開く」ことを防止に設定

    vi /etc/httpd/conf.d/nextcloud.conf
    ------------------------------------------------------
    Header set X-Download-Options: noopen
    ------------------------------------------------------
  • 28.0.2 にアップグレードしたら下記の警告が出たので、config.phpを変更
    サーバーにはメンテナンスウィンドウの開始時間が設定されていません。これは、リソースを多く使用する日常のバックグラウンドジョブが、メインの利用時間中にも実行されることを意味します。利用者がこれらの重いタスクによる負荷の影響を受けにくくするために、低い利用時間に設定することをおすすめします。
    Background_jobs

# vi /opt/nextcloud/config/config.php
------------------------------------------------------
'maintenance_window_start' => 1,
------------------------------------------------------

参考記事

CentOS 8 : NextCloud : インストール : Server World
Nextcloudインストール

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です