オープンソースのオンラインストレージ
当初は、podman等のコンテナでのインストールも考えたが、php等がインストール済みで、同じソフトを複数インストールするのが無駄に思えたので通常インストールに変更
インストール
使用するソフトのインストール
手順は、Apache、mod_ssl、epel、php、ImageMagick、MySQLを参照
必要なモジュールなどをインストール
# 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インストール