開発者でも何でもない素人によるサイト

Ubuntu Server16.04(amd64,Raspberry Pi2)、LEMP(nginx + mariadb + php7.0)にowncloudをインストール

  • このエントリーをはてなブックマークに追加

今回はOwncloudで自前のサーバに、Dropbox・google Driveライクなオンラインストレージを構築します。

今回の設定はUbuntu Server 16.04(amd64,armv7(raspi))で動作確認しています。

Raspbianでも一部設定(phpのバージョン辺り)を書き換えれば動作可能だと思います。

ちなみに、軽量WEBサーバのNginx環境を前提に解説しています。以下のページで解説しているので、わからない方はそちらを参照してください。

ほとんどOwncloudのドキュメントを頼りに設定したので、あまり苦労することはありませんでしたが、何箇所か躓いたので、そうした点は最後にまとめたいと思います。

設定目標

とりあえず動作する設定を目指します。

HTTPS(SSL)の設定も今回はパスです。

もし本格的な利用を目指すなら、Let’s Encryptと合わせて解説してあるサイトがたくさんあるので、そちらも参照してください。

必要なパッケージのインストール

繰り返しになりますが、LEMP環境はこちらのページを参考にインストールしてください。

ここではNginx、MariaDB(or MySQL)、PHP7.0-fpmの他に必要なパッケージをインストールします。

sudo apt install php7.0-json php7.0-curl php7.0-mcrypt php7.0-xmlrpc php7.0-zip php7.0-mysql php7.0-opcache php7.0-cli php7.0-gmp php7.0-gd php7.0-xml php7.0-ldap php7.0-intl

また、僕自身別の作業でインストール済みのものがあったりするので、過不足があるかもしれません。

その場合最後のログイン時に「このパッケージがない」と言われるので、その時にインストールすればOKです(特に設定変更等はありません)。

MariaDB(MySQL)の設定

下準備としてMariaDBのデータベースとユーザーの設定を行います。MySQLでも手順は全く同じです。

sudo mysql -uroot -p
Enter password:

MariaDBにログインできたらOwncloud用データベースとユーザーの作成、権限の付与を行います。

MariaDB [(none)]> create database owncloud;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user 'owncloud'@'localhost' identified by 'パスワードを入力';     
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all on owncloud.* to owncloud@localhost identified by '設定したパスワードを入力';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> quit
Bye

エラーなく設定できたらOKです。

Owncloud本体のインストール

apt-getでもOwncloudは出てきますが、そちらからインストールするとパッケージ依存でApache2がインストールされてしまいます。

Nginxで今回は構築するので、公式サイトからダウンロードし、インストールします。

また、webルート(/var/www/html)とは別のディレクトリに(/var/www/owncloud)にインストールします。

まずインストールするディレクトリの親ディレクトリに移動して、公式サイトから必要なファイルをダウンロードします。

下記のダウンロードリンクは本日(72)時点のものなので、必ずリンク先の該当するファイル(手順1,2,3のtar.bz2)にURLを書き換えてください。

cd /var/www
sudo wget https://download.owncloud.org/community/owncloud-9.0.3.tar.bz2
sudo wget https://download.owncloud.org/community/owncloud-9.0.3.tar.bz2.md5
sudo wget https://download.owncloud.org/community/owncloud-9.0.3.tar.bz2.asc
sudo wget https://owncloud.org/owncloud.asc

ダウンロード出来たらダウンロードが真正なものかチェックします。

ちなみにこの手順はスキップしても問題が出る可能性は少ないと思いますが、一応確認しておくことをおすすめします。

md5sum owncloud-9.0.3.tar.bz2
4271795b245248b8bbd406def8f202cc  owncloud-9.0.3.tar.bz2
cat owncloud-9.0.3.tar.bz2.md5 
4271795b245248b8bbd406def8f202cc  owncloud-9.0.3.tar.bz2
# 上記のように、同じ文字列が表示されればOK

gpg --import owncloud.asc 
gpg: 鍵リング「/home/hoge/.gnupg/secring.gpg」ができました
gpg: 鍵リング「/home/hoge/.gnupg/pubring.gpg」ができました
gpg: /home/hoge/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵F6978A26: 公開鍵"ownCloud <info@owncloud.com>"をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1  (RSA: 1)

gpg --verify owncloud-9.0.3.tar.bz2.asc 
gpg: 署名されたデータが'owncloud-9.0.3.tar.bz2'にあると想定します
gpg: 2016年06月29日 18時53分00秒 JSTにRSA鍵ID F6978A26で施された署名
gpg: "ownCloud <info@owncloud.com>"からの正しい署名
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:          この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガー・プリント: E303 6906 AD9F 3080 7351  FAC3 2D5D 5E97 F697 8A26
# 正しい署名であればOK。

上記の作業が完了したら、本体ファイルの展開とディレクトリの整理を行います。

tar xf owncloud-9.0.3.tar.bz2
sudo rm owncloud-9.0.3.tar.bz2.* owncloud.asc

lsしてowncloudというディレクトリ(とhtml)だけ残っていればOKです。

Nginxの設定

webサーバの設定を書き換えます。

以下は公式サイトのNginxのガイドを参考に、HTTPでアクセス出来るようにほんの少しだけ書き換えました。

cd /etc/nginx/sites-available/
sudo vi owncloud
upstream php-handler {
        #server 127.0.0.1:9000;
        server unix:/var/run/php/php7.0-fpm.sock;
}

server {
        listen 80;
        server_name owncloud.example.com;

        # Path to the root of your installation
        root /var/www/owncloud;
        # set max upload size
        client_max_body_size 10G;
        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;

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

        index index.php;
        error_page 403 /core/templates/403.php;
        error_page 404 /core/templates/404.php;

        location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
        }

        location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){
        deny all;
        }

        location / {
        # The following 2 rules are only needed with webfinger
        rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
        rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

        rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
        rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

        rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

        try_files $uri $uri/ =404;
        }

        location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        #fastcgi_param HTTPS on;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        }

        # Adding the cache control header for js and css files
        # Make sure it is BELOW the location ~ \.php(?:$|/) { block
        location ~* \.(?:css|js)$ {
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers
        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;

        # Optional: Don't log access to assets
        access_log off;
        }

        # Optional: Don't log access to other assets
        location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
        access_log off;
        }
}

作成したら、sites-enableにシンボリックリンクを貼って、バーチャルホストとして登録します。

sudo ln -s owncloud ../sites-enable/owncloud

また、この時点でnginxの設定が正しいか確認します。

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

上記のようにOKと出れば、とりあえず設定ファイルは少なくとも形式的に正しいと言えます。

もしエラーが出たら、行数も合わせて表示されるのでその箇所を確認しましょう。

エラーが出てなければNginxを再起動して設定を反映します。

sudo systemctl restart nginx

サイトにアクセス

ここまで設定できたら、クライアント機の任意のブラウザのアドレスバーにサーバのアドレス(上の例ではowncloud.example.com)を入力しアクセスします。

Screenshot from 2016-07-02 10-27-05

上のような画面が表示されるはずなので、必要情報を入力してログインしましょう。

ちなみに、このページの例では以下の通り入力します。

Username:(任意のユーザー名)

Password:(任意のパスワード)

Data folder:デフォルトのまま、変更する場合、指定先のディレクトリの所有者とパーティションをwebサーバ(www-data)がアクセス出来るようにしてください。

Databese user:owncloud

Database password:(Mariadbの項で設定したユーザパスワード)

Database name:owncloud

一番下:そのまま(localhost)

入力できたらログインして、以下の画面が見えるはずです。

Screenshot from 2016-07-02 10-41-37

いくつかの種類のファイルをアップロードして、無事操作できるか確認しましょう。

エラーの対処

最後に初心者に発生しそうなエラーをごく簡単にまとめます。

以下は僕の経験上のエラー対処で、少しでも初心者の方の手がかりになるようにまとめています。

アクセス時に以下の画面が表示されてしまう

Screenshot from 2016-07-02 10-11-49

パッケージが不足しています。表示に従って必要なパッケージをインストールしてください。

パッケージ名がそのまま表示されていないと思うので、このページを参考に該当するパッケージを探してください。

ブラウザからアクセスしてもNginxの「Not Found」が表示される

PHPがうまく動作していないか、Nginxとの連携がうまく言っていないかもしれません。

Nginxの設定ファイルが正しいか確認してください(php-fpmソケットのパス等)。

ブラウザの設定画面から進まない

もしラズパイ等の低スペック機で作業しているなら、意外と(と言っても2分位)待ちます。

それでも進まない場合、MariaDB(MySQL)の設定がうまく出来ていない可能性が高いです。

MariaDBの項で書いた設定がエラーなくできたでしょうか。もしできていれば、

tail /var/log/mysql/error.log

でエラーの詳細を確認します。

そもそもアクセスできない

名前解決が出来ていないか、ファイアウォールが閉じています。

DNSで必要な設定をするか、PCであれば一時的な対処としてhostsファイルを編集し、アドレスを追加します。

(ただし、後者だと外部にPCを持ちだすたびにhostsファイルを書き換える必要があります)

hostsファイルの書き換えはWindowsであればこちらのサイトがわかりやすいかと思います。

ファイアウォールは80番ポートが開いているか確認します。

Ubuntuであればufwが入っていると思うので以下のコマンドで確認、開放しましょう。

# ファイアウォールのステータスを確認
sudo ufw status
# 80番ポートを開放
sudo ufw allow 80

その他のエラーは

/var/log/nginx/error.log

/var/log/php7.0-fpm.log

/var/mysql/error.log

で詳細を確認できます。