「Nextcloud」の版間の差分
(→データベース: 情報を更新) |
(→初期化: 同期) |
||
236行目: | 236行目: | ||
プレースホルダー (例: {{ic|''db-password''}}) に注意して、適切な値に置き換えてください。このコマンドは、データベースを Nextcloud と同じホスト上で実行していることを前提としています。{{ic|occ help maintenance:install }} と入力し、他のオプションについては Nextcloud の [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html#command-line-installation ドキュメント] を参照してください。このツールに関する Arch 固有の詳細については、[[Nextcloud#"occ" コマンドラインツールの使用|"occ" コマンドラインツールの使用]] を参照してください。 |
プレースホルダー (例: {{ic|''db-password''}}) に注意して、適切な値に置き換えてください。このコマンドは、データベースを Nextcloud と同じホスト上で実行していることを前提としています。{{ic|occ help maintenance:install }} と入力し、他のオプションについては Nextcloud の [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html#command-line-installation ドキュメント] を参照してください。このツールに関する Arch 固有の詳細については、[[Nextcloud#"occ" コマンドラインツールの使用|"occ" コマンドラインツールの使用]] を参照してください。 |
||
+ | == アプリケーションサーバー == |
||
− | == 初期化 == |
||
+ | PHP コードの処理に使用できる一般的なアプリケーションサーバーは [[uWSGI]] または [https://cwiki.apache.org/confluence/display/HTTPD/PHP-FPM FPM] の 2 つです。''FPM'' はPHPに特化したものです。Web サーバーと ''FPM'' の間で使用されるプロトコルは ''fastcgi'' です。このツールの [https://www.php.net/manual/en/install.fpm.php ドキュメント] には改善の余地があります。一方、''uWSGI'' は、言語固有のプラグインを使用して、[https://uwsgi-docs.readthedocs.io/en/latest/LanguagesAndPlatforms.html 少数の言語] で記述されたコードを提供できます。使用されるプロトコルは ''uwsgi''(小文字)です。このツールは [https://uwsgi-docs.readthedocs.io/en/latest/index.html 広範囲に文書化されています] ですが、膨大な量の文書が混乱を招き、扱いにくくなる可能性があります。 |
||
− | ウェブブラウザで Nextcloud をインストールした PC のアドレスを開いてください (例: https://www.example.com/nextcloud )。指示に従って管理者アカウントを追加し先に作成したデータベースを選択します。 |
||
+ | === uWSGI === |
||
− | === ストレージディレクトリの作成 === |
||
+ | uWSGI には独自の [[uWSGI|article]] があります。そこでは役立つ情報がたくさん見つかります。{{pkg|uwsgi}} とプラグイン {{pkg|uwsgi-plugin-php-legacy}} を、できれば依存関係として、つまり {{ic|--asdeps}} とともにインストールします。Nextcloud のコードを uWSGI で (または uWSGI 内で) 実行するには、1 つの uWSGI 固有の構成ファイル ({{ic|nextcloud.ini}}) を構成し、1 つの systemd サービスを定義する必要があります。 |
||
− | "Cannot write into "apps" directory" というエラーが表示される場合、Arch の Nextcloud パッケージが ''apps'' フォルダだけ使用していて ''data'' フォルダが存在しないのが原因です。 |
||
+ | {{Warning|最近、uWSGI、特にその PHP プラグインのメンテナンスがまばらになっていることに言及しなければなりません[https://github.com/unbit/uwsgi/issues/2287] これはすでに [https://bugs.archlinux.org/task/73470 の問題] を引き起こしており、Arch Linux パッケージの管理者 (アップストリームではない) が uWSGI コードにパッチを適用することによってのみ解決できます。}} |
||
− | アプリ用の新しい書き込み可能なフォルダを作成して data フォルダも作成するのが一番簡単な解決方法です (http グループは必要に応じて使用しているウェブサーバーのグループに置き換えてください): |
||
+ | ==== nextcloud.ini ==== |
||
− | # mkdir -p /usr/share/webapps/nextcloud/data |
||
− | # chown http:http /usr/share/webapps/nextcloud/data |
||
− | # chown http:http /usr/share/webapps/nextcloud/apps |
||
− | # chmod 750 /usr/share/webapps/nextcloud/data |
||
− | # chmod 750 /usr/share/webapps/nextcloud/apps |
||
+ | {{Pkg|nextcloud}} パッケージには、適切な場所 {{ic|/etc/uwsgi/nextcloud.ini}} にサンプル構成ファイルがすでに含まれています。ほとんどの場合、このファイルを要件と設定に適合させる必要があります。 [https://gist.githubusercontent.com/wolegis/fc0c01882b694777a6565aa1d0a4da47 バージョンに多くのコメント付き変更が含まれている] を見つけます (パッケージのバージョンと比較) これは、個人使用 (つまり、中程度の負荷) を目的とした、シンプルな Nextcloud インストールを前提としています。 |
||
− | データディレクトリを上書きするために、{{ic|/etc/webapps/nextcloud/config/config.php}} を編集して、ファイルの末尾の {{ic|);}} の前に以下の行を追加してください: |
||
+ | 一般に、有効な拡張機能、拡張機能固有の設定、および {{ic|open_basedir}} を {{ic|/etc/webapps/nextcloud/php.ini}} と同期させます (opcache を除く) |
||
− | {{hc|/etc/webapps/nextcloud/config/config.php|2= |
||
+ | |||
− | 'datadirectory' => '/usr/share/webapps/nextcloud/data' |
||
+ | {{Tip|{{ic|/etc/uwsgi/nextcloud.ini}} への変更は広範囲になる可能性があります。パッケージ {{Pkg|nextcloud}} によって提供される元のファイルに変更があった場合に備えて、パッケージの更新中に {{ic|nextcloud.ini.pacnew}} という名前のファイルが作成されます。この後者のファイルの変更をより適切に追跡し、それらを {{ic|/etc/uwsgi/nextcloud.ini}} に適用するには、次のアプローチを適用できます。: |
||
+ | |||
+ | * パッケージによって提供されるファイルのコピーを (パッケージから抽出するなどして) 作成し、それを {{ic|nextcloud.ini.package}} として保存します。 |
||
+ | * パッケージ {{Pkg|nextcloud}} の更新により {{ic|nextcloud.ini.pacnew}} が生成される場合は、{{ic|diff nextcloud.ini.package nextcloud.ini.pacnew}} で変更を識別できます。 |
||
+ | * ご使用のバージョンに適しているかどうかに応じて、変更を {{ic|nextcloud.ini}} に選択的に適用します。 |
||
}} |
}} |
||
+ | ==== uWSGI サービス ==== |
||
− | ページを更新すればエラーは消えるはずです。 |
||
+ | {{pkg|uwsgi}} パッケージは、テンプレートユニットファイル ({{ic|uwsgi@.service}}) を提供します。インスタンス ID (ここでは ''nextcloud'') は、適切な構成ファイルを選択するために使用されます。 {{ic|uwsgi@nextcloud.service}} を [[有効化]] および [[起動]] します。 |
||
− | === キャッシュの設定 === |
||
+ | このように開始されたサービスが複数 (例: 2 つ) あり、これがリソースの無駄であると感じた場合は、[https://uwsgi-docs.readthedocs.io/en/latest/emperor.html emperor モード] の使用を検討してください。 |
||
− | [https://docs.nextcloud.com/server/13/admin_manual/configuration_server/caching_configuration.html キャッシュを有効化] することが推奨されています。Nextcloud のドキュメントでは [[Redis]], Memcached, [[PHP#APCu|APCu]] の使用方法が書かれています。 |
||
+ | |||
+ | === FPM === |
||
+ | |||
+ | アプリケーションサーバーとして ''FPM'' を使用する場合は、{{pkg|php-legacy-fpm}} を依存パッケージ ({{ic|--asdeps}}) としてインストールしてください。 |
||
+ | |||
+ | 構成は、''FPM'' によって提供されるすべてのアプリケーションに関連する {{ic|php.ini}} のコピーと、アプリケーション (ここでは Nextcloud) に固有のいわゆるプールファイルで構成されます。最後に、systemd サービスファイルを調整する必要があります。 |
||
+ | |||
+ | ==== php-fpm.ini ==== |
||
+ | |||
+ | 前に述べたように、この記事では、{{ic|/etc/php-legacy/php.ini}} にある PHP の中央設定の変更を回避しています。代わりに、''FPM'' 固有のコピーを作成します。 |
||
+ | |||
+ | {{bc| |
||
+ | # cp /etc/php-legacy/php.ini /etc/php-legacy/php-fpm.ini |
||
+ | }} |
||
+ | |||
+ | 所有者であり、root のみが書き込み可能であることを確認してください ({{ic|-rw-r--r-- 1 root root ... php-fpm.ini}}) 演算キャッシュを有効にします。つまり、行のコメントを解除します。 |
||
+ | |||
+ | {{hc|/etc/php-legacy/php-fpm.ini|2=;zend_extension=opcache}} |
||
+ | |||
+ | そして、次のパラメータを既存の行 {{ic|[opcache]}} の下に配置します。 |
||
+ | |||
+ | {{hc|/etc/php-legacy/php-fpm.ini|2= |
||
+ | 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 |
||
+ | }} |
||
+ | |||
+ | {{Warning|{{ic|php_value[...]}} および {{ic|php_flag[...]}} を使用してこれらの設定をプールファイルに入れようとしないでください。''FPM'' プロセスは、最初のリクエストで常にクラッシュします。}} |
||
+ | |||
+ | ==== nextcloud.conf ==== |
||
+ | |||
+ | 次に、''FPM'' 用のいわゆるプールファイルを作成する必要があります。これは、Nextcloud アプリケーション用の専用の ''FPM'' プロセスを生成する役割を果たす。ファイル {{ic|/etc/php-legacy/php-fpm.d/nextcloud.conf}} を作成します - これが [https://gist.githubusercontent.com/wolegis/0d9c83acd0c8bf83bcfb3983931bc364 機能バージョン] を開始点として使用できます。 |
||
+ | |||
+ | もう一度、このプールファイルが root によって所有され、書き込み可能であることを確認してください (つまり、{{ic|-rw-r--r-- 1 root root ... nextcloud.conf}}) アクセスログが設定されているかどうかに応じて (上記のサンプル {{ic|nextcloud.conf}} の場合)、対応するディレクトリを作成する必要がある場合があります (ここでは {{ic|/var/log/php-fpm-legacy/access}) }) 好みに合わせて設定 (特に {{ic|pm...}}、{{ic|php_value[...]}}、および {{ic|php_flag[...]}}) を調整または追加します。{{ic|php_value[...]}} および {{ic|php_flag[..]}} の設定は、{{ic|/etc/webapps/nextcloud/php.ini}} の対応する設定と一致している必要があります。(ただし、{{ic|/etc/php-legacy/php-fpm.ini}} ではありません) |
||
+ | |||
+ | {{ic|php_value[...]}} および {{ic|php_flag[...]}} によって行われた設定は、代わりに {{ic|php-fpm.ini}} で指定できます。ただし、{{ic|php-fpm.ini}} の設定は、''FPM'' によって提供されるすべてのアプリケーションに適用されることに注意してください。 |
||
+ | |||
+ | {{Tip|パッケージ {{pkg|php-legacy-fpm}} には独自のプールファイル {{ic|www.conf}} が付属していますが、ここではほとんど役に立ちません。これを取り除く良い方法は、名前を {{ic|www.conf.package}} に変更し、コメント行 (セミコロンで始まる行) だけを含むファイル {{ic|www.conf}} を作成することです。このようにすると、{{ic|www.conf}} は何も行わなくなります。また、新しいバージョンの {{pkg|php-legacy-fpm}} のインストール中に上書きされることもありません。代わりに、ファイル {{ic|www.conf.pacnew}} が作成されます。これを {{ic|www.conf.package}} と比較して、{{ic|nextcloud.conf}} で再現する必要がある重要な変更がプール ファイルにないかどうかを確認できます。この手順の最後に、{{ic|www.conf.pacnew}} の名前を {{ic|www.conf.package}} に変更することを忘れないでください。}} |
||
+ | |||
+ | ==== Systemd サービス ==== |
||
+ | |||
+ | ''FPM'' は systemd サービスとして実行されます。Nextcloud を実行できるようにするには、サービス構成を変更する必要があります。これは、[[ドロップインファイル]] を使用して実現するのが最適です。 |
||
+ | |||
+ | {{hc|/etc/systemd/system/php-fpm-legacy.service.d/override.conf|2= |
||
+ | [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 |
||
+ | }} |
||
+ | |||
+ | * {{ic|ExecStart}} 行を、前のセクションで説明した {{ic|php-fpm.ini}} を使用する起動コマンドに置き換えます。 |
||
+ | * ディレクトリ {{ic|/var/lib/nextcloud}} および {{ic|/etc/webapps/nextcloud/config}} (および以下のすべて) が書き込み可能になります。 元のサービス定義の {{ic|1=ProtectSystem=full}} により、{{ic|/usr}}、{{ic|/boot}}、および {{ic|/etc}} が読み取り専用でマウントされます。''FPM'' プロセスの場合。 |
||
+ | |||
+ | ''php-fpm-legacy'' サービスを [[有効化]] および [[起動]] することを忘れないでください。 |
||
+ | |||
+ | ==== /etc を整理整頓する ==== |
||
+ | |||
+ | Nextcloud パッケージは、uWSGI 設定ファイル {{ic|/etc/uwsgi/nextcloud.ini}} を無条件に作成します。もちろん、''uWSGI'' の代わりに ''FPM'' を実行する場合には役に立ちません (そして、何の害もありません) それでも削除したい場合は、次の行を {{ic|/etc/pacman.conf}} に追加してください。 |
||
+ | |||
+ | {{hc|/etc/pacman.conf|2= |
||
+ | # uWSGI configuration that comes with Nextcloud is not needed |
||
+ | NoExtract = etc/uwsgi/nextcloud.ini |
||
+ | }} |
||
== セキュリティの強化 == |
== セキュリティの強化 == |
2023年7月2日 (日) 00:03時点における版
Wikipedia より:
- Nextcloud はファイルホストサービスを作成して使用するためのクライアントサーバーソフトウェアスイートである。広く使われている Dropbox と同じような機能を持ち、フリーでオープンソースであるため、誰でもプライベートサーバーにインストール・使用することができる。Dropbox などのプロプライエタリサービスと異なり、オープンなアーキテクチャを活用してサーバーに機能 (アプリケーション) を簡単に追加することが可能。
Nextcloud は ownCloud のフォークです。Nextcloud と ownCloud の違いについては [1] を見てください。
目次
- 1 セットアップの概要
- 2 インストール
- 3 設定
- 4 データベース
- 5 アプリケーションサーバー
- 6 セキュリティの強化
- 7 同期
- 8 ヒントとテクニック
- 9 トラブルシューティング
- 9.1 Environment variables not available
- 9.2 自己署名証明書が使えない
- 9.3 Android デバイスの自己署名証明書
- 9.4 Cannot write into config directory!
- 9.5 Cannot create data directory
- 9.6 CSync failed to find a specific file.
- 9.7 ログイン後に白いページが表示される
- 9.8 GUI の同期クライアントで接続できない
- 9.9 ファイルをアップロードすると 'Integrity constraint violation...' エラーが表示される
- 9.10 "Cannot write into apps directory"
- 9.11 MIME タイプエラーによってインストールしたアプリがブロックされる
- 9.12 nginx.conf に推奨設定を記述したのにセキュリティの警告が表示される
- 9.13 "Reading from keychain failed with error: 'No keychain service available'"
- 9.14 FolderSync: "Method Not Allowed"
- 9.15 Nextcloud 13 : "Unable to load dynamic library 'mcrypt.so"
- 10 参照
セットアップの概要
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 バージョンとして php-legacy を選択します。これにより、かなりの数の依存パッケージが取り込まれます。すべての 必要な PHP 拡張機能 はこの方法で処理されます。
プレビュー生成用にパッケージ php-legacy-imagick と librsvg を追加インストールすることをお勧めします (できれば 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.ini
が occ
ツールで使用されるようにするには、環境変数 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
でツールを終了します。
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 サービスを定義する必要があります。
nextcloud.ini
nextcloud パッケージには、適切な場所 /etc/uwsgi/nextcloud.ini
にサンプル構成ファイルがすでに含まれています。ほとんどの場合、このファイルを要件と設定に適合させる必要があります。 バージョンに多くのコメント付き変更が含まれている を見つけます (パッケージのバージョンと比較) これは、個人使用 (つまり、中程度の負荷) を目的とした、シンプルな Nextcloud インストールを前提としています。
一般に、有効な拡張機能、拡張機能固有の設定、および open_basedir
を /etc/webapps/nextcloud/php.ini
と同期させます (opcache を除く)
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
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 によって提供されるすべてのアプリケーションに適用されることに注意してください。
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
セキュリティの強化
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
に置き換えてください。こちらのファイル をテンプレートとして使うことができます。"@@FQDN@@" は実際に使用する FQDN に置き換えてください。その後 nginx.service
を起動・有効化してください。
uWSGI
uwsgi-plugin-php による uWSGI アプリケーションサーバーを使うことで Nextcloud を固有のプロセスで動かすことができます。システム全体の 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/nextcloud.sock; }
それから uWSGI の設定ファイルを作成してください:
/etc/uwsgi/nextcloud.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/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 cron2 = minute=-15,unique=1 /usr/bin/php -f /usr/share/webapps/nextcloud/cron.php 1>/dev/null
有効化
uWSGI には設定ファイルをインスタンスの識別子として使ってアプリケーションを起動したり有効化できるテンプレートユニットが入っています。例えば:
# systemctl start uwsgi@nextcloud.socket
上のコマンドは /etc/uwsgi/nextcloud.ini
設定ファイルを参照して必要に応じて起動します。
ブート時にデフォルトで uwsgi サービスを有効化するには、次を実行:
# systemctl enable uwsgi@nextcloud.socket
uWSGI#サービスの起動も参照。
ファイルシステムのパーティションの設定
config/
, data/
, apps/
のパーミッションはできるかぎり厳しく設定してください。HTTP ユーザー (apache であれば http) をディレクトリの所有者として、パーミッションは 700
にしてください。以下のスクリプトを使うことで設定できます:
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}/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/ 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
標準的なインストール場所からファイルパスをカスタマイズしている場合、上記のスクリプトも修正する必要があります。
同期
デスクトップ
公式クライアントは owncloud-client または nextcloud-client パッケージでインストールできます。開発版の owncloud-client-gitAUR パッケージも存在します。
カレンダー
Mozilla Thunderbird の Lightning カレンダーを使って 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
GNOME Files (Nautilus) でファイルをマウントする
Nautilus ('+ Other Locations') では WebDAV プロトコルを使ってファイルに直接アクセスできます。Nextcloud のインストール Web GUI で表示されるリンクを使ってください (通常は https://example.org/remote.php/webdav/)。ただしプロトコルの名前は 'https' から 'davs' に置き換えてください。Nautilus は接続時にユーザー名とパスワードを要求します。
Android
Nextcloud の公式アプリは Google Play や F-Droid からダウンロードできます。
連絡先やカレンダーの同期を有効化するには (Android 4 以上):
- DAVdroid (Play Store, F-Droid) をダウンロード。
httpd.conf
でmod_rewrite.so
を有効化。- 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
Docker の ownCloud あるいは 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 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.com
と ssl_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 は cURL や SabreDAV を使って 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 キャッシュを使う必要があります。redis と php-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, ),
最後に、File Locking アプリを無効化して、Transational File Locking を使うようにしてください。
管理者ページのサーバーステータスに 'Transactional File Locking Enabled' が表示され、同期の問題が消えるはずです。
"Cannot write into apps directory"
公式の管理者マニュアル に書かれているように、http ユーザーからアプリディレクトリに書き込みができるようにするか、appstoreenabled
を false
に設定する必要があります。
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-keyring と gnome-keyring パッケージをインストールすることで解決します。KDE の場合、libgnome-keyring と qtkeychain[リンク切れ: 置換パッケージ: 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