Nextcloud

Table of Content

オープンソースのオンラインストレージ
当初は、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の設定

# vi /etc/php-fpm.d/nextcloud.conf
------------------------------------------------------
[nextcloud]
user = apache
group = apache

listen = /run/php-fpm/nextcloud.sock
listen.acl_users = apache
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
------------------------------------------------------

以下はサーバースペックや 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 = 128
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
------------------------------------------------------
# vi /etc/httpd/conf.d/ssl.conf
------------------------------------------------------
<VirtualHost _default_:443> ← SSLのみにしたかったので、 VirtualHostの中に記載

Alias /nextcloud "/opt/nextcloud/"
<Directory "/opt/nextcloud">
    Options FollowSymLinks
    AllowOverride All
    Require all granted

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/nextcloud.sock|fcgi://localhost"
    </FilesMatch>
</Directory>

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>

<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/nextcloud-24.0.0.zip -P /opt/
# unzip /opt/nextcloud-24.0.0.zip -d /opt/
# chown -R apache. /opt/nextcloud
# mkdir /usr/local/data
# chown -R apache. /usr/local/data

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

サービス起動

# 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/ssl.conf
    ------------------------------------------------------
    <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </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',                  ←追加
    ------------------------------------------------------

コメントを残す

メールアドレスが公開されることはありません。