「Nextcloud」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎初期化: 同期)
332行目: 332行目:
 
}}
 
}}
   
  +
== Web サーバー ==
== セキュリティの強化 ==
 
   
  +
選択できる Web サーバーは豊富にあります。最終的にどのオプションを選択する場合でも、Nextcloud アプリケーションは独自のシステムユーザー ''nextcloud'' で実行する必要があることに留意する必要があります。したがって、リクエストを上記のアプリケーションサーバーのいずれかに転送する必要があります。
[https://docs.nextcloud.com/server/13/admin_manual/configuration_server/harden_server.html Nextcloud Hardening and Security] や[[セキュリティ]]の記事に一般的なトピックの説明があります。[https://scan.nextcloud.com/ セキュリティスキャナ] も参照。
 
   
=== Let's Encrypt ===
+
=== nginx ===
==== nginx ====
 
[https://github.com/graysky2/configs/blob/master/nginx/nextcloud-initial.conf こちらのファイル] をテンプレートとして使ってクラウド設定の {{ic|/etc/nginx/conf.d/cloud-initial.conf}} を作成してください。テンプレートファイルの "@@FQDN@@" は実際に使用する [https://en.wikipedia.org/wiki/Fully_qualified_domain_name FQDN] に置き換えてください。最初に暗号化されない設定を使うにはサーバーの証明書を生成する必要があります。[[Let’s Encrypt]] に書かれている手順に従ってサーバーの暗号化証明書を作成してください。
 
   
  +
''nginx'' の構成は、この記事の範囲をはるかに超えています。詳細については、関連する [[nginx|article]] を参照してください。詳細な構成については、[https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html Nextcloud のドキュメント] も参照してください。ほとんどの場合、これを適切な名前のファイル (ここでは例として {{ic|cloud.mysite.com.conf}}) を {{ic|/etc/nginx/sites-available}} の下にコピーする必要があります。対応するシンボリックリンクを {{ic|/etc/nginx/sites-enabled}} に作成します。
証明書を作成できたら {{ic|/etc/nginx/conf.d/cloud-initial.conf}} を新しいファイル {{ic|/etc/nginx/conf.d/cloud.conf}} に置き換えてください。[https://github.com/graysky2/configs/blob/master/nginx/nextcloud.conf こちらのファイル] をテンプレートとして使うことができます。"@@FQDN@@" は実際に使用する [https://en.wikipedia.org/wiki/Fully_qualified_domain_name FQDN] に置き換えてください。その後 {{ic|nginx.service}} を[[起動]]・[[有効化]]してください。
 
   
  +
上にリンクされている Nextcloud ドキュメントのサンプル ''nginx'' 構成を使用する場合は、ルートディレクトリを次のように変更する必要があります。
=== uWSGI ===
 
   
  +
{{hc|''cloud.mysite.com''.conf| root /usr/share/webapps/nextcloud;}}
{{pkg|uwsgi-plugin-php}} による [[uWSGI]] アプリケーションサーバーを使うことで Nextcloud を固有のプロセスで動かすことができます。システム全体の {{ic|php.ini}} を編集しなくても、インスタンスの [[PHP#設定|PHP 設定]]を定義することができるため、ウェブアプリケーションの設定を分離することが可能です。uWSGI 自体にリソースの使用を制限するための機能が豊富に含まれており、アプリケーションのセキュリティを強化したり、専用のユーザーで動くようにプロセスを分けられます。
 
   
  +
ブロック {{ic|upstream php-handler { ... } }} を使用する必要はありません。PHP URI を含むリクエストのアプリケーション サーバーへの転送を処理する {{ic|location}} ブロックに {{ic|fastcgi_pass unix:/run/php-fpm-legacy/nextcloud.sock;}} を指定するだけです。''FPM'' の代わりに ''uWSGI'' を使用する場合は、この {{ic|location}} ブロックを次のように置き換えます。
[[#PHP-FPM の設定|PHP-FPM の設定]]と異なるところは {{ic|<nowiki>location ~ \.php(?:$|/) {}</nowiki>}} ブロックだけです:
 
  +
{{bc|<nowiki>
 
  +
{{hc|''cloud.mysite.com''.conf|
location ~ \.php(?:$|/) {
 
  +
location ~ \.php(?:${{!}}/) {
 
include uwsgi_params;
 
include uwsgi_params;
 
uwsgi_modifier1 14;
 
uwsgi_modifier1 14;
356行目: 355行目:
 
uwsgi_hide_header X-Content-Type-Options;
 
uwsgi_hide_header X-Content-Type-Options;
 
uwsgi_hide_header X-Robots-Tag;
 
uwsgi_hide_header X-Robots-Tag;
  +
uwsgi_hide_header X-Download-Options;
  +
uwsgi_hide_header X-Permitted-Cross-Domain-Policies;
 
uwsgi_pass unix:/run/uwsgi/nextcloud.sock;
 
uwsgi_pass unix:/run/uwsgi/nextcloud.sock;
 
}
 
}
  +
}}
</nowiki>}}
 
 
それから ''uWSGI'' の設定ファイルを作成してください:
 
 
{{hc|/etc/uwsgi/nextcloud.ini|<nowiki>
 
[uwsgi]
 
; load the required plugins
 
plugins = php
 
; force the sapi name to 'apache', this will enable the opcode cache
 
php-sapi-name = apache
 
 
; set master process name and socket
 
; '%n' refers to the name of this configuration file without extension
 
procname-master = uwsgi %n
 
master = true
 
socket = /run/uwsgi/%n.sock
 
 
; drop privileges
 
uid = http
 
gid = http
 
umask = 027
 
 
; run with at least 1 process but increase up to 4 when needed
 
processes = 4
 
cheaper = 1
 
 
; reload whenever this config file changes
 
; %p is the full path of the current config file
 
touch-reload = %p
 
 
; disable uWSGI request logging
 
;disable-logging = true
 
 
; enforce a DOCUMENT_ROOT
 
php-docroot = /usr/share/webapps/%n
 
; limit allowed extensions
 
php-allowed-ext = .php
 
; and search for index.php if required
 
php-index = index.php
 
 
; set php configuration for this instance of php, no need to edit global php.ini
 
php-set = date.timezone=Etc/UTC
 
;php-set = open_basedir=/tmp/:/usr/share/webapps/nextcloud:/etc/webapps/nextcloud:/dev/urandom
 
php-set = expose_php=false
 
; avoid security risk of leaving sessions in world-readable /tmp
 
php-set = session.save_path=/usr/share/webapps/nextcloud/data
 
 
; port of php directives set upstream in /usr/share/webapps/nextcloud/.user.ini for use with PHP-FPM
 
php-set = upload_max_filesize=513M
 
php-set = post_max_size=513M
 
php-set = memory_limit=512M
 
php-set = output_buffering=off
 
 
; load all extensions only in this instance of php, no need to edit global php.ini
 
;; required core modules
 
php-set = extension=gd
 
php-set = extension=iconv
 
;php-set = extension=zip # enabled by default in global php.ini
 
 
;; database connectors
 
;; uncomment your selected driver
 
;php-set = extension=pdo_sqlite
 
;php-set = extension=pdo_mysql
 
;php-set = extension=pdo_pgsql
 
 
;; recommended extensions
 
;php-set = extension=curl # enabled by default in global php.ini
 
php-set = extension=bz2
 
php-set = extension=intl
 
 
;; required for specific apps
 
;php-set = extension=ldap # for LDAP integration
 
;php-set = extension=ftp # for FTP storage / external user authentication
 
;php-set = extension=imap # for external user authentication, requires php-imap
 
 
;; recommended for specific apps
 
;php-set = extension=exif # for image rotation in pictures app, requires exiv2
 
;php-set = extension=gmp # for SFTP storage
 
 
;; for preview generation
 
;; provided by packages in AUR
 
; php-set = extension=imagick
 
 
; opcache
 
php-set = zend_extension=opcache
 
   
  +
適応する必要がある可能性のあるもの (すべてではありません):
; user cache
 
; provided by php-acpu, to be enabled **either** here **or** in /etc/php/conf.d/apcu.ini
 
php-set = extension=apcu
 
; per https://github.com/krakjoe/apcu/blob/simplify/INSTALL
 
php-set = apc.ttl=7200
 
php-set = apc.enable_cli=1
 
   
  +
* サーバー名 ({{ic|server_name}} 句2倍)、つまり Nextcloud インストールが到達可能な URL のサーバー部分です。
cron2 = minute=-15,unique=1 /usr/bin/php -f /usr/share/webapps/nextcloud/cron.php 1>/dev/null
 
  +
* SSL/TLS に使用する証明書とキーの名前。
</nowiki>}}
 
  +
* アクセスログをどこに書き込むか。
  +
* [[Certbot]] (または他の ACME クライアント) がドメイン検証チャレンジを置く場所。ここでは、{{ic|try_files}} の代わりに {{ic|alias}} を使用する方が適切でしょう。
  +
* Nextcloud のインストール先へのパス。(URL のサーバー名&amp;ポートセクションの右側の部分)
  +
* 使用しているアプリケーションサーバー (uWSGI または FPM)、つまり PHP コードをトリガーする必要があるリクエストを nginx がどこにどのように渡すか。(上記参照)
  +
* [[Wikipedia:OCSP_stapling|OCSP_stapling]] を設定します。
   
  +
nginx は FastCGI と uwsgi の両方のプロトコルをネイティブにサポートしているため、追加のモジュールをインストールする必要はありません。
{{Note|
 
* 必ず uWSGI 設定ファイルでタイムゾーンを設定して使用するデータベースコネクタをアンコメントしてください。
 
* PHP 7 から、[[PHP#設定|open_basedir]] ディレクトリは上流と同じように [https://www.archlinux.jp/news/php-70-packages-released/ デフォルトでは設定されなくなりました]。使用すると [https://github.com/owncloud/core/search?q&#61;open_basedir&type&#61;Issues&utf8&#61;%E2%9C%93 一部の機能が使えなくなる] 可能性があります。
 
* nextcloud を {{ic|/nextcloud}} サブディレクトリに配置する場合は {{ic|1=php-docroot = /usr/share/webapps}} を使ってください。}}
 
   
  +
=== Apache HTTP server ===
{{Warning|[https://uwsgi-docs.readthedocs.org/en/latest/Cron.html uWSGI cron] によって設定される [https://docs.nextcloud.com/server/13/admin_manual/configuration_server/background_jobs_configuration.html Nextcloud のバックグラウンドジョブ] は {{ic|/etc/php/php.ini}} のグローバル設定を使用します。必要なモジュールなどのパラメータが有効にならず、[https://github.com/owncloud/core/issues/12678#issuecomment-66114448 様々な問題] が発生します。{{ic|/etc/php/php.ini}} を {{ic|/etc/uwsgi/cron-php.ini}} などにコピーして必要な設定 ({{ic|/etc/uwsgi/nextcloud.ini}} のパラメータ) を行い、cron で ''php'' を実行する箇所に {{ic|-c /etc/uwsgi/cron-php.ini}} オプションを追加することで問題は解決します。}}
 
   
  +
[[Apache HTTP Server]] に関する記事には役立つ情報がたくさんあります。Nextcloud のドキュメントには [https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html#apache-web-server-configuration サンプル設定] が含まれており、{{ic|/usr/share/doc/nextcloud/apache.example.conf}} にもあります。どちらも暗黙的に ''mod_php'' に依存していますが、これはもう使用できません。 ''mod_proxy_fcgi'' または ''mod_proxy_uwsgi'' を適用する必要があります。
==== 有効化 ====
 
   
  +
[[Apache HTTP Server#Using php-fpm and mod_proxy_fcgi|Apache と FPM を統合する]] 方法に関する情報は、この Wiki にあります。uWSGI のドキュメントには、[https://uwsgi-docs.readthedocs.io/en/latest/Apache.html uWSGI および mod_proxy_uwsgi を使用して Apache と PHP を統合する] 方法に関する情報が記載されています。Apache パッケージには ''mod_proxy_fcgi'' と ''mod_proxy_uwsgi'' の両方のモジュールが付属していることに注意してください。必要に応じてロードする必要があります。
[[uWSGI]] には設定ファイルをインスタンスの識別子として使ってアプリケーションを起動したり有効化できる[[Systemd#ユニットを使う|テンプレートユニット]]が入っています。例えば:
 
# systemctl start uwsgi@nextcloud.socket
 
   
  +
Nextcloud を実行するには、次の Apache モジュールが必要です。
上のコマンドは {{ic|/etc/uwsgi/nextcloud.ini}} 設定ファイルを参照して必要に応じて起動します。
 
 
ブート時にデフォルトで uwsgi サービスを有効化するには、次を実行:
 
# systemctl enable uwsgi@nextcloud.socket
 
   
  +
{{hc|/etc/httpd/conf/httpd.conf|
{{Note|[http://0pointer.de/blog/projects/socket-activation.html systemd のソケットアクティベーション] を利用することで、インスタンスへの接続がない間は無駄にリソースを消費しないようにしています。すぐに有効化したい場合は、{{ic|.socket}} という部分を削除してサービスを起動・有効化してください。}}
 
  +
# these are already loaded in a standard Apache installation
  +
LoadModule headers_module modules/mod_headers.so
  +
LoadModule env_module modules/mod_env.so
  +
LoadModule dir_module modules/mod_dir.so
  +
LoadModule mime_module modules/mod_mime.so
  +
LoadModule setenvif_module modules/mod_setenvif.so
   
  +
# these need to be uncommented explicitely
[[uWSGI#サービスの起動]]も参照。
 
  +
LoadModule rewrite_module modules/mod_rewrite.so
  +
LoadModule ssl_module modules/mod_ssl.so
  +
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  +
LoadModule proxy_module modules/mod_proxy.so
   
  +
# either this one in case you use FPM
=== ファイルシステムのパーティションの設定 ===
 
  +
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  +
# or this one in case you opt for uWSGI
  +
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
  +
}}
   
  +
また、TLS 設定パラメータを取り込むには、次のディレクティブのコメントを解除します。
{{ic|config/}}, {{ic|data/}}, {{ic|apps/}} のパーミッションはできるかぎり厳しく設定してください。HTTP ユーザー ({{pkg|apache}} であれば ''http'') をディレクトリの所有者として、パーミッションは {{ic|700}} にしてください。以下のスクリプトを使うことで設定できます:
 
   
  +
{{hc|/etc/httpd/conf/httpd.conf|
{{hc|oc-perms|2=<nowiki>
 
  +
Include conf/extra/httpd-ssl.conf}}
#!/bin/bash
 
ocpath='/usr/share/webapps/nextcloud'
 
htuser='http'
 
htgroup='http'
 
rootuser='root'
 
   
  +
TLS 設定を最適化する方法の詳細については、[https://ssl-config.mozilla.org/#server=apache&config=intermediate Mozilla の SSL configurator] を参照してください。
printf "Creating possible missing Directories\n"
 
mkdir -p $ocpath/data
 
mkdir -p $ocpath/assets
 
   
  +
Nextcloud インストールへのアクセス方法に応じて、次の 2 つのサンプル設定ファイルを参照してください。
printf "chmod Files and Directories\n"
 
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
 
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750
 
   
  +
* Nextcloud のインストールが専用ホスト名でアクセスされる場合 (例:{{ic|<nowiki>https://cloud.mysite.com/</nowiki>}})、{{ic|/etc/httpd/conf/extra/httpd-vhosts.conf}} に [https://gist.github.com/wolegis/1659786ded9128935f638ee2bf228906 これ] を記述してください。
printf "chown Directories\n"
 
chown -R ${rootuser}:${htgroup} ${ocpath}/
 
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
 
chown -R ${htuser}:${htgroup} ${ocpath}/assets/
 
chown -R ${htuser}:${htgroup} ${ocpath}/config/
 
chown -R ${htuser}:${htgroup} ${ocpath}/data/
 
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
 
chown -R ${htuser}:${htgroup} ${ocpath}/updater/
 
   
  +
* Nextcloud が Web サイトのサブフォルダ (例:{{ic|<nowiki>https://www.mysite.com/nextcloud/</nowiki>}}) にインストールされている場合は、{{ic|/etc/httpd/conf/httpd.conf}} に [https://gist.github.com/wolegis/002e198c2db7980a84fd8d160c2bdb9a これ] を記述してください。
chmod +x ${ocpath}/occ
 
   
  +
もちろん、これらのサンプル設定ファイルを実際の設定に適合させる必要があります。''uWSGI'' を使用する場合は、{{ic|SetHandler}} ディレクティブを {{ic|SetHandler "proxy:unix:/run/uwsgi/nextcloud.sock{{!}}uwsgi://nextcloud/"}} に置き換えます。
printf "chmod/chown .htaccess\n"
 
if [ -f ${ocpath}/.htaccess ]
 
then
 
chmod 0644 ${ocpath}/.htaccess
 
chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
 
fi
 
if [ -f ${ocpath}/data/.htaccess ]
 
then
 
chmod 0644 ${ocpath}/data/.htaccess
 
chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
 
fi
 
</nowiki>}}
 
   
  +
Nextcloud パッケージには、多くの書き換えやヘッダー処理がすでに行われている {{ic|.htaccess}} が付属しています。{{ic|occ maintenance:update:htaccess}} を実行して、このファイルを調整します。これには、{{ic|/etc/webapps/nextcloud/config/config.php}} のパラメータ {{ic|htaccess.RewriteBase}} が重要です。
標準的なインストール場所からファイルパスをカスタマイズしている場合、上記のスクリプトも修正する必要があります。
 
   
 
== 同期 ==
 
== 同期 ==

2023年7月2日 (日) 00:16時点における版

関連記事

Wikipedia より:

Nextcloud はファイルホストサービスを作成して使用するためのクライアントサーバーソフトウェアスイートである。広く使われている Dropbox と同じような機能を持ち、フリーでオープンソースであるため、誰でもプライベートサーバーにインストール・使用することができる。Dropbox などのプロプライエタリサービスと異なり、オープンなアーキテクチャを活用してサーバーに機能 (アプリケーション) を簡単に追加することが可能。

Nextcloud は ownCloud のフォークです。Nextcloud と ownCloud の違いについては [1] を見てください。

目次

セットアップの概要

Nextcloud の完全なインストールには、(少なくとも) 次のコンポーネントが含まれます。

データベース を使用して Nextcloud (つまり、PHP コード) を実行する アプリケーションサーバー とペアになった Web サーバー

この記事では、データベースとして MariaDB/MySQL および PostgreSQL と、Web サーバーとアプリケーションサーバーの次の組み合わせについて説明します。

  • nginx → uWSGI (および uwsgi-plugin-php)
  • nginx → FPM,
  • Apache HTTP サーバー (mod_proxy_uwsgi を使用) → uWSGI (および uwsgi-plugin-php)
  • Apache HTTP サーバー (mod_proxy_fcgi を使用) → FPM

Nextcloud パッケージは ウェブアプリケーションパッケージガイドライン に準拠しています。これにより、特に、専用ユーザー (この場合は nextcloud) で Web アプリケーションを実行することが義務付けられます。これが、ここでアプリケーションサーバーが登場する理由の 1 つです。まったく同じ理由で、php-apache を使用して Apache プロセスで Nextcloud の PHP コードを直接実行することはできなくなりました。

インストール

ノート: パッケージ nextcloud (メタパッケージ php-interpreter への依存関係による) は、php の上に Nextcloud のインストールを構築するか、またはパッケージ php-legacy 安全のために php-legacy を選択することを強くお勧めします。詳細については、php-legacy への移行 を参照してください。この記事の残りの部分では、php-legacy を使用したインストールを想定しています。

nextcloud パッケージをインストールします。尋ねられたら、PHP バージョンとして php-legacy を選択します。これにより、かなりの数の依存パッケージが取り込まれます。すべての 必要な PHP 拡張機能 はこの方法で処理されます。

プレビュー生成用にパッケージ php-legacy-imagicklibrsvg を追加インストールすることをお勧めします (できれば pacman オプション --asdeps を使用した依存パッケージとして)。他のオプションの依存関係については、具体的な設定 (選択したデータベースなど) に応じて後で説明します。

設定

PHP

このガイドは、PHP の中央構成ファイル /etc/php-legacy/php.ini を改ざんするものではなく、他の PHP ベースのアプリケーションの設定に干渉する可能性のない場所に Nextcloud 固有の PHP 構成を配置します。これらの場所は次のとおりです。

  • /etc/webapps/nextcloud/php.ini 内の php.ini の専用コピー (occ コマンドラインツールとバックグラウンドジョブ用)
  • アプリケーションサーバーの構成における対応する設定。これらについては、アプリケーションサーバーに関するセクションで説明します。

/etc/php-legacy/php.ini のコピーを /etc/webapps/nextcloud に作成します。厳密に必要というわけではありませんが、コピーの所有権を変更します。

# chown nextcloud:nextcloud /etc/webapps/nextcloud/php.ini

Nextcloud の インストール手順 にリストされている前提条件のほとんどは、ベア PHP インストールですでに有効になっています。さらに、次の拡張機能を有効にします。

/etc/webapps/nextcloud/php.ini
extension=bcmath
extension=bz2
extension=exif
extension=gd
extension=iconv
extension=intl
extension=sysvsem
; in case you installed php-imagick (as recommended)
extension=imagick

date.timezone を希望のタイムゾーンに設定します。例:

/etc/webapps/nextcloud/php.ini
date.timezone = Europe/Berlin

PHP のメモリ制限を少なくとも 512MiB に引き上げます。

/etc/webapps/nextcloud/php.ini
memory_limit = 512M

オプション: セキュリティを強化するには、open_basedir を構成します。これにより、Nextcloud の PHP コードがファイルを読み書きできる場所が制限されます。実証済みの設定は、

/etc/webapps/nextcloud/php.ini
open_basedir=/var/lib/nextcloud:/tmp:/usr/share/webapps/nextcloud:/etc/webapps/nextcloud:/dev/urandom:/usr/lib/php-legacy/modules:/var/log/nextcloud:/proc/meminfo:/proc/cpuinfo

設定する追加の拡張機能に応じて、このリストを拡張する必要がある場合があります (例: Redis を選択した場合は /run/redis)

この php.ini は、occ コマンド ラインツールとバックグラウンド ジョブ、つまり短時間実行される PHP プロセスによってのみ使用されるため、ここで opcache を設定する必要はありません。

Nextcloud

次のエントリを Nextcloud の設定ファイルに追加します。

/etc/webapps/nextcloud/config/config.php
'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => 'cloud.mysite.com',
  ),    
'overwrite.cli.url' => 'https://cloud.mysite.com/',
'htaccess.RewriteBase' => '/',

指定されたホスト名例 cloud.mysite.com を変更します。Nextcloud インストールがサブフォルダー経由でアクセスできる場合 (例: https://www.mysite.com/nextcloud) overwrite.cli.url htaccess.RewriteBase はそれに応じて変更する必要があります。

システムと環境

Nextcloud 固有の php.iniocc ツールで使用されるようにするには、環境変数 NEXTCLOUD_PHP_CONFIG を設定します。

$ export NEXTCLOUD_PHP_CONFIG=/etc/webapps/nextcloud/php.ini

また、この設定を永続的にするには、この行を .bashrc (または .bash_profile ) に追加します。

プライバシーとセキュリティの予防措置として、セッションデータ用の専用ディレクトリを作成します。

# install --owner=nextcloud --group=nextcloud --mode=700 -d /var/lib/nextcloud/sessions

データベース

MariaDB/MySQL は Nextcloud の標準的な選択肢です。

MySQL または MariaDB データベースが推奨されるデータベースエンジンです。[2]

Nextcloud のデータベースに関するほとんどの情報は、MariaDB/MySQL を扱います。Nextcloud 開発者は、[3] があることを認めています。他のデータベースでは、あまり詳細な専門知識がありません。

PostgreSQL は、MariaDB/MySQL と比較してパフォーマンスが向上し、全体的に癖が少ないと言われています。SQLite は主にテスト/開発インストールでサポートされており、運用環境では推奨されません。 サポートされるデータベースのリスト には、Oracle データベースも含まれています。この製品についてはここでは扱いません。

MariaDB / MySQL

2013 年以降、MariaDB が Arch Linux のデフォルトの MySQL 実装になっているため [4] 、このテキストでは MariaDB についてのみ言及しています。

Nextcloud と同じホストでデータベースを実行する場合は、configure および 起動 mariadb をインストールします (まだ実行していない場合)。詳細については、対応する article を参照してください。mariadb-install-db で MariaDB を初期化することを忘れないでください。セキュリティを強化するために、MariaDB を ローカルの Unix ソケットでのみリッスンする ように設定することをお勧めします。

/etc/my.cnf.d/server.cnf
[mysqld]
skip_networking

Nextcloud 独自のドキュメント を推奨 では、トランザクション分離レベルを READ-COMMITTED に設定します。これは、多くの同時トランザクションによる高負荷が予想される場合に特に重要です。

/etc/my.cnf.d/server.cnf
[mysqld]
transaction_isolation=READ-COMMITTED

binlog_format=ROW を設定するというもう 1 つの推奨事項は廃止されました。最近の MariaDB バージョンのデフォルトの MIXED は、推奨される ROW と少なくとも同じくらい優れています。いずれの場合も、設定はレプリケーションが適用される場合にのみ関係します。

データベースをユーザー root で CLI ツール mysql を起動します。(デフォルトのパスワードは空ですが、できるだけ早く変更してください。)

$ mysql -u root -p

Nextcloud のユーザーとデータベースを作成します。

CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'db-password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES on nextcloud.* to 'nextcloud'@'localhost';
FLUSH privileges;

(db-password は、選択する必要がある DB ユーザー nextcloud の実際のパスワードのプレースホルダーです。) \q でツールを終了します。

ノート: MariaDB は、UTF8 の意味についての理解に欠陥があり、その結果、コードポイント 0x10000 以上の文字 (絵文字など) を保存できなくなります。彼らは、utf8mb4 と呼ばれる新しいエンコーディングを導入することにより、バージョン 5.5 でこの問題を 修正 しました。結論: MariaDB の utf8 は決して使用せず、常に utf8mb4 を使用してください。移行が必要な場合は、[5] を参照してください。

Nextcloud インストールのデータベースとして MariaDB を使用することに決めたので、対応する PHP 拡張機能を有効にする必要があります。

/etc/webapps/nextcloud/php.ini
extension=pdo_mysql

これ以上の設定 (MariaDB に関連する) は必要ありません (Nextcloud の [6] に記載されている情報とは異なります) データベース管理者マニュアル])

次に、Nextcloud のデータベーススキーマを次のように設定します。

$ occ maintenance:install \
    --database=mysql \
    --database-name=nextcloud \
    --database-host=localhost:/run/mysqld/mysqld.sock \
    --database-user=nextcloud \
    --database-pass=db-password \
    --admin-pass=admin-password \
    --admin-email=admin-email \
    --data-dir=/var/lib/nextcloud/data

プレースホルダー (例: db-password) に注意して、適切な値に置き換えてください。このコマンドは、データベースを Nextcloud と同じホスト上で実行していることを前提としています。occ help maintenance:install と入力し、他のオプションについては Nextcloud の ドキュメント を参照してください。このツールに関する Arch 固有の詳細については、"occ" コマンドラインツールの使用 を参照してください。

PostgreSQL

PostgreSQL の詳細については、対応する article を参照してください。 Nextcloud と同じホストでデータベースを実行する場合は、設定 および postgresql起動 (まだ実行していない場合) をインストールします。このシナリオでのセキュリティを強化するには、PostgreSQL を ローカルの UNIX ソケットでのみリッスンする ように構成することをお勧めします。

/var/lib/postgres/data/postgresql.conf
listen_addresses = ''

特に、initdb を使用してデータベースを初期化することを忘れないでください。それが完了したら、PostgreSQL の CLI ツール psql を起動します。

$ sudo -u postgres -- psql

そして、データベースユーザー nextcloud と同じ名前のデータベースを作成します

CREATE USER nextcloud WITH PASSWORD 'db-password';
CREATE DATABASE nextcloud TEMPLATE template0 ENCODING 'UNICODE';
ALTER DATABASE nextcloud OWNER TO nextcloud;
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
\q

(db-password は、選択する必要があるデータベースユーザー nextcloud のパスワードのプレースホルダーです。)

追加パッケージ php-pgsql を依存関係としてインストールし (pacman オプション --asdeps)、/etc/webapps/nextcloud/php.ini で対応する PHP 拡張機能を有効にします。

/etc/webapps/nextcloud/php.ini
extension=pdo_pgsql

Now setup Nextcloud's database schema with:

$ occ maintenance:install \
    --database=pgsql \
    --database-name=nextcloud \
    --database-host=/run/postgresql \
    --database-user=nextcloud \
    --database-pass=db-password \
    --admin-pass=admin-password \
    --admin-email=admin-email \
    --data-dir=/var/lib/nextcloud/data

プレースホルダー (例: db-password) に注意して、適切な値に置き換えてください。このコマンドは、データベースを Nextcloud と同じホスト上で実行していることを前提としています。occ help maintenance:install と入力し、他のオプションについては Nextcloud の ドキュメント を参照してください。このツールに関する Arch 固有の詳細については、"occ" コマンドラインツールの使用 を参照してください。

アプリケーションサーバー

PHP コードの処理に使用できる一般的なアプリケーションサーバーは uWSGI または FPM の 2 つです。FPM はPHPに特化したものです。Web サーバーと FPM の間で使用されるプロトコルは fastcgi です。このツールの ドキュメント には改善の余地があります。一方、uWSGI は、言語固有のプラグインを使用して、少数の言語 で記述されたコードを提供できます。使用されるプロトコルは uwsgi(小文字)です。このツールは 広範囲に文書化されています ですが、膨大な量の文書が混乱を招き、扱いにくくなる可能性があります。

uWSGI

uWSGI には独自の article があります。そこでは役立つ情報がたくさん見つかります。uwsgi とプラグイン uwsgi-plugin-php-legacy を、できれば依存関係として、つまり --asdeps とともにインストールします。Nextcloud のコードを uWSGI で (または uWSGI 内で) 実行するには、1 つの uWSGI 固有の構成ファイル (nextcloud.ini) を構成し、1 つの systemd サービスを定義する必要があります。

警告: 最近、uWSGI、特にその PHP プラグインのメンテナンスがまばらになっていることに言及しなければなりません[7] これはすでに の問題 を引き起こしており、Arch Linux パッケージの管理者 (アップストリームではない) が uWSGI コードにパッチを適用することによってのみ解決できます。

nextcloud.ini

nextcloud パッケージには、適切な場所 /etc/uwsgi/nextcloud.ini にサンプル構成ファイルがすでに含まれています。ほとんどの場合、このファイルを要件と設定に適合させる必要があります。 バージョンに多くのコメント付き変更が含まれている を見つけます (パッケージのバージョンと比較) これは、個人使用 (つまり、中程度の負荷) を目的とした、シンプルな Nextcloud インストールを前提としています。

一般に、有効な拡張機能、拡張機能固有の設定、および open_basedir/etc/webapps/nextcloud/php.ini と同期させます (opcache を除く)

ヒント: /etc/uwsgi/nextcloud.ini への変更は広範囲になる可能性があります。パッケージ nextcloud によって提供される元のファイルに変更があった場合に備えて、パッケージの更新中に nextcloud.ini.pacnew という名前のファイルが作成されます。この後者のファイルの変更をより適切に追跡し、それらを /etc/uwsgi/nextcloud.ini に適用するには、次のアプローチを適用できます。:
  • パッケージによって提供されるファイルのコピーを (パッケージから抽出するなどして) 作成し、それを nextcloud.ini.package として保存します。
  • パッケージ nextcloud の更新により nextcloud.ini.pacnew が生成される場合は、diff nextcloud.ini.package nextcloud.ini.pacnew で変更を識別できます。
  • ご使用のバージョンに適しているかどうかに応じて、変更を nextcloud.ini に選択的に適用します。

uWSGI サービス

uwsgi パッケージは、テンプレートユニットファイル (uwsgi@.service) を提供します。インスタンス ID (ここでは nextcloud) は、適切な構成ファイルを選択するために使用されます。 uwsgi@nextcloud.service有効化 および 起動 します。

このように開始されたサービスが複数 (例: 2 つ) あり、これがリソースの無駄であると感じた場合は、emperor モード の使用を検討してください。

FPM

アプリケーションサーバーとして FPM を使用する場合は、php-legacy-fpm を依存パッケージ (--asdeps) としてインストールしてください。

構成は、FPM によって提供されるすべてのアプリケーションに関連する php.ini のコピーと、アプリケーション (ここでは Nextcloud) に固有のいわゆるプールファイルで構成されます。最後に、systemd サービスファイルを調整する必要があります。

php-fpm.ini

前に述べたように、この記事では、/etc/php-legacy/php.ini にある PHP の中央設定の変更を回避しています。代わりに、FPM 固有のコピーを作成します。

# cp /etc/php-legacy/php.ini /etc/php-legacy/php-fpm.ini

所有者であり、root のみが書き込み可能であることを確認してください (-rw-r--r-- 1 root root ... php-fpm.ini) 演算キャッシュを有効にします。つまり、行のコメントを解除します。

/etc/php-legacy/php-fpm.ini
;zend_extension=opcache

そして、次のパラメータを既存の行 [opcache] の下に配置します。

/etc/php-legacy/php-fpm.ini
opcache.enable = 1
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.memory_consumption = 128
opcache.save_comments = 1
opcache.revalidate_freq = 1
警告: php_value[...] および php_flag[...] を使用してこれらの設定をプールファイルに入れようとしないでください。FPM プロセスは、最初のリクエストで常にクラッシュします。

nextcloud.conf

次に、FPM 用のいわゆるプールファイルを作成する必要があります。これは、Nextcloud アプリケーション用の専用の FPM プロセスを生成する役割を果たす。ファイル /etc/php-legacy/php-fpm.d/nextcloud.conf を作成します - これが 機能バージョン を開始点として使用できます。

もう一度、このプールファイルが root によって所有され、書き込み可能であることを確認してください (つまり、-rw-r--r-- 1 root root ... nextcloud.conf) アクセスログが設定されているかどうかに応じて (上記のサンプル nextcloud.conf の場合)、対応するディレクトリを作成する必要がある場合があります (ここでは {{ic|/var/log/php-fpm-legacy/access}) }) 好みに合わせて設定 (特に pm...php_value[...]、および php_flag[...]) を調整または追加します。php_value[...] および php_flag[..] の設定は、/etc/webapps/nextcloud/php.ini の対応する設定と一致している必要があります。(ただし、/etc/php-legacy/php-fpm.ini ではありません)

php_value[...] および php_flag[...] によって行われた設定は、代わりに php-fpm.ini で指定できます。ただし、php-fpm.ini の設定は、FPM によって提供されるすべてのアプリケーションに適用されることに注意してください。

ヒント: パッケージ php-legacy-fpm には独自のプールファイル www.conf が付属していますが、ここではほとんど役に立ちません。これを取り除く良い方法は、名前を www.conf.package に変更し、コメント行 (セミコロンで始まる行) だけを含むファイル www.conf を作成することです。このようにすると、www.conf は何も行わなくなります。また、新しいバージョンの php-legacy-fpm のインストール中に上書きされることもありません。代わりに、ファイル www.conf.pacnew が作成されます。これを www.conf.package と比較して、nextcloud.conf で再現する必要がある重要な変更がプール ファイルにないかどうかを確認できます。この手順の最後に、www.conf.pacnew の名前を www.conf.package に変更することを忘れないでください。

Systemd サービス

FPM は systemd サービスとして実行されます。Nextcloud を実行できるようにするには、サービス構成を変更する必要があります。これは、ドロップインファイル を使用して実現するのが最適です。

/etc/systemd/system/php-fpm-legacy.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/php-fpm-legacy --nodaemonize --fpm-config /etc/php-legacy/php-fpm.conf --php-ini /etc/php-legacy/php-fpm.ini
ReadWritePaths=/var/lib/nextcloud
ReadWritePaths=/etc/webapps/nextcloud/config
  • ExecStart 行を、前のセクションで説明した php-fpm.ini を使用する起動コマンドに置き換えます。
  • ディレクトリ /var/lib/nextcloud および /etc/webapps/nextcloud/config (および以下のすべて) が書き込み可能になります。 元のサービス定義の ProtectSystem=full により、/usr/boot、および /etc が読み取り専用でマウントされます。FPM プロセスの場合。

php-fpm-legacy サービスを 有効化 および 起動 することを忘れないでください。

/etc を整理整頓する

Nextcloud パッケージは、uWSGI 設定ファイル /etc/uwsgi/nextcloud.ini を無条件に作成します。もちろん、uWSGI の代わりに FPM を実行する場合には役に立ちません (そして、何の害もありません) それでも削除したい場合は、次の行を /etc/pacman.conf に追加してください。

/etc/pacman.conf
# uWSGI configuration that comes with Nextcloud is not needed
NoExtract = etc/uwsgi/nextcloud.ini

Web サーバー

選択できる Web サーバーは豊富にあります。最終的にどのオプションを選択する場合でも、Nextcloud アプリケーションは独自のシステムユーザー nextcloud で実行する必要があることに留意する必要があります。したがって、リクエストを上記のアプリケーションサーバーのいずれかに転送する必要があります。

nginx

nginx の構成は、この記事の範囲をはるかに超えています。詳細については、関連する article を参照してください。詳細な構成については、Nextcloud のドキュメント も参照してください。ほとんどの場合、これを適切な名前のファイル (ここでは例として cloud.mysite.com.conf) を /etc/nginx/sites-available の下にコピーする必要があります。対応するシンボリックリンクを /etc/nginx/sites-enabled に作成します。

上にリンクされている Nextcloud ドキュメントのサンプル nginx 構成を使用する場合は、ルートディレクトリを次のように変更する必要があります。

cloud.mysite.com.conf
  root /usr/share/webapps/nextcloud;

ブロック upstream php-handler { ... } を使用する必要はありません。PHP URI を含むリクエストのアプリケーション サーバーへの転送を処理する location ブロックに fastcgi_pass unix:/run/php-fpm-legacy/nextcloud.sock; を指定するだけです。FPM の代わりに uWSGI を使用する場合は、この location ブロックを次のように置き換えます。

cloud.mysite.com.conf
location ~ \.php(?:$|/) {
    include uwsgi_params;
    uwsgi_modifier1 14;
    # Avoid duplicate headers confusing OC checks
    uwsgi_hide_header X-Frame-Options;
    uwsgi_hide_header X-XSS-Protection;
    uwsgi_hide_header X-Content-Type-Options;
    uwsgi_hide_header X-Robots-Tag;
    uwsgi_hide_header X-Download-Options;
    uwsgi_hide_header X-Permitted-Cross-Domain-Policies;
    uwsgi_pass unix:/run/uwsgi/nextcloud.sock;
}

適応する必要がある可能性のあるもの (すべてではありません):

  • サーバー名 (server_name 句2倍)、つまり Nextcloud インストールが到達可能な URL のサーバー部分です。
  • SSL/TLS に使用する証明書とキーの名前。
  • アクセスログをどこに書き込むか。
  • Certbot (または他の ACME クライアント) がドメイン検証チャレンジを置く場所。ここでは、try_files の代わりに alias を使用する方が適切でしょう。
  • Nextcloud のインストール先へのパス。(URL のサーバー名&ポートセクションの右側の部分)
  • 使用しているアプリケーションサーバー (uWSGI または FPM)、つまり PHP コードをトリガーする必要があるリクエストを nginx がどこにどのように渡すか。(上記参照)
  • OCSP_stapling を設定します。

nginx は FastCGI と uwsgi の両方のプロトコルをネイティブにサポートしているため、追加のモジュールをインストールする必要はありません。

Apache HTTP server

Apache HTTP Server に関する記事には役立つ情報がたくさんあります。Nextcloud のドキュメントには サンプル設定 が含まれており、/usr/share/doc/nextcloud/apache.example.conf にもあります。どちらも暗黙的に mod_php に依存していますが、これはもう使用できません。 mod_proxy_fcgi または mod_proxy_uwsgi を適用する必要があります。

Apache と FPM を統合する 方法に関する情報は、この Wiki にあります。uWSGI のドキュメントには、uWSGI および mod_proxy_uwsgi を使用して Apache と PHP を統合する 方法に関する情報が記載されています。Apache パッケージには mod_proxy_fcgimod_proxy_uwsgi の両方のモジュールが付属していることに注意してください。必要に応じてロードする必要があります。

Nextcloud を実行するには、次の Apache モジュールが必要です。

/etc/httpd/conf/httpd.conf
# these are already loaded in a standard Apache installation
LoadModule headers_module modules/mod_headers.so
LoadModule env_module modules/mod_env.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
LoadModule setenvif_module modules/mod_setenvif.so

# these need to be uncommented explicitely
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule proxy_module modules/mod_proxy.so

# either this one in case you use FPM
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# or this one in case you opt for uWSGI
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so

また、TLS 設定パラメータを取り込むには、次のディレクティブのコメントを解除します。

/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-ssl.conf

TLS 設定を最適化する方法の詳細については、Mozilla の SSL configurator を参照してください。

Nextcloud インストールへのアクセス方法に応じて、次の 2 つのサンプル設定ファイルを参照してください。

  • Nextcloud のインストールが専用ホスト名でアクセスされる場合 (例:https://cloud.mysite.com/)、/etc/httpd/conf/extra/httpd-vhosts.confこれ を記述してください。
  • Nextcloud が Web サイトのサブフォルダ (例:https://www.mysite.com/nextcloud/) にインストールされている場合は、/etc/httpd/conf/httpd.confこれ を記述してください。

もちろん、これらのサンプル設定ファイルを実際の設定に適合させる必要があります。uWSGI を使用する場合は、SetHandler ディレクティブを SetHandler "proxy:unix:/run/uwsgi/nextcloud.sock|uwsgi://nextcloud/" に置き換えます。

Nextcloud パッケージには、多くの書き換えやヘッダー処理がすでに行われている .htaccess が付属しています。occ maintenance:update:htaccess を実行して、このファイルを調整します。これには、/etc/webapps/nextcloud/config/config.php のパラメータ htaccess.RewriteBase が重要です。

同期

デスクトップ

公式クライアントは owncloud-client または nextcloud-client パッケージでインストールできます。開発版の owncloud-client-gitAUR パッケージも存在します。

カレンダー

Mozilla ThunderbirdLightning カレンダーを使って Nextcloud のカレンダーにアクセスするには以下の URL を使います:

https://ADDRESS/remote.php/caldav/calendars/USERNAME/CALENDARNAME

Kontact や Evolution など CalDAV に対応するプログラムを使って Nextcloud のカレンダーにアクセスするには、以下の URL を使います:

https://ADDRESS/remote.php/caldav

詳しくは 公式ドキュメント を見てください。

連絡先

Thunderbird と連絡先を同期するには、SOGo フロントエンドLightning エクステンションをインストールして公式ドキュメントの 手順 に従う必要があります。

davfs2 でファイルをマウントする

ownCloud を永続的にマウントしたい場合、まず davfs2 をインストールしてください (Davfs2 に説明があります)。

もし ownCloud が https://own.example.com にある場合、WebDAV の URL は https://own.example.com/remote.php/webdav になります (ownCloud 6.0 現在)。

ownCloud をマウントするには、次のコマンドを使います:

# mount -t davfs https://own.example.com/remote.php/webdav /path/to/mount

/etc/fstab にエントリを作成することもできます:

/etc/fstab
https://own.example.com/remote.php/webdav /path/to/mount davfs rw,user,noauto 0 0
ヒント: 自動でマウントしたい場合、Davfs2#接続情報の保存で説明されているようにファイルにユーザー名 (と必要であればパスワード) を保存できます。
ノート: ディレクトリは作成・コピーできるのに、ファイルの作成やコピーができない場合、Davfs2#ファイルの作成やコピーができないを見てください。

GNOME Files (Nautilus) でファイルをマウントする

Nautilus ('+ Other Locations') では WebDAV プロトコルを使ってファイルに直接アクセスできます。Nextcloud のインストール Web GUI で表示されるリンクを使ってください (通常は https://example.org/remote.php/webdav/)。ただしプロトコルの名前は 'https' から 'davs' に置き換えてください。Nautilus は接続時にユーザー名とパスワードを要求します。

Android

Nextcloud の公式アプリは Google PlayF-Droid からダウンロードできます。

連絡先やカレンダーの同期を有効化するには (Android 4 以上):

  1. DAVdroid (Play Store, F-Droid) をダウンロード。
  2. httpd.confmod_rewrite.so を有効化。
  3. Account 設定で DAVdroid アカウントを新しく作成して、短いサーバーアドレス (例: https://cloud.example.com、リダイレクトをウェブサーバーで正しく設定していれば /remote.php/{carddav,webdav} の部分は不要です。DAVdroid は自動的に URL を検索します) とログイン名・パスワードを指定する。

iOS

App Store から Nextcloud の公式アプリをダウンロードしてください。

SABnzbd

SABnzbd を使う場合、sabnzbd.ini ファイルに以下を設定すると良いでしょう:

folder_rename 0

というのは ownCloud はアップロードされたファイルを速攻でスキャンするからです。展開された接頭辞などを SABnzbd が削除することを予防します。

ヒントとテクニック

サブディレクトリで ownCloud を実行

httpd.conf から読み込まれるデフォルトの owncloud.conf では、ownCloud はポート 80 と localhost ドメインを使用します。

サブディレクトリで ownCloud を使いたい場合、/etc/httpd/conf/extra/owncloud.conf を編集して <VirtualHost *:80> ... </VirtualHost> という部分をコメントアウトしてください。

uwsgi で owncloud を使用する場合、以下の nginx 設定が使えます:

/etc/nginx/conf.d/owncloud.conf
location = /.well-known/carddav {
  return 301 $scheme://$host/owncloud/remote.php/dav;
}

location = /.well-known/caldav {
  return 301 $scheme://$host/owncloud/remote.php/dav;
}

location /.well-known/acme-challenge { }

location ^~ /owncloud {

  root /usr/share/webapps;

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

  # Disable gzip to avoid the removal of the ETag header
  gzip off;

  # Uncomment if your server is build with the ngx_pagespeed module
  # This module is currently not supported.
  #pagespeed off;

  location /owncloud {
    rewrite ^ /owncloud/index.php$uri;
  }

  location ~ ^/owncloud/(?:build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
  }

  location ~ ^/owncloud/(?:\.|autotest|occ|issue|indie|db_|console) {
    deny all;
  }

  location ~ ^/owncloud/(?:updater|ocs-provider)(?:$|/) {
    try_files $uri/ =404;
    index index.php;
  }

  location ~ ^/owncloud/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
    include uwsgi_params;
    uwsgi_modifier1 14;
    # Avoid duplicate headers confusing OC checks
    uwsgi_hide_header X-Frame-Options;
    uwsgi_hide_header X-XSS-Protection;
    uwsgi_hide_header X-Content-Type-Options;
    uwsgi_hide_header X-Robots-Tag;
    uwsgi_pass unix:/run/uwsgi/owncloud.sock;
  }

  # Adding the cache control header for js and css files
  # Make sure it is BELOW the PHP block
  location ~* \.(?:css|js) {
    try_files $uri /owncloud/index.php$uri$is_args$args;
    add_header Cache-Control "public, max-age=7200";
    # Add headers to serve security related headers  (It is intended
    # to have those duplicated to the ones above)
    # Before enabling Strict-Transport-Security headers please read
    # into this topic first.
    # add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    # Optional: Don't log access to assets
    access_log off;
  }

  location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg) {
    try_files $uri /owncloud/index.php$uri$is_args$args;
    # Optional: Don't log access to other assets
    access_log off;
  }
}

Docker

DockerownCloud あるいは Nextcloud リポジトリを見てください。

ファイルマネージャからアップロード・共有

shareLinkCreator はサポートされているファイルマネージャから ownCloud にファイルをアップロードする機能を提供します。アップロードしたファイルのリンクをメールなどで配ることが可能です。

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

Nextcloud では一部のタスクを定期的に実行する必要があり、デフォルトでは AJAX が使われます。しかしながら AJAX は信頼性の高い方法とはいえないため Cron の使用が推奨されています。Arch Linux は systemd を搭載しているため、systemd タイマーを使用すると良いでしょう。

まずはサービスを作成:

/etc/systemd/system/nextcloudcron.service
[Unit]
Description=Nextcloud cron.php job

[Service]
User=http
ExecStart=/usr/bin/php -f /usr/share/webapps/nextcloud/cron.php

[Install]
WantedBy=basic.target

そしてサービスのタイマーを作成:

/etc/systemd/system/nextcloudcron.timer
[Unit]
Description=Run Nextcloud cron.php every 15 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=15min
Unit=nextcloudcron.service

[Install]
WantedBy=timers.target

作成したら nextcloudcron.timer起動有効化してください。

タイマーの実行を確認するには:

# systemctl list-timers

Collabora Online Office の統合

公式 Docker イメージを使う

docker パッケージをインストールして collabora のファイルを用意して Collabora サーバーをセットアップしてください。

docker.service起動有効化してください。

必要なバイナリをダウンロード:

# docker pull collabora/code

それから Collabora サーバーをインストールしてください。cloud//.example//.com は collabora ではなく nextcloud のドメインにしてください:

# docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\\.example\\.com' --restart always --cap-add MKNOD collabora/code

文字列は正規表現として評価されるため、ドットは全てバックスラッシュ (\) 2回でエスケープしてください。複数の Nextcloud で docker コンテナを使用する場合、'domain=cloud\\.example\\.com\|second\\.example\\.com' を使ってください (ホストは全て \|. で区切ります)。`localhost` をドメインとして使用する場合は --net host を追加して docker コンテナが Nextcloud サーバーにアクセスできるようにする必要があります。

Nginx

nextcloud のドメイン設定に以下を追加するか、/etc/nginx/conf.d/ ディレクトリに新しい設定ファイルを作成してください (office.example.comssl_certificate は適切な値に置き換えてください):

/etc/nginx/conf.d/example.conf
 upstream office.example.com {
    server 127.0.0.1:9980;
}

server {
    listen 443 ssl;
    server_name office.example.com;
 
    ssl_certificate /etc/letsencrypt/live/office.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/office.example.com/privkey.pem;

    # static files
    location ^~ /loleaflet {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $host;
    }

    # WOPI discovery URL
    location ^~ /hosting/discovery {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $host;
    }

    # Main websocket
    location ~ /lool/(.*)/ws$ {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 36000s;
    }

    # Admin Console websocket
    location ^~ /lool/adminws {
	proxy_buffering off;
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 36000s;
    }

    # download, presentation and image upload
    location ~ /lool {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $host;
    }
}

設定したら nginx を再起動してください。

Apache

nextcloud の設定ファイルに以下を追加してください:

/etc/httpd/conf/extra/nextcloud.conf
<VirtualHost *:443>
ServerName office.nextcloud.com:443

# SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
SSLEngine on
SSLCertificateFile /path/to/signed_certificate
SSLCertificateChainFile /path/to/intermediate_certificate
SSLCertificateKeyFile /path/to/private/key
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder     on

# Encoded slashes need to be allowed
AllowEncodedSlashes NoDecode

# Container uses a unique non-signed certificate
SSLProxyEngine On
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off

# keep the host
ProxyPreserveHost On

# static html, js, images, etc. served from loolwsd
# loleaflet is the client part of LibreOffice Online
ProxyPass           /loleaflet https://127.0.0.1:9980/loleaflet retry=0
ProxyPassReverse    /loleaflet https://127.0.0.1:9980/loleaflet

# WOPI discovery URL
ProxyPass           /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse    /hosting/discovery https://127.0.0.1:9980/hosting/discovery

# Main websocket
ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon

# Admin Console websocket
ProxyPass   /lool/adminws wss://127.0.0.1:9980/lool/adminws

# Download as, Fullscreen presentation and Image upload operations
ProxyPass           /lool https://127.0.0.1:9980/lool
ProxyPassReverse    /lool https://127.0.0.1:9980/lool
</VirtualHost>

設定したら apache を再起動してください。

Nextcloud アプリのインストール

Apps セクションから “Office & Text” を選択して “Collabora Online” アプリをインストールしてください。管理パネルから Collabora Online タブを選択して設定したサーバーのドメインを指定してください。

Arch Linux のパッケージを使う

collabora-online-server-nodockerAUR パッケージは Collabora Office (デスクトップスイート) と “lool” (LibreOffice OnLine) ベースの “CODE” (Collabora Online Development Edition) サーバーをインストールします。

/etc/loolwsd/loolwsd.xml ファイルを以下のように変更してください:

  • `config > server_name` に公開する Nextcloud のアドレスのホストとポートを記入してください (例: example.org:443)。
  • `config > ssl > enable` は false にしてください (ウェブブラウザ —HTTPS→ プロキシ —HTTP→ loolwsd)。
  • `config > ssl > termination` は true にしてください。
  • `config > storage > wopi > host` はプロキシサーバーの実際のホストネームに合わせてください (例: `(?:.*\.)?example\.org`)。
  • `config > admin_console > username` と `config > admin_console > password` は適当に設定してください。

それから loolwsd.service を起動・有効化して、/usr/share/doc/loolwsd/example.nginx.conf に書かれているように Nginx を設定してください。

トラブルシューティング

Environment variables not available

/etc/php/php-fpm.d/www.conf の以下の行をアンコメントしてください [8]:

env[PATH] = /usr/local/bin:/usr/bin:/bin

自己署名証明書が使えない

ownCloud は cURLSabreDAV を使って WebDAV が有効になっているかチェックします。(LAMP の記事に書かれているように) 自己署名証明書で SSL/TLS を使って、ownCloud の管理者ページにアクセスすると、以下のエラーメッセージが表示されます:

Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.

LAMP のチュートリアルにしたがって設定を行っている場合、以下の手順を実行してください:

証明書のためのローカルディレクトリを作成して、そこに LAMP の証明書をコピーします。これによって ca-certificates のアップデートによって証明書が上書きされるのを防ぎます。

# cp /etc/httpd/conf/server.crt /usr/share/ca-certificates/WWW.EXAMPLE.COM.crt

WWW.EXAMPLE.COM.crt/etc/ca-certificates.conf に追加:

WWW.EXAMPLE.COM.crt

そして証明書を更新:

# update-ca-certificates

httpd サービスを再起動して証明書を有効にしてください。

これで動作しない場合は /etc/php/php.ini で mod_curl を無効化してみてください。

Android デバイスの自己署名証明書

LAMP#TLS/SSL に書かれているように SSL のセットアップをした場合、古いバージョンの DAVdroid では証明書が信頼できないとして接続が拒否されます。以下のようにサーバーに証明書を作成できます:

# openssl x509 -req -days 365 -in /etc/httpd/conf/server.csr -signkey /etc/httpd/conf/server.key -extfile android.txt -out CA.crt
# openssl x509 -inform PEM -outform DER -in CA.crt -out CA.der.crt

android.txt ファイルに以下を記述してください:

basicConstraints=CA:true

そして Android 端末に CA.der.crt をインポートしてください:

Android 端末の SD カードに CA.der.crt ファイルを保存してください (メールの添付ファイルなどを使って保存してください)。ファイルはルートディレクトリに配置してください。そして Settings > Security > Credential storage から Install from device storage を選択します。.crt ファイルが検出されて、証明書の名前の入力が求められます。証明書をインポートしたら、Settings > Security > Credential storage > Trusted credentials > User から確認できるはずです。

ソース: [9]

CAdroid を使ってサーバーから直接証明書をインポートする方法もあります。

Cannot write into config directory!

PHP やウェブサーバーの設定ファイル (例: /etc/httpd/conf/extra/nextcloud.conf) で open_basedir を設定している場合、/etc/webapps が含まれていることを確認してください。

変更を適用するにはウェブサーバーの再起動が必要です。

Cannot create data directory

PHP やウェブサーバーの設定ファイル (例: /etc/httpd/conf/extra/nextcloud.conf) で open_basedir を設定している場合、data ディレクトリが含まれていることを確認してください。

変更を適用するにはウェブサーバーの再起動が必要です。

CSync failed to find a specific file.

おそらく証明書に問題があります。証明書を再度作成して、名前を空にしないようにしてください。そうしないとエラーがまた発生します。

# openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt

ログイン後に白いページが表示される

おそらく新しくインストールしたアプリが原因です。修正するには、こちら に書かれているように occ コマンドを使用します。アプリを全て確認するには:

# sudo -u http php /usr/share/webapps/nextcloud/occ app:list

問題のアプリを無効化するには (Nextcloud を標準のディレクトリにインストールした場合):

# sudo -u http php /usr/share/webapps/nextcloud/occ app:disable <nameOfExtension>

もしくは phpMyAdmin を使って oc_appconfig テーブルを編集するか (運が良いことにテーブルに edit オプションがある場合) mysql で手動で修正してください:

$ mysql -u root -p owncloud
MariaDB [owncloud]> delete from oc_appconfig where appid='<nameOfExtension>' and configkey='enabled' and configvalue='yes';
MariaDB [owncloud]> insert into oc_appconfig (appid,configkey,configvalue) values ('<nameOfExtension>','enabled','no');

テーブルから関連する設定が削除されるので、後でまた追加してください。

GUI の同期クライアントで接続できない

HTTP のベーシック認証を使っている場合、status.php が対象から外れていることを確認してください。このファイルは誰からでもアクセスできるようにしておく必要があります [10]

ファイルをアップロードすると 'Integrity constraint violation...' エラーが表示される

ownCloud の同期クライアントで以下のエラーが表示されることがあります:

SQLSTATE[23000]: Integrity constraint violation: ... Duplicate entry '...' for key 'fs_storage_path_hash')...

File Locking アプリの問題が原因です。ウェブーサーバーの設定の衝突が発生しているのに対処できていません。エラーが発生しない Transactional File Locking が存在しますが、Redis の php キャッシュを使う必要があります。redisphp-redis をインストールして、現在使っている php のキャッシュをコメントアウトして、/etc/php/conf.d/redis.ini から extension=redis.so をアンコメントしてください。そして config.php に以下の変更を加えます:

'memcache.local' => '\OC\Memcache\Redis',
'filelocking.enabled' => 'true',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     'timeout' => 0.0,
       ),

設定したら Redis再起動してください。

最後に、File Locking アプリを無効化して、Transational File Locking を使うようにしてください。

管理者ページのサーバーステータスに 'Transactional File Locking Enabled' が表示され、同期の問題が消えるはずです。

"Cannot write into apps directory"

公式の管理者マニュアル に書かれているように、http ユーザーからアプリディレクトリに書き込みができるようにするか、appstoreenabledfalse に設定する必要があります。

MIME タイプエラーによってインストールしたアプリがブロックされる

apps フォルダを nextcloud のインストールディレクトリの外に配置した場合、ウェブサーバーが正しく設定されているか確認してください。

nginx の場合、以下のように設定ファイルにデフォルトで含まれていないフォルダの location ブロックを追加する必要があります:

location ~ /apps2/(.*)$ {
    alias /var/www/nextcloud/apps/$1;
}

nginx.conf に推奨設定を記述したのにセキュリティの警告が表示される

管理者マニュアルにしたがって Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, X-Robots-Tag を設定しても管理者ページの上部に警告が表示されることがあります。

考えられる原因として ownCloud 自身が設定を行っていて、uWSGI によって nginx に設定が重複して追加されてしまっている可能性があります:

$ curl -I https://domain.tld
...
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: Sameorigin
X-Robots-Tag: none
Strict-Transport-Security: max-age=15768000; includeSubDomains; preload;
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Robots-Tag: none

fast_cgi のサンプル設定には重複を避けるためのパラメータが存在しますが (fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice)、uwsgi と nginx を使用する場合、nginx.conf の uwsgi の部分に以下の修正を加えることで解決します:

 /etc/nginx/nginx.conf
...
        # pass all .php or .php/path urls to uWSGI
        location ~ ^(.+\.php)(.*)$ {
            include uwsgi_params;
            uwsgi_modifier1 14;
            # hode following headers received from uwsgi, because otherwise we would send them twice since we already add them in nginx itself
            uwsgi_hide_header X-Frame-Options;
            uwsgi_hide_header X-XSS-Protection;
            uwsgi_hide_header X-Content-Type-Options;
            uwsgi_hide_header X-Robots-Tag;
            uwsgi_hide_header X-Frame-Options;
            #Uncomment line below if you get connection refused error. Remember to commet out line with "uwsgi_pass 127.0.0.1:3001;" below
            uwsgi_pass unix:/run/uwsgi/owncloud.sock;
            #uwsgi_pass 127.0.0.1:3001;
        }
...

"Reading from keychain failed with error: 'No keychain service available'"

Gnome の場合、libgnome-keyringgnome-keyring パッケージをインストールすることで解決します。KDE の場合、libgnome-keyringqtkeychain[リンク切れ: 置換パッケージ: qtkeychain-qt5] パッケージをインストールしてください。

FolderSync: "Method Not Allowed"

FolderSync は /nextcloud/remote.php/webdav へのアクセス権限を必要とするため、/etc/httpd/conf/extra/nextcloud.conf にエイリアスを作成してください:

<IfModule mod_alias.c>
  Alias /nextcloud /usr/share/webapps/nextcloud/
  Alias /owncloud /usr/share/webapps/nextcloud/
</IfModule>

Nextcloud 13 : "Unable to load dynamic library 'mcrypt.so"

php 7.2 から mcrypt 拡張は削除されました [11]

mcrypt に関する Nextcloud のエラーを修正するには、PECL で php 7.2 に対応した拡張をインストールします。

1. php-pear をインストール (インストールしていない場合)。

2. PECL チャンネルを更新:

# pecl channel-update pecl.php.net

3. mcrypt 1.0.1 をインストール:

# pecl install mcrypt-1.0.1

4. /etc/php/php.conf の以下の行をアンコメント:

;extension=mcrypt.so

参照