目的of目的

技術的な事とか趣味な事を書いて日本語の練習

CentOS7 + nginx + php-fpmの環境でownCloudを動かす

最近流行のクラウドストレージといえば,DropboxGoogle Driveが挙げられますが自分のサーバやVPSにプライベートなクラウドストレージが欲しいときもあります。 そんなときはOSSとして公開されているownCloudを使えばプライベートなクラウドストレージが構築できます。要求される手順や環境も難しくなく簡単に構築できるので是非試してみましょう。

必要な環境

今回はインストールする対象がCentOS7ですので,標準でmysqlMariaDBに変わっています。Yumでインストールするコマンドが変わるだけですので大差は無いと思います。

インストール手順

始めに必要なソフトウェア群をインストールしましょう。nginxは標準のレポジトリで提供されなかったはずなのでレポジトリを追加します。

こちらに登録するリポジトリの詳細が記載されていますので '/etc/yum.repos.d/nginx.repo'のような名前で記述します。

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

yumのインストールコマンドを実行します。

$ sudo yum install -y nginx php php-fpm mariadb-server mariadb php-gd php-pdo php-dom

インストールが完了したらnginxが正しく動作するか確認します。

$ sudo systemctl start nginx

正しく80ポートでWebページが見えたならば完了です。見えない場合はFirewallの設定が必要です。 CentOS7からiptablesからFirewallに変わり使用するコマンドも変化しました。net-toolsをインストールすればiptablesも動作するようですが今回は新しいシステムを使用することにします。

$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --reload

次にphpphp-fpmの設定を行います。必要な設定はアップロードサイズの設定と待ち受け状態の設定と動作ユーザの設定です。

** php.ini
post_max_size = 10G
upload_max_filesize = 10G
** /etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock;
user = nginx
group = nginx

このままではセッションファイルが書き込めませんので変更します。

$ sudo chown root:nginx /var/lib/php/session -R

nginxと同様に起動します。

$ sudo systemctl start php-fpm

ownCloudをダウンロードし展開します。

$ cd /tmp
$ curl -O https://download.owncloud.org/community/owncloud-7.0.1.zip
$ unzip owncloud-7.0.1.zip
$ cp -rf owncloud /usr/share/
$ sudo chown nginx:nginx /usr/share/owncloud/ -R

次はnginxの設定を行います。基本的にはowncloudのドキュメント通りですが,今回は簡略化のためsslを省略しています。本番で使用する場合は自己証明でも良いのでhttpsにしましょう。

upstream php-handler {
        #server 127.0.0.1:9000;
        server unix:/var/run/php-fpm/php-fpm.sock;
}
server {
    listen       80;
    server_name  example.com;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    root   /usr/share/owncloud;

    client_max_body_size 10G; # set max 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;


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


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

    location / {
        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(?:$|/) {
        root           /usr/share/owncloud;
        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_pass php-handler;
        include        fastcgi_params;
    }
}

今回はmariaDBの設定は省略します。mysqlと同様の設定方法なので起動してmysql_secure_installtionを行えば出来るはずです。そしてowncloud用のユーザとデータベースを作成しておきます。 ちなみにownCloudはSQliteにも対応しているようなので,小規模な使用法であればSQLiteでも充分可能かもしれません:D

そして自動的にサービスが立ち上がるようにSystemdを設定します。

$ sudo systemctl enable mariadb
$ sudo systemctl enable nginx
$ sudo systemctl enable php-fpm

あとはブラウザでアクセスすることでwebセットアップ画面が表示されます。

使用感

Dropboxとも連携が出来るようなので外部ストレージ代わりに1つぐらい持っておくのも良いと感じた。

OwnCloudにDropBoxをマウントする【連携】 | くずのは探偵事務所

アップロードダウンロード速度もサーバ周りのネットワークに依存するのでちゃんとした評価は出来ないけれども充分使用できるのでは無いですか!!ぜひ皆さんも自分専用のストレージ作ってみてください。

私はJoe'sクラウド上に構築しました。CloudStack弄るのは初めてだったのでポートフォワーディングとかで躓きましたがなかなかに楽しかったです :D

参考URL

Nginxでphpを動かす CentOS7でnginxをyumでインストール(phpのおまけ付き) FastCGI sent in stderr: “Primary script unknown” file not found