Pydioの構築

Pydioは、DropBoxのようなクラウドストレージサーバーのOSSとのこと。NextCloudと迷ったが、Pydioを自宅サーバーに構築してみた。

Pydioは、PHPのWebアプリで、HttpサーバーとPHP、MySQLやSqlite、PostgresSQLなどのDBで構築できる。今回は、NginxPHPMariaDBという構成でインストールしてみる。

Install Pydio Community
Pydio 6.0のインストールと、ワークスペース開くときのエラー回避

マニュアルインストール

Pydioをパッケージインストールすることで、上記のソフトウェアをまとめて自動的にインストールすることも可能だが、検証環境がプロキシ環境下で、インストールの途中で失敗してしまった。

仕方なく、上記のソフトウェアを1つずつインストールしていくことにした。

NginxとPHPのインストール

Ubuntuの場合、aptのパッケージ取得先に以下のURLを追加する必要がある。追加せずにapt installを実行すると途中で失敗する。またキーの登録を必要で、エラーになったら追加した。(キーの番号は環境やバージョンによって異なると思うので、エラー表示された番号を指定する)

ちなみにnginxはインストール最後にデフォルトで80ポートのままデーモンを起動する。既に80番で稼働していると失敗するが、これに関してはあとで変更するので気にしない。

> sudo vi /etc/apt/sources.list
:
deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx

> sudo apt update
:
エラー:12 http://nginx.org/packages/ubuntu xenial InRelease                                                                                                   
公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY ABF5BD827BD9BF62
ヒット:13 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 Release       
:
> sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
> sudo apt update
> sudo apt install nginx

次にPHPのインストールを行う。最後に使用したのが、PHP5ぐらいで久々のインストールになる。php7.0-fpmというPHP設定に関するツール?も導入する。

プラグインに関しても、Pydioの導入マニュアルを参考に追加。

> sudo apt install php7.0 php7.0-fpm 
:
> sudo apt install php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-intl php7.0-xml php7.0-zip php7.0-exif php-mbstring

nginxの設定

/etc/nginx/sites-available/defaultを修正して、設定を行う。

> cd /etc/nginx/sites-available
> cp default default.backup
> sudo vi default

以下の設定例を参考に設定してみた。以下の例はポートが80番になっているが、環境によっては違う番号を指定する。ポイントはリクエストのサイズを大きくして、ファイルアップロードの上限を緩和している。

Pydio Installing on Debian+Nginx

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        client_max_body_size 20G;
        client_body_buffer_size 128k;

        keepalive_requests    10;
        keepalive_timeout     60 60;
        access_log /var/log/nginx/access_pydio7.log;
        error_log /var/log/nginx/error_pydio7.log;

        server_name _;

        location ~* ^/(?:\.|conf|data/(?:files|personal|logs|plugins|tmp|cache)|plugins/editor.zoho/agent/files) {
            deny all;
        }
        location / {
                root /var/www/html;
                index index.html index.htm index.php;
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }
        location ~ \.php$ {
                fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
                fastcgi_param  SERVER_SOFTWARE    nginx;
                fastcgi_param  QUERY_STRING       $query_string;
                fastcgi_param  REQUEST_METHOD     $request_method;
                fastcgi_param  CONTENT_TYPE       $content_type;
                fastcgi_param  CONTENT_LENGTH     $content_length;
                fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
                fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
                fastcgi_param  REQUEST_URI        $request_uri;
                fastcgi_param  DOCUMENT_URI       $document_uri;
                fastcgi_param  DOCUMENT_ROOT      $document_root;
                fastcgi_param  SERVER_PROTOCOL    $server_protocol;
                fastcgi_param  REMOTE_ADDR        $remote_addr;
                fastcgi_param  REMOTE_PORT        $remote_port;
                fastcgi_param  SERVER_ADDR        $server_addr;
                fastcgi_param  SERVER_PORT        $server_port;
                fastcgi_param  SERVER_NAME        $server_name;

                try_files $uri =404;

                root /var/www/html;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
        }
        
}

注意点として、sites-available以下で追加する設定はあくまでバーチャルサーバーなので、本体の設定は/etc/nginx/conf.d/default.confになる。このファイルでは80番ポートが設定されているので、80番が他のサーバーで使用されている場合は、nginxのサービスの起動に失敗してしまう。

自身の環境では、nginxをpydioでのみ使用する予定で、すでに80番ポートが他で使用されていたので、上記のdefault.confに対してnginxの設定を記述した。

次にPHPの設定を行う。こちらもファイルアップロードの設定と、日本語設定を主に行った。

> sudo vi /etc/php/7.0/fpm/php.ini

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto
:
file_uploads = On
post_max_size = 20G
upload_max_filesize = 20G
max_file_uploads = 20000
output_buffering = Off

サンプルPHPとして、index.phpファイルを作成して、サーバールートにとりあえず配置する。

<?php
echo phpinfo();
?>

一旦nginxとPHPツールを再起動する。

> sudo service php7.0-fpm restart
> sudo service nginx restart

とりあえずnginx+PHPが正常に動作するか確認する。

> sudo service nginx status
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since 月 2017-12-18 06:38:30 PST; 2min 2s ago
 Main PID: 44924 (nginx)
   CGroup: /system.slice/nginx.service
           ├─44924 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
           ├─44925 nginx: worker process                           
           └─44926 nginx: worker process                           

12月 18 06:38:30 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
12月 18 06:38:30 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.

まずは、デフォルトでインストールされたHTMLを表示してみる。

pydio-001

次にPHPスクリプトを表示してみる。設定した内容が反映されているかも確認する。

pydio-002

PHPのサンプルページが表示されてない場合、nginxとphp間の通信が失敗している。/etc/php/7.0/fpm/pool.d/www.confファイルの設定を見直す。

エラーログは以下に出力される

> tail -f /var/log/nginx/error.log
2017/12/25 20:42:53 [crit] 19464#19464: *3 connect() to unix:/run/php/php7.0-fpm.sock failed (13: Permission denied) while connecting to upstream, ....
:

php7.0-fpm.sockの読み書きに関するpermission deniedの場合は、listen.ownerlisten.groupnginxにしてみる。

listen = /run/php/php7.0-fpm.sock
listen.owner = nginx
listen.group = nginx

MariaDBのインストール

MySQLと違いがよくわからないが、こちらを導入してみた。インストール後、mysql_secure_installationというスクリプトを実行すると、ウィザード形式でrootパスワードなどの初期設定ができる。

> sudo apt install mariadb-server
:
> sudo mysql_secure_installation
:

ターミナルからログインできることを確認する。

> sudo mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 49
Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show database;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

Pydioのインストール

以下からPydioのcoreソースをダウンロードする。Communityバージョンなら無料で使用できる。

DOWNLOAD PYDIO

pydio-003

ソースは、サーバールート下のpydioフォルダ直下に展開する。chownchmodでオーナーとパーミッションを変更する。オーナーはnginxの実行ユーザなら良いはず。

> cd /var/www/html
> sudo tar xvfz pydio-core-8.0.2.tar.gz
> sudo mv pydio-core-8.0.2 pydio
> sudo chown -R www-data:www-data pydio
> sudo find ./ -type d | sudo xargs -i chmod u=rwx,g=rx,o= '{}'
> sudo find ./ -type f | sudo xargs -i chmod u=rw,g=r,o= '{}'
> sudo find data -type d | sudo xargs -i chmod ug=rwx,o= '{}'
> sudo find data -type f | sudo xargs -i chmod ug=rw,o= '{}'

展開したら、ブラウザからPydioに接続してみる。初回起動の場合、構築した環境が正しくセットアップされているか自動的にチェックされる。ERRORがあると先に進めないようになっている。

http://localhost/pydio

pydio-005

HTTPS環境を推奨されるので、以下のような設定をnginxに追加する必要があるが、今回は備忘録としておいて、先に進む。

listen 443 ssl;
# SSL Settings
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
add_header Strict-Transport-Security "max-age=16070400; includeSubdomains";

最初にPydioのセットアップウィザード画面が表示される。

pydio-006

使用するデータベースを選択できる。MySQLを選択してチェックを実行すると、エラーになるはず。ターミナルから以下のようにPydio用の空のデータベースとDBユーザを追加する。完了したら、再度Pydioの画面からチェックを行う。

pydio-007

> sudo mysql -u root -p
MariaDB [(none)]> create database pydio;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user pydio@localhost identified by 'pydio';
Query OK, 0 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on pydio.* to pydio@localhost identified by 'pydio' with grant Option;
Query OK, 0 row affected (0.00 sec)

先に進むと、ログイン画面が表示されるので、設定した管理者アカウントでログインする。

pydio-008

ログイン完了すると、モダンな画面が表示される。

pydio-009

操作方法などは、検証後にUPするかもしれない。見た感じ、Pydioはモダンな見た目と作りで良さそう。

ファイルをアップロードする方法などはDropBoxまんまである。データは、dataフォルダ以下にそのままアップロードされて、メタ情報だけDBに格納されるシンプルな仕組みのようである。バックアップや復旧などは、単純かもしれない。

とりあえずここまで。