「Nextcloud」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(同期)
72行目: 72行目:
 
==== Apache ====
 
==== Apache ====
 
Apache の設定ファイルを設定ディレクトリにコピーしてください:
 
Apache の設定ファイルを設定ディレクトリにコピーしてください:
# cp /etc/webapps/owncloud/apache.example.conf /etc/httpd/conf/extra/owncloud.conf
+
# cp /etc/webapps/nextcloud/apache.example.conf /etc/httpd/conf/extra/nextcloud.conf
   
必要に応じてファイルの設定を変更してください。デフォルトでは {{ic|/owncloud}} で {{ic|/usr/share/webapps/owncloud}} が表示されるエイリアスが記述されています。
+
必要に応じてファイルの設定を変更してください。デフォルトでは {{ic|/nextcloud}} で {{ic|/usr/share/webapps/nextcloud}} が表示されるエイリアスが記述されています。
   
 
設定したら {{ic|/etc/httpd/conf/httpd.conf}} に以下を追加してください:
 
設定したら {{ic|/etc/httpd/conf/httpd.conf}} に以下を追加してください:
Include conf/extra/owncloud.conf
+
Include conf/extra/nextcloud.conf
   
 
Nextcloud がインストールされているルートディレクトリ (例: {{ic|/usr/share/webapps/nextcloud}}) にウェブサーバーのユーザー {{ic|http}} からアクセスできることを確認してください。
 
Nextcloud がインストールされているルートディレクトリ (例: {{ic|/usr/share/webapps/nextcloud}}) にウェブサーバーのユーザー {{ic|http}} からアクセスできることを確認してください。
94行目: 94行目:
 
server_names_hash_bucket_size 64;
 
server_names_hash_bucket_size 64;
 
include conf.d/*.conf;
 
include conf.d/*.conf;
  +
  +
[https://docs.nextcloud.com/server/11/admin_manual/installation/nginx_nextcloud_9x.html ドキュメント] に従って設定ファイル {{ic|/etc/nginx/conf.d/nextcloud.conf}} を作成してください。Arch のパッケージでは {{ic|/var/www/}} ではなく {{ic|/usr/share/webapps/}} にインストールされるため {{ic|root}} のディレクトリを変える必要があります。
  +
  +
さらに、以下の部分を:
  +
  +
upstream php-handler {
  +
server 127.0.0.1:9000;
  +
#server unix:/var/run/php5-fpm.sock;
  +
}
  +
  +
以下のように変更してください:
  +
  +
upstream php-handler {
  +
#server 127.0.0.1:9000;
  +
server unix:/run/php-fpm/php-fpm.sock;
  +
}
   
 
[[Let’s Encrypt]] を使用してセキュアな証明書を入手することが推奨されています。[[#セキュリティの強化]]を見てください。
 
[[Let’s Encrypt]] を使用してセキュアな証明書を入手することが推奨されています。[[#セキュリティの強化]]を見てください。
108行目: 124行目:
   
 
== セキュリティの強化 ==
 
== セキュリティの強化 ==
  +
  +
[https://docs.nextcloud.com/server/11/admin_manual/configuration_server/harden_server.html Nextcloud Hardening and Security] の記事に一般的なトピックの説明があります。[https://scan.nextcloud.com/ セキュリティスキャナ] も参照。
  +
 
=== Let's Encrypt ===
 
=== Let's Encrypt ===
 
==== nginx ====
 
==== nginx ====
318行目: 337行目:
 
== Arch パッケージのアップデートに伴うメンテナンス ==
 
== Arch パッケージのアップデートに伴うメンテナンス ==
   
Arch の owncloud パッケージを pacman で更新した場合、ウェブインターフェイスから手動で関連ファイルのアップデートを実行する必要があります。もしくは、シェルから ''http'' ユーザーとして {{ic|/usr/share/webapps/owncloud/occ upgrade}} を実行することでもアップデートできます:
+
Arch の nextcloud パッケージを pacman で更新した場合、ウェブインターフェイスから手動で関連ファイルのアップデートを実行する必要があります。もしくは、シェルから ''http'' ユーザーとして {{ic|/usr/share/webapps/nextcloud/occ upgrade}} を実行することでもアップデートできます:
# sudo -u http /usr/share/webapps/owncloud/occ upgrade
+
# sudo -u http /usr/share/webapps/nextcloud/occ upgrade
   
 
{{Note|上記のアップデートを行わないとモバイルアプリから接続できなくなります。}}
 
{{Note|上記のアップデートを行わないとモバイルアプリから接続できなくなります。}}
416行目: 435行目:
 
# This module is currently not supported.
 
# This module is currently not supported.
 
#pagespeed off;
 
#pagespeed off;
 
error_page 403 /owncloud/core/templates/403.php;
 
error_page 404 /owncloud/core/templates/404.php;
 
   
 
location /owncloud {
 
location /owncloud {
601行目: 617行目:
   
 
変更を適用するには httpd あるいは php-fpm サービスを再起動します。
 
変更を適用するには httpd あるいは php-fpm サービスを再起動します。
  +
  +
また PHP 7 はデフォルトでは open_basedir を使用しないため、必要なデータディレクトリの所有者・所有ユーザーを {{ic|root:http}} にしてパーミッションを 770 に変更することでも解決できます (http はウェブサーバーを実行するユーザーのグループに置き換えてください)。
   
 
=== CSync failed to find a specific file. ===
 
=== CSync failed to find a specific file. ===
655行目: 673行目:
 
=== "Cannot write into apps directory" ===
 
=== "Cannot write into apps directory" ===
   
[http://doc.owncloud.org/server/6.0/admin_manual/configuration/configuration_apps.html 公式の管理者マニュアル] に書かれているように、http ユーザーからアプリディレクトリに書き込みができるようにするか、{{ic|appstoreenabled}} を {{ic|false}} に設定する必要があります。
+
[https://doc.owncloud.org/server/latest/admin_manual/installation/apps_management_installation.html 公式の管理者マニュアル] に書かれているように、http ユーザーからアプリディレクトリに書き込みができるようにするか、{{ic|appstoreenabled}} を {{ic|false}} に設定する必要があります。
   
 
また、ドキュメントには書かれていませんが、{{ic|/etc/php/php.ini}} の {{ic|open_basedir}} 行にディレクトリを指定してください。
 
また、ドキュメントには書かれていませんが、{{ic|/etc/php/php.ini}} の {{ic|open_basedir}} 行にディレクトリを指定してください。

2017年5月17日 (水) 22:11時点における版

関連記事

Wikipedia より:

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

Nextcloud と ownCloud の違いについては [1] を見てください。

目次

要件

Nextcloud は以下のコンポーネントを必要とします:

先に進む前にまずは必要なコンポーネントをインストールしてください。

インストール

nextcloud パッケージをインストールしてください。

セットアップ

Nextcloud をセットアップするには PHP が動作するウェブサーバー・データベースサーバーが必要です。

PHP の設定

ヒント: 必要な全ての PHP モジュールについては、上流のドキュメントを参照してください: Nextcloud 11.0

PHP#gd, php-intl, php-mcrypt を追加モジュールとしてインストールしてください。

使用するデータベースバックエンドに応じて設定が必要です:

キャッシュを活用することでパフォーマンスを改善することができます。詳しくは公式ドキュメントの メモリキャッシュの設定 を見てください。

データベースの設定

Nextcloud を動かすには SQL データベースをセットアップする必要があります。データベースを設定したら、まずは管理者アカウントを作成する必要があります。

MariaDB

ノート: /etc/mysql/my.cnfbinlog_formatmixed に設定することが強く推奨されています [2]

以下は MariaDB のデータベースとユーザーを設定する例です:

$ mysql -u root -p
mysql> CREATE DATABASE `nextcloud` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> CREATE USER `nextcloud`@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON `nextcloud`.* TO `nextcloud`@`localhost`;
mysql> \q

PostgreSQL

以下は PostgreSQL のデータベースとユーザーを設定する例です:

$ sudo -u postgres createuser -h localhost -P nextcloud
Enter password for new role:
Enter it again:
$ sudo -u postgres createdb -O nextcloud nextcloud

ウェブサーバーの設定

警告: 平文の HTTP ではなく TLS/SSL (HTTPS) を使用することが推奨されます。詳しくは Apache#TLS/SSLNginx#TLS/SSL を参照してください。

使用するウェブサーバーによって、必要な設定は変わります。

Apache

Apache の設定ファイルを設定ディレクトリにコピーしてください:

# cp /etc/webapps/nextcloud/apache.example.conf /etc/httpd/conf/extra/nextcloud.conf

必要に応じてファイルの設定を変更してください。デフォルトでは /nextcloud/usr/share/webapps/nextcloud が表示されるエイリアスが記述されています。

設定したら /etc/httpd/conf/httpd.conf に以下を追加してください:

Include conf/extra/nextcloud.conf

Nextcloud がインストールされているルートディレクトリ (例: /usr/share/webapps/nextcloud) にウェブサーバーのユーザー http からアクセスできることを確認してください。

その後 Apache (httpd.service) を再起動してください。

WebDAV

OwnCloud には WebDAV の実装が付いていますが、Apache の実装と衝突する可能性があります。WebDAV を有効にする場合 (デフォルトでは有効になっていません)、/etc/httpd/conf/httpd.confmod_davmod_dav_fs モジュールを無効にしてください。詳しくは [3] を参照。

Nginx

クラウドの設定ファイルを保存するための空ディレクトリを作成してください:

# mkdir /etc/nginx/conf.d/

/etc/nginx/nginx.conf の "http" セクションに以下の行を追加してください:

server_names_hash_bucket_size 64;
include conf.d/*.conf;

ドキュメント に従って設定ファイル /etc/nginx/conf.d/nextcloud.conf を作成してください。Arch のパッケージでは /var/www/ ではなく /usr/share/webapps/ にインストールされるため root のディレクトリを変える必要があります。

さらに、以下の部分を:

upstream php-handler {
   server 127.0.0.1:9000;
   #server unix:/var/run/php5-fpm.sock;
}

以下のように変更してください:

upstream php-handler {
   #server 127.0.0.1:9000;
   server unix:/run/php-fpm/php-fpm.sock;
}

Let’s Encrypt を使用してセキュアな証明書を入手することが推奨されています。#セキュリティの強化を見てください。

PHP-FPM の設定

Nginx#PHP を動かすに書かれているようにして PHP-FPM を設定してください。

/etc/php/php-fpm.d/www.confenv[PATH] = /usr/local/bin:/usr/bin:/bin をアンコメントしてから php-fpm.service再起動して変更を適用してください。

初期化

ウェブブラウザで Nextcloud をインストールした PC のアドレスを開いてください (例: https://www.examples.com/nextcloud)。指示に従って管理者アカウントを追加し先に作成したデータベースを選択します。

セキュリティの強化

Nextcloud Hardening and Security の記事に一般的なトピックの説明があります。セキュリティスキャナ も参照。

Let's Encrypt

nginx

こちらのファイル をテンプレートとして使ってクラウド設定の /etc/nginx/conf.d/cloud-initial.conf を作成してください。テンプレートファイルの "@@FQDN@@" は実際に使用する FQDN に置き換えてください。最初に暗号化されない設定を使うにはサーバーの証明書を生成する必要があります。Let’s Encrypt に書かれている手順に従ってサーバーの暗号化証明書を作成してください。

証明書を作成できたら /etc/nginx/conf.d/cloud-initial.conf を新しいファイル /etc/nginx/conf.d/cloud.conf に置き換えてください (it may be safely renamed so long as it does not end in ".conf" or simply deleted)。こちらのファイル をテンプレートとして使うことができます。"@@FQDN@@" は実際に使用する FQDN に置き換えてください。その後 nginx.service起動有効化してください。

uWSGI

uwsgi-plugin-php による uWSGI アプリケーションサーバーを使うことで ownCloud を固有のプロセスで動かすことができます。システム全体の php.ini を編集しなくても、インスタンスの PHP 設定を定義することができるため、ウェブアプリケーションの設定を分離することが可能です。uWSGI 自体にリソースの使用を制限するための機能が豊富に含まれており、アプリケーションのセキュリティを強化したり、専用のユーザーで動くようにプロセスを分けられます。

PHP-FPM の設定と異なるところは location ~ \.php(?:$|/) {} ブロックだけです:

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_pass unix:/run/uwsgi/owncloud.sock;
}

それから uWSGI の設定ファイルを作成してください:

/etc/uwsgi/owncloud.ini
[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/owncloud:/etc/webapps/owncloud:/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/owncloud/data

; port of php directives set upstream in /usr/share/webapps/owncloud/.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.so
php-set = extension=iconv.so
;php-set = extension=zip.so     # enabled by default in global php.ini

;; database connectors
;; uncomment your selected driver
;php-set = extension=pdo_sqlite.so
;php-set = extension=pdo_mysql.so
;php-set = extension=pdo_pgsql.so

;; recommended extensions
;php-set = extension=curl.so    # enabled by default in global php.ini
php-set = extension=bz2.so
php-set = extension=intl.so
php-set = extension=mcrypt.so

;; required for specific apps
;php-set = extension=ldap.so    # for LDAP integration
;php-set = extension=ftp.so     # for FTP storage / external user authentication
;php-set = extension=imap.so    # for external user authentication, requires php-imap

;; recommended for specific apps
;php-set = extension=exif.so    # for image rotation in pictures app, requires exiv2
;php-set = extension=gmp.so     # for SFTP storage

;; for preview generation
;; provided by packages in AUR
; php-set = extension=imagick.so

; opcache
php-set = zend_extension=opcache.so

; user cache
; provided by php-acpu, to be enabled **either** here **or** in /etc/php/conf.d/apcu.ini
php-set = extension=apcu.so
; per https://github.com/krakjoe/apcu/blob/simplify/INSTALL
php-set = apc.ttl=7200
php-set = apc.enable_cli=1

cron2 = minute=-15,unique=1 /usr/bin/php -f /usr/share/webapps/owncloud/cron.php 1>/dev/null
ノート:
警告: uWSGI cron によって設定される ownCloud のバックグラウンドジョブ/etc/php/php.ini のグローバル設定を使用します。必要なモジュールなどのパラメータが有効にならず、様々な問題 が発生します。/etc/php/php.ini/etc/uwsgi/cron-php.ini などにコピーして必要な設定 (/etc/uwsgi/owncloud.ini のパラメータ) を行い、cron で php を実行する箇所に -c /etc/uwsgi/cron-php.ini オプションを追加することで問題は解決します。

有効化

uWSGI には設定ファイルをインスタンスの識別子として使ってアプリケーションを起動したり有効化できるテンプレートユニットが入っています。例えば:

# systemctl start uwsgi@owncloud.socket

上のコマンドは /etc/uwsgi/owncloud.ini 設定ファイルを参照して必要に応じて起動します。

ブート時にデフォルトで uwsgi サービスを有効化するには、次を実行:

# systemctl enable uwsgi@owncloud.socket
ノート: systemd のソケットアクティベーション を利用することで、インスタンスへの接続がない間は無駄にリソースを消費しないようにしています。すぐに有効化したい場合は、.socket という部分を削除してサービスを起動・有効化してください。

uWSGI#サービスの起動も参照。

ファイルシステムのパーティションの設定

セキュリティを強化するために ownCloud ディレクトリのパーミッションはできるだけ制限的に設定することを推奨します。インストールを行った後、セットアップを開始する前に設定してください。HTTP ユーザーが config/, data/, apps/ ディレクトリの所有者となっていれば ownCloud を設定したりデータファイルを作成・修正・削除したり、ownCloud のウェブインターフェイスでアプリをインストールできます [4]

ノート: Nextcloud のパッケージには同じようなスクリプトである /usr/bin/set-nc-perms が含まれていますが、ownCloud のパッケージには含まれていません。
oc-perms
#!/bin/bash
ocpath='/usr/share/webapps/nextcloud'
htuser='http'
htgroup='http'
rootuser='root'

printf "Creating possible missing Directories\n"
mkdir -p $ocpath/data
mkdir -p $ocpath/assets

printf "chmod Files and Directories\n"
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750

printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${ocpath}/
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
chown -R ${htuser}:${htgroup} ${ocpath}/config/
chown -R ${htuser}:${htgroup} ${ocpath}/data/
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
chown -R ${htuser}:${htgroup} ${ocpath}/assets/

chmod +x ${ocpath}/occ

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

標準的なインストール場所からファイルパスをカスタマイズしている場合、上記のスクリプトも修正する必要があります。

fail2ban によるハッキングからの防護

fail2ban のセットアップが強く推奨されています。インストールしたら、以下のファイルを作成してください:

/etc/fail2ban/filter.d/owncloud.conf
[Definition]
failregex={"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)","level":2,"time":".*"}

ignoreregex =
/etc/fail2ban/jail.local
[owncloud]
enabled = true
filter  = owncloud
port    =  http,https
logpath = /usr/share/webapps/owncloud/data/owncloud.log
# optionally whitelist internal LAN IP addresses
ignoreip = 192.168.1.1/24

設定後 fail2ban サービスを再起動してください。以下を実行することで設定をテストできます:

# fail2ban-regex /usr/share/webapps/owncloud/data/owncloud.log /etc/fail2ban/filter.d/owncloud.conf -v

Arch パッケージのアップデートに伴うメンテナンス

Arch の nextcloud パッケージを pacman で更新した場合、ウェブインターフェイスから手動で関連ファイルのアップデートを実行する必要があります。もしくは、シェルから http ユーザーとして /usr/share/webapps/nextcloud/occ upgrade を実行することでもアップデートできます:

# sudo -u http /usr/share/webapps/nextcloud/occ upgrade
ノート: 上記のアップデートを行わないとモバイルアプリから接続できなくなります。

同期

デスクトップ

公式クライアントは owncloud-client または nextcloud-clientAUR パッケージでインストールできます。

カレンダー

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

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

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

https://ADDRESS/remote.php/caldav

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

連絡先

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

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

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

もし 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
ヒント: 自動でマウントしたい場合、Davfs#通常ユーザーでマウントで説明されているようにファイルにユーザー名 (と必要であればパスワード) を保存できます。
ノート: ディレクトリは作成・コピーできるのに、ファイルの作成やコピーができない場合、Davfs#ファイルの作成やコピーができないを見てください。

Android

小額で使うことができる公式 Android アプリが Play ストア にあり、無料で使えるアプリが F-Droid にあります。

連絡先とカレンダーの同期を有効にするには:

  • Android 4 以上を使っている場合:
    1. [5] をダウンロードしてください (Play ストア, F-Droid)。
    2. httpd.conf で mod_rewrite.so を有効化してください。
    3. Account 設定で新しい DAVdroid アカウントを作成して、"短い"サーバーアドレスとログイン名/パスワードを指定してください。例: https://cloud.example.com (ウェブサーバーでリダイレクトを正しく設定していれば /remote.php/{carddav,webdav} の部分は必要ありません。DAVdroid は適切な URL を認識するはずです)。
古いバージョンが対象ですが、こちらの記事 には有用な情報が記載されています。
  • 4.0 以下のバージョンの Android を使っていて、フリーのソフトウェアを使いたい場合、カレンダーと連絡先の同期には aCal を、カレンダーだけの同期には CalDAV Sync Adapter (F-Droid) を試して下さい。フリーでないソフトウェアを使う気があるのであれば、CardDAV-Sync と CalDAV-Sync の使用が 推奨 されています。

SABnzbd

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

folder_rename 0

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

Tips and tricks

サブディレクトリで 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 にファイルをアップロードする機能を提供します。アップロードしたファイルのリンクをメールなどで配ることが可能です。

AJAX から Cron に切り替える

Nextcloud では定期的に実行する必要があるタスクが存在しますが、デフォルトでは AJAX を使って実行されます。AJAX は信頼性に欠けるため Cronsystemd/タイマーを使うことを推奨します。

/etc/systemd/system/nextcloud-cron.timer
[Unit]
Description=Runs Nextcloud tasks regularly

[Timer]
OnBootSec=10min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target
/etc/systemd/system/nextcloud-cron.service
[Unit]
Description=Nextcloud scheduled tasks

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

もしくは以下の cron ジョブを設定:

*/15  *  *  *  * php -f /usr/share/webapps/nextcloud/cron.php

Collabora Online Office の統合

nextcloud-app-collabora-onlineAUR をインストールしてウェブサーバーの Nextcloud の設定を編集します。Nginx の場合:

# static files
location ^~ /loleaflet {
 proxy_pass https://localhost:9980;
 proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
 proxy_pass https://localhost:9980;
 proxy_set_header Host $http_host;
}
# websockets, download, presentation and image upload
location ^~ /lool {
 proxy_pass https://localhost:9980;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade";
 proxy_set_header Host $http_host;
}

Apache の場合は こちら を見てください。docker デーモンを使っている場合、Collabora Online の最新の docker イメージを pull できます。2番目のコマンドのドメイン名はあなたの Nextcloud サーバーのドメイン名に置き換えてください:

docker pull collabora/code
docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=localhost' --net host --restart always --cap-add MKNOD collabora/code

docker イメージを更新する際は同じコマンドを実行します。ただし旧イメージの実行中プロセスを全て終了してください:

docker ps
docker stop CONTAINER_ID
docker rm CONTAINER_ID

これで Nextcloud インスタンスで Collabora Online アプリを有効にできます。最後に管理者の設定で Collabora Online アプリに関する設定を行ってください。

トラブルシューティング

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

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 から確認できるはずです。

ソース: [6]

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

設定ディレクトリに書き込みができない

httpd の設定ファイル (owncloud.conf など) を確認してください。以下の文字列に設定ディレクトリ (デフォルトでは /etc/webapps) を追加してください:

php_admin_value open_basedir "/srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/path/to/dir/"

変更を適用するには httpd あるいは php-fpm サービスを再起動します。

データディレクトリを作成できない (/path/to/dir)

httpd の設定ファイル (owncloud.conf など) を確認してください。以下の文字列にデータディレクトリを追加してください:

php_admin_value open_basedir "/srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/path/to/dir/"

変更を適用するには httpd あるいは php-fpm サービスを再起動します。

また PHP 7 はデフォルトでは open_basedir を使用しないため、必要なデータディレクトリの所有者・所有ユーザーを root:http にしてパーミッションを 770 に変更することでも解決できます (http はウェブサーバーを実行するユーザーのグループに置き換えてください)。

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/owncloud/occ app:list

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

# sudo -u http php /usr/share/webapps/owncloud/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 が対象から外れていることを確認してください。このファイルは誰からでもアクセスできるようにしておく必要があります [7]

ファイルをアップロードすると '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-redisAUR をインストールして、現在使っている 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 を再起動:

# systemctl enable redis.service
# systemctl start redis.service

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

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

"Cannot write into apps directory"

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

また、ドキュメントには書かれていませんが、/etc/php/php.iniopen_basedir 行にディレクトリを指定してください。

きれいな解決方法としてパッケージによってインストールされた /usr/share/webapps/owncloud/apps ディレクトリの所有者は root にしたまま、ユーザーがインストールしたアプリは http が所有者となる /var/www/owncloud/apps などに入れる方法があります。それから appstoreenabledtrue に設定してアプリのパッケージをアップグレードすれば上手く動作するはずです。/etc/webapps/owncloud/config/config.php の該当する行:

  'apps_paths' => 
  array (
    0 => 
    array (
      'path' => '/usr/share/webapps/owncloud/apps',
      'url' => '/apps',
      'writable' => false,
    ),
    1 => 
    array (
      'path' => '/var/www/owncloud/apps',
      'url' => '/wapps',
      'writable' => true,
    ),
  ),

/etc/php/php.iniopen_basedir 行の例:

open_basedir = /srv/http/:/usr/share/webapps/:/var/www/owncloud/apps/

ディレクトリのパーミッション:

$ ls -ld /usr/share/webapps/owncloud/apps /var/www/owncloud/apps/
drwxr-xr-x 26 root root 4096 des.  14 20:48 /usr/share/webapps/owncloud/apps
drwxr-xr-x  2 http http   48 jan.  20 20:01 /var/www/owncloud/apps/

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 パッケージをインストールしてください。

参照