ユカシカド エンジニアブログ

体の栄養状態を把握する検査サービス VitaNoteを開発するエンジニアのブログ

ownCloud on Nginx + PHP-FPM

起業を機に、Google Appsを導入し、Dropboxの代わりととして期待していたGoogle Driveがどうにも使いづらい。

具体的には、

  • 同期のタイミングがよくわからない
  • 同期中であるかどうかがわかりにくい
  • ディレクトリ(フォルダ)構造を変更すると同期に失敗する

Dropboxに慣れた身にはとても不便。そこでバージョン5になって評判の良いowncloudを導入してみたメモ。

構成

  • owncloud-5.0.5
  • nginx-devel-1.3.16 # 別件で事情があって、devel版。
  • php5-5.4.14 (fpm-fcgi)

nginxでオレオレ証明書(自己証明書)の作成

$ cd /usr/local/etc/nginx/
$ mkdir certs
$ openssl genrsa -out server.key -aes128 1024  # 秘密鍵の作成
$ openssl rsa -in server.key -out server.key
$ openssl req -new -key server.key -out server.csr  # CSRの作成
$ openssl rsa -in server.key -out server.key  # パスワード無し秘密鍵に変換
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt # 有効期限1年の自己証明書の作成

ownCloudインストー

$ portinstall /usr/port/www/owncloud

で、/usr/local/www/owncloud に展開される。

DB

$ mysql -u root -p
> create database owncloud;
> grant all privileges on owncloud.* to 'owncloud'@'localhost' identified by ‘*password*’;

nginx.conf

$ vi /usr/local/etc/nginx/sites/owncloud

ownCloud Administrators Manual: Nginx Configuration を参考にしつつ、このままじゃ 上手くいかないところもありつつも何とか設定完了。

 server {
        listen       80;
        server_name owncloud.example.com;
        # return 301 https://$server_name$request_uri;
        return  https://$server_name$request_uri;  # enforce https
}

server {
      listen 443 ssl;
      ssl_certificate /usr/local/etc/nginx/certs/server.crt;
      ssl_certificate_key /usr/local/etc/nginx/certs/server.key;

      server_name owncloud.example.com;

      root /usr/local/www/owncloud;


      client_max_body_size 4G; # set maximum upload size
      fastcgi_buffers 64 4K;

      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;


      # default
      location / {
        # try_files $uri $uri/ @webdav;
        # 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/ index.php;
      }


      location ~ ^(.+?\.php)(/.*)?$ {
        try_files $1 = 404;

        include fastcgi_params;
        fastcgi_index index.php; # 追加
        fastcgi_param PATH_INFO $2;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  # 追加
        fastcgi_param HTTPS on;
        fastcgi_pass unix:/var/run/php-fpm.sock;  #UNIXドメインソケットに変更
      }

      # 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;
      }

      # deny direct access
      location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
        deny all;
      }
}      

ownCloud設定

雛形をコピーして、config/config.phpを調整して完了!

使用して1ヶ月が経ちました。

Dropboxには及びませんが、限りなくDropboxに近づけているような努力が垣間見え、容量の心配も当面なくなたので、今のところ快適です。 冒頭に上げた不満もクリアしています。 ただ、複数ユーザ間の共有の仕方がいまいちスマートでなく、他にやり方があるのかわかりまんせが、引き続き模索していきます。