ownCloud+nginx+さくらVPSでプライベートクラウド構築
前回、さくらVPS+nginx環境にSSL証明書を導入してHTTPSによる通信ができるようになりました。今回はownCloudを導入して自分専用のファイルサーバを構築していきます。
はじめに
ownCloudはファイル共有サーバー・ソフトウェアです。ownCloud社によりオープンソースの無償版と機能拡張+商用サポートがついた有償版(Enterprise版)が提供されています。
公式はこちら。
owncloud.org
また、ownCloudを開発していたメンバーによって作られたNextcloudというものも存在します。こちらはオープンソースのソフトウェアとして提供することに注力しているようです。
ownCloudとNextcloudの関係については下記が参考になります。
どちらも簡単に言うとDropbox風のファイル共有サーバーを自前で作れますよという機能になります。今回はownCloudの無償版を使います。
ownCloudの導入
概要
使用するVPSは既にWordpressを運用している状態ですので、今回はサブディレクトリにownCloudをインストールします。
具体的にはLinux(CentOS7)に下記ディレクトリ構成でインストールします。
/var/www/wordpress
/var/www/owncloud
それぞれ、
https://”サーバのドメイン”/で接続 ⇒ WordPressにアクセス、
https://”サーバのドメイン”/owncloudで接続 ⇒ ownCloudにアクセス
という感じに住み分けます。
事前準備
まずは下記を用意します。
- Linuxサーバ(VPS等)
- 独自ドメイン
- SSL証明書
Linuxサーバには事前に必要なソフト(nginx, php, mysql(mariaDB))をインストールしておきます。
PHPのバージョンが5.6.0以上である必要があるので注意です。
$ sudo yum install epel-release
$ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo yum install --enablerepo remi-php70 php php-fpm php-gmp php-mbstring php-mcrypt php-mysqlnd php-opc
ache php-pear-Net-Curl php-pecl-redis php-pecl-zip php-soap php-intl php-ldap php-gd
$ sudo yum install nginx
$ sudo yum install mysql
$ sudo systemctl enable nginx.service
$ sudo systemctl enable php-fpm.service
$ sudo systemctl enable mariadb.service
下記所有者をnginxに変更します。
$ sudo chown nginx:nginx /var/lib/php/ -R
念のため装置をリブートしておきましょう。
$ sudo reboot
ownCloudのダウンロード
こちらから必要なファイルをダウンロードしてきます。


ダウンロードが完了したら/var/wwwに展開して所有者をnginxに変更します。
# ファイルのダウンロード
$ wget https://download.owncloud.org/community/owncloud-10.0.3.tar.bz2
# /var/wwwに展開
$ sudo tar jxvf owncloud-10.0.3.tar.bz2 -C /var/www
# 所有者をnginxに変更します
$ sudo chown nginx:nginx /var/www/wordpress/owncloud/ -R
各種設定
ownCloudにアクセスするために下記の設定ファイルを編集していきます。
(1) /etc/php-fpm.d/www.conf
(2) /etc/nginx/conf.d/myserver.conf
/etc/php-fpm.d/www.conf
ユーザとグループがapacheになっている場合はnginxに変更します。
また、nginxとphp-fpm間で通信する為のUNIXドメインのソケットを追記します。
$ sudo vim /etc/php-fpm.d/www.conf
#下記を記載する
listen = /var/run/php-fpm/php-fpm.sock
listen.mode = 0666
user = nginx
group = nginx
/etc/nginx/conf.d/myserver.conf
nginxの設置ファイルを編集します。
“location ^~ /owncloud { … }”でくくられた部分でWordpressとownCloudを住み分けてます。
$ sudo vim /etc/nginx/conf.d/myserver.conf
# 下記を記載する
upstream php-handler {
server unix:/var/run/php-fpm/php-fpm.sock;
}
server {
listen 80;
server_name .<あなたのドメイン>;
rewrite ^ https://<あなたのドメイン>$request_uri?;
}
server {
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name <あなたのドメイン>;
root /var/www/wordpress/;
ssl_certificate "<公開鍵のパス>";
ssl_certificate_key "<秘密鍵のパス>";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
index index.php;
location ~* /wp-config.php {
deny all;
}
#location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
# auth_basic "Please enter your name and password";
# auth_basic_user_file "/var/www/wordpress/.htpasswd";
#}
# For OwnCloud
# Protecting sensitive files from the evil outside world
location ~ ^/owncloud/(data|config|\.ht|db_structure.xml|README) {
deny all;
}
location ^~ /owncloud {
root /var/www/;
# 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;
index index.php;
error_page 403 /owncloud/core/templates/403.php;
error_page 404 /owncloud/core/templates/404.php;
location ~ ^/owncloud/(?:\.htaccess|data|config|db_structure\.xml|README) {
deny all;
}
rewrite ^/owncloud/caldav(.*)$ /owncloud/remote.php/caldav$1 redirect;
rewrite ^/owncloud/carddav(.*)$ /owncloud/remote.php/carddav$1 redirect;
rewrite ^/owncloud/webdav(.*)$ /owncloud/remote.php/webdav$1 redirect;
rewrite ^/owncloud/core/doc/([^\/]+)(?:$|/) /owncloud/core/doc/$1/index.html;
try_files $uri $uri/ /owncloud/index.php;
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;
}
# Optional: set long EXPIRES header on static assets
location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
# Optional: Don't log access to assets
access_log off;
}
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass php-handler;
}
}
編集が完了したらngint -tでコンフィグの確認をします。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ファイルの編集が終ったらnginx, php-fpmを再起動します。
$ sudo systemctl restart nginx.service
$ sudo systemctl restart php-fpm.service
データベースの作成
ownCloud用にデータベースを作成します。
$ sudo mysql -u root -p
MariaDB [(none)]>
# ユーザの作成
MariaDB [(none)]> create user 'abcdefg'@localhost IDENTIFIED BY 'sukeke1234';
Query OK, 0 rows affected (0.12 sec)
# データベースの作成
MariaDB [(none)]> create database owncloud;
Query OK, 1 row affected (0.00 sec)
# データベースに作成したユーザによる操作権限を付与
MariaDB [(none)]> GRANT ALL ON ownclound.* TO 'abcdefg'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
# 念のため
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
$
これで事前準備は完了です。
接続確認
https://”サーバのドメイン”/owncloudで接続して下記画面が出ればOKです。
https://”サーバのドメイン”/の場合はWordpressが起動すること事も確認しましょう。

管理者アカウント(ownCloudへのログイン用のアカウント)とデータベースファイルを指定してセットアップを行います。
(管理者アカウントにadminを指定するとエラーになるので注意。)

セットアップ後に下記画面が表示されるので作成した管理者アカウントでログインします。

無事ログインまで出来れば完了です。

スマホからアクセス
ownCloud環境を構築できましたのでスマホアプリからアクセスしてみましょう。
私はAndroidユーザなのでAndroidアプリ(有料)を使います。


ファイルの参照、追加、削除が出来るか確認しましょう。
ハマったこと
作業の過程で色々なエラーで苦しめられました(^-^;)
PHPのバージョンが古い
現象:こんな画面が表示される。

対策:PHPのバージョンアップ
$ sudo yum install epel-release $ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm $ sudo yum install --enablerepo remi-php70 php php-fpm php-gmp php-mbstring php-mcrypt php-mysqlnd php-opc ache php-pear-Net-Curl php-pecl-redis php-pecl-zip php-soap php-intl php-ldap php-gd
/var/run/php-fpm/php-fpm.sockにアクセス不可
現象:こんな画面が表示される。

原因:/var/run/php-fpm/php-fpm.sockにアクセス権が足りない。
対策:www.confにソケットの権限を追記する。
$ sudo vim /etc/php-fpm.d/www.conf #下記を記載する listen = /var/run/php-fpm/php-fpm.sock listen.mode = 0666 # defaultだと 0660のためnginxがアクセスできない
データベースのユーザ名にハイフン”-“があるとAccess deniedになる。
現象:こんな画面が表示される。

対策:試しにデータベースのユーザ名を”-“無しにするとエラーが出なくなった。
セットアップ実行で404 Not Foundになる
現象:
公式のマニュアルでExample Configurationsにある例に従って設定してみるも、セットアップ画面までは行くが、セットアップ実行で404 Not Foundになってしまう。
対策:
原因は分からずじまいですが、nginxの設定ファイルに下記を記載したら動作した。
location ^~ /owncloud {
root /var/www/;
# 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;
index index.php;
error_page 403 /owncloud/core/templates/403.php;
error_page 404 /owncloud/core/templates/404.php;
location ~ ^/owncloud/(?:\.htaccess|data|config|db_structure\.xml|README) {
deny all;
}
rewrite ^/owncloud/caldav(.*)$ /owncloud/remote.php/caldav$1 redirect;
rewrite ^/owncloud/carddav(.*)$ /owncloud/remote.php/carddav$1 redirect;
rewrite ^/owncloud/webdav(.*)$ /owncloud/remote.php/webdav$1 redirect;
rewrite ^/owncloud/core/doc/([^\/]+)(?:$|/) /owncloud/core/doc/$1/index.html;
try_files $uri $uri/ /owncloud/index.php;
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;
}
# Optional: set long EXPIRES header on static assets
location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
# Optional: Don't log access to assets
access_log off;
}
}
まとめ
セキュリティ的に見直すところもあるとは思いますが、ひとまずownCloudを使って自分だけのファイルサーバを作ることができました。
エラーには苦しめられましたが、それもまた良い勉強になったということで。
コメント