ownCloud (日本語) - ArchWiki

# ownCloud (日本語)

関連記事

- LAMP
- Nginx
- OpenSSL

ownCloud はクラウドストレージを提供するためのソフトウェア群です。

ownCloud のインストールと設定はどのウェブサーバーとデータベースを動かすかによって異なってきます。現在のところ wiki には #Apache の設定 と #Nginx + uwsgi_php の設定 が載っています。

## 必要環境

ownCloud はウェブサーバーと PHP、データベースを必要とします。古典的な LAMP の組み合わせで問題なく動作し、推奨 されています。

## インストール

公式リポジトリから owncloud をインストールしてください。もしくは Arch User Repository に入っているパッケージを見て下さい: [1]。

`/etc/php/php.ini` で必要な以下のエクステンションをアンコメントします:

    gd.so
    iconv.so
    xmlrpc.so
    zip.so

また、php-intl と php-mcrypt をインストールして以下のエクステンションをアンコメントすることが 推奨 されています:

    bz2.so
    curl.so
    intl.so
    mcrypt.so
    openssl.so

パフォーマンスを向上させたい場合、以下のどちらかをインストールします:

- php-apcu: ユーザーデータのキャッシュだけを提供します。`/etc/php/conf.d/apcu.ini` でコメントを削除することで有効にできます。opcode のキャッシュをしたい場合は opcache エクステンション を使って下さい: `/etc/php/php.ini` で `zend_extension=opcache.so` をアンコメントします。
- php-xcache: opcode とユーザーデータのキャッシュの両方を提供する開発版。インストールした後は `/etc/php/conf.d/xcache.ini` でアンコメントしてください。

#### データベースのサポート

使用するデータベースバックエンドにあわせて、`/etc/php/php.ini` で以下の2行をアンコメントしてください:

SQLite | MySQL | PostgreSQL
--- | --- | ---
    pdo_sqlite.so
    sqlite3.so
    pdo_mysql.so
    mysql.so
    pdo_pgsql.so
    pgsql.so

Note: MySQL を使う場合 `mysql.so` が必要になりますが、現在は廃止されています。2014年7月現在 (ownCloud 7.0)、`mysqli.so` はサポートされていません [2][3]。

データベースの適当な php モジュールをインストールするのを忘れないで下さい。PostgreSQL の場合 php-pgsql で SQLite の場合 php-sqlite になります。

#### Exif のサポート

公式リポジトリから exiv2 をインストールして `php.ini` で `exif.so` エクステンションをアンコメントすることで exif サポートを有効化できます。

### オールインワンの Docker を使う

ownCloud のインストールと設定を素早く安全に行う方法として Docker を使うことができます。Docker のリポジトリには始めから ownCloud がインストールされている完全な LAMP スタックのイメージが複数存在します。Docker コンテナは基本的に chroot 環境よりも安全でありオーバーヘッドも少なくなります。Docker 上の ownCloud はかなり古いマシンでもスムーズに動作するでしょう。普通に ownCloud をインストールするよりも大抵は Docker をインストールしてから ownCloud イメージをインストールする方が簡単で時間がかかりません。

## Apache の設定

### インストール

LAMP をセットアップしてください。

Apache の設定ファイルを ownCloud の設定ディレクトリにコピーします:

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

そして `/etc/httpd/conf/httpd.conf` の一番下で設定ファイルをインクルードします:

    Include conf/extra/owncloud.conf

OwnCloud には WebDAV の実装が付いておりデフォルトで有効になっていますが、Apache の実装と衝突する可能性があります。OwnCloud は `/etc/httpd/conf/httpd.conf` で `mod_dav` と `mod_dav_fs` を無効化することを 推奨 しています。

ウェブブラウザが ownCloud ディレクトリに書き込みが行えるようにしてください:

    # chown -R http:http /usr/share/webapps/owncloud/

そして Apache (`httpd.service`) を再起動します。

ウェブブラウザで http://localhost/ を開いて下さい。ユーザーアカウントを作成してインストールウィザードに従う必要があります。

#### サブディレクトリで ownCloud を動かす

デフォルトの `owncloud.conf` を `httpd.conf` でインクルードすることで、ownCloud は80番ポートと localhost ドメインをコントロールします。

サブディレクトリで ownCloud を動作させたい場合は、`/etc/httpd/conf/extra/owncloud.conf` を編集して include ファイルの `<VirtualHost *:80> ... </VirtualHost>` の部分をコメントアウトしてください。

## Nginx + uwsgi_php の設定

Apache を使わずに、uwsgi-plugin-php アプリケーションサーバーを使って ownCloud を固有のプロセスで動かすことができます。uWSGI 自体にリソースの使用を制限するための機能が豊富に含まれており、アプリケーションのセキュリティを強化したり、専用のユーザーで動くようにプロセスを分けられます。

### 設定

- まず最初に Nginx サーバーをセットアップしてください。詳しくは Nginx のページを参照。
- `/etc/nginx/nginx.conf` ファイルの http セクションに以下の行でサーバーを設定:

    #this is to avoid Request Entity Too Large error
    client_max_body_size 1000M;
    # deny access to some special files
    location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
        deny all;
    }
    # pass all .php or .php/path urls to uWSGI
    location ~ ^(.+\.php)(.*)$ {
        include uwsgi_params;
        uwsgi_modifier1 14;
        uwsgi_pass 127.0.0.1:3001;
    }
    # everything else goes to the filesystem,
    # but / will be mapped to index.php and run through uwsgi
    location / {
        root /usr/share/webapps/owncloud;
        index index.php;
        rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
        rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
    }

- 次に uWSGI の設定ファイルを作成します。`/etc/uwsgi/owncloud.ini` を使うと良いでしょう:

    [uwsgi]
    master = true
    socket = 127.0.0.1:3001

    # Change this to where you want ownlcoud data to be stored (maybe /home/owncloud)
    owncloud_data_dir = /usr/share/webapps/owncloud/data/
    chdir             = %(owncloud_data_dir)

    plugins = php
    php-docroot     = /usr/share/webapps/owncloud
    php-index       = index.php

    # only allow these php files, I don't want to inadvertently run something else
    php-allowed-ext = /index.php
    php-allowed-ext = /public.php
    php-allowed-ext = /remote.php
    php-allowed-ext = /cron.php
    php-allowed-ext = /status.php
    php-allowed-ext = /settings/apps.php
    php-allowed-ext = /core/ajax/update.php
    php-allowed-ext = /core/ajax/share.php
    php-allowed-ext = /core/ajax/requesttoken.php
    php-allowed-ext = /core/ajax/translations.php
    php-allowed-ext = /search/ajax/search.php
    php-allowed-ext = /search/templates/part.results.php
    php-allowed-ext = /settings/admin.php
    php-allowed-ext = /settings/users.php
    php-allowed-ext = /settings/personal.php
    php-allowed-ext = /settings/help.php
    php-allowed-ext = /settings/ajax/getlog.php
    php-allowed-ext = /settings/ajax/setlanguage.php
    php-allowed-ext = /settings/ajax/setquota.php
    php-allowed-ext = /settings/ajax/userlist.php
    php-allowed-ext = /settings/ajax/createuser.php
    php-allowed-ext = /settings/ajax/removeuser.php
    php-allowed-ext = /settings/ajax/enableapp.php
    php-allowed-ext = /core/ajax/appconfig.php
    php-allowed-ext = /settings/ajax/setloglevel.php
    php-allowed-ext = /ocs/v1.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=%(owncloud_data_dir):/tmp/:/usr/share/pear/:/usr/share/webapps/owncloud:/etc/webapps/owncloud
    php-set = session.save_path=/tmp
    php-set = post_max_size=1000M
    php-set = upload_max_filesize=1000M

    # load all extensions only in this instance of php, no need to edit global php.ini
    php-set = extension=bz2.so
    php-set = extension=curl.so
    php-set = extension=intl.so
    php-set = extension=openssl.so
    php-set = extension=pdo_sqlite.so
    php-set = extension=exif.so
    php-set = extension=gd.so
    php-set = extension=imagick.so
    php-set = extension=gmp.so
    php-set = extension=iconv.so
    php-set = extension=mcrypt.so
    php-set = extension=sockets.so
    php-set = extension=sqlite3.so
    php-set = extension=xmlrpc.so
    php-set = extension=xsl.so
    php-set = extension=zip.so

    processes = 10
    cheaper = 2
    cron = -3 -1 -1 -1 -1 /usr/bin/php -f /usr/share/webapps/owncloud/cron.php 1>/dev/null

### 有効化

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

    # systemctl start uwsgi@owncloud.socket

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

Uwsgi#Starting_service も参照。

## 同期

### デスクトップ

公式クライアントを このページ で見つけることができ AUR では様々なバージョンがパッケージ化されています (owncloud-client, owncloud-client-beta, owncloud-client-git, owncloud-client-qt5)。使用方法はドキュメントの このページ に説明があります。

#### カレンダー

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

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

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

    https://ADDRESS/remote.php/caldav

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

以下のアドレスで、Thunderbird の Lightning アドオンをインストールして CalDav を使うことができます:

    http://username:password@owncloudserver_address/owncloud/remote.php/caldav/calendars/username/calendarname

カレンダーを適切に同期させるには Thunderbird を再起動させる必要があるかもしれません。

#### 連絡先

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

### Android

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

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

- Android 4 以上を使っている場合、DAVdroid (F-Droid から取得可能) をダウンロードして この記事 の説明に従って下さい。
- 4.0 以下のバージョンの Android を使っていて、フリーのソフトウェアを使いたい場合、カレンダーと連絡先の同期には aCal を、カレンダーだけの同期には CalDAV Sync Adapter (F-Droid) を試して下さい。フリーでないソフトウェアを使う気があるのであれば、CardDAV-Sync と CalDAV-Sync の使用が 推奨 されています。

## ownCloud にデータを保管する

### WebDAV

ownCloud に新しいファイルを追加するには WebDAV かウェブインターフェイスのどちらかを常に使います。そうしないと、正しくインデックスが作られず、ファイルがちゃんと表示されません。ownCloud での WebDAV アップロードを有効にするのに必要な設定はありません。

php-apcu をインストールして有効にすることで WebDAV をスピードアップできます。

#### davfs2 で ownCloud をマウントする

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

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

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

    $ mount https://own.example.com/remote.php/webdav /path/to/mount

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

    /etc/fstab

    https://own.example.com/remote.php/webdav /path/to/mount rw,user,noauto 0 0

Tip: 自動でマウントできるように Davfs#Mounting as regular user で説明されているようにファイルにユーザー名 (と必要であればパスワード) を保存できます。

### SABnzbd

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

    folder_rename 0

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

### 巨大なファイル

WebDAV は大きなファイルを扱うのには向いていません、CPU とメモリを食いつぶしてしまいます。

現在のバージョンでは、ownCloud に大きなデータをコピーする良い方法はないように思われます。

対処法:

大きなファイルをあなたの ownCloud に直接コピーし、データベースを完全リスキャンします (例えば Re-scan filesystem アドオンを使うことができます)。

ですが、この方法は将来 ownCloud が計画している end-to-end 暗号化が実装された時に使えなくなるかもしれないので、注意してください。

## 重要なノート

- owncloud.example.xxx のようなサブドメインを使う場合、証明書でカバーされているか確認してください。そうでなければ、ownCloud クライアントや wevdav からの接続は失敗するかもしれません。

- ownCloud の sync-clients を使うことを計画しているなら、ntpd をインストールして ownCloud サーバーで実行してください。ntpd が実行されてないと、sync-client は失敗します。

- 接続には SSL 暗号化を追加してください！

(上記のように SSL 暗号化を追加する場合、`/etc/httpd/conf/extra/httpd-ssl.conf` を編集して `DocumentRoot "/srv/http"` を `DocumentRoot "/usr/share/webapps/owncloud"` に変更してください。)

- ownCloud のアプリは他にも ここ で探すことができます。

- 新しいアプリケーションをインストールするには、アプリストアから zip をダウンロードして、それを `/srv/http/owncloud/apps/` に展開します。その後、httpd を再起動してください:

    # systemctl restart httpd

サーバーにログインしてアプリセクションを開けば新しいアプリが追加されているはずです。

- HTTP のベーシック認証で ownCloud へのアクセスを保護するときは、"status.php" ファイルは認証から外して誰でもアクセスできるようにしてください [4]。

## トラブルシューティング

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

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 デバイスの自己署名証明書

Once you have followed the setup for SSL as on LAMP for example davdroid will fail to work because the certificate is not accepted. A certificate can be made as follows on your server:

     # 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

The file android.txt should contain the following:

     basicConstraints=CA:true

Then import CA.der.crt to your android device:

Put the CA.der.crt onto the sdcard of your Android device (usually to internal one, eg save from a mail attachement). It should be in root directory. Go to Settings / Security / Credential storage and select “Install from device storage”. The .crt file will be detected and you will be prompted to enter a certificate name. After importing the certificate, you will find it in Settings / Security / Credential storage / Trusted credentials / User.

Thanks to: [5]

### Can't write into config directory!

Check your httpd conf file (like owncloud.conf). Add your config dir (/etc/webapps by default) to

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

Restart the httpd or php-fpm service to activate the change.

### Can't create data directory (/path/to/dir)

Check your httpd conf file (like owncloud.conf). Add your data dir to

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

Restart the httpd or php-fpm service to activate the change.

### CSync failed to find a specific file.

Most probably a certificate issue, recreate it, and don't leave the common name empty or you will see the error again.

    openssl genrsa -out server.key 2048
    openssl req -new -key server.key -x509 -days 365 -out server.crt

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

おそらく新しくインストールしたアプリが原因です。修正するには、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" が対象から外れていることを確認してください。このファイルは誰からでもアクセスできるようにしておく必要があります [6]。

### "Can't write into apps directory"

As mentioned in the official admin manual either you need an apps directory that is writable by the http user, or you need to set "appstoreenabled" to false.

Also, not mentioned there, the directory needs to be in the open_basedir line in `/etc/php/php.ini`

One clean method is to have the package-installed directory at `/usr/share/webapps/owncloud/apps` stay owned by root, and have the user-installed apps go into e.g. `/var/www/owncloud/apps` which is owned by http. Then you can set "appstoreenabled" to true and package upgrades of apps should work fine as well. Relevant lines from `/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,
        ),
      ),

Example open_basedir line from `/etc/php/php.ini` (you might have other dirs in there as well):

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

Directory permissions:

    $ 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/

## 参照

- ownCloud 公式ウェブサイト
- ownCloud 7.0 管理者ドキュメント

Category:

- Web Server (日本語)