現在、自宅では2台のファイルサーバを運用しています。
- ReadyNAS 31600
大容量・安定性を重視して市販のNAS製品をチョイス。 - Banana Pi M1 Classic + LHR-2BRHU3
あるもので構築した、なんちゃってNAS。
ReadyNAS より静かなので音楽ファイルなどに利用。
ただ、どちらも常時稼働させているわけではないので、たまに不便に感じることがあります。
そこで簡易的なファイル共有サーバを別途立てることにしました。
目次
ファイル共有サーバ
要件
以下を要件としました。
- どのデバイスでも使えるよう、Webブラウザで利用できる
どのPC・タブレットで閲覧するか分からないので、ブラウザで利用できる環境を構築する。
※デバイスが変わるたびに設定するのが面倒。 - チープな環境でも動く
常時稼働を視野に入れ、SBC(シングルボードコンピュータ)での運用を前提としました。
phpUploader
MITライセンスで公開されているシンプルなアップローダです。
導入
NanoPi NEO(Armbian)に導入することにしました。
アップデート
# apt update
# apt dist-upgrade
ソース取得
phpUploader のソースを取得します。
下記では、tmpディレクトリに保存後、解凍しています。
# wget -P /tmp/ https://github.com/shimosyan/phpUploader/archive/v1.2.tar.gz
Saving to: ‘/tmp/v1.2.tar.gz’
# cd /tmp/
# tar -zxvf /tmp/v1.2.tar.gz
# ls phpUploader-1.2/
app config download.php MIT-LICENSE.txt
asset delete.php index.php README.md
環境構築
phpUploader に必要な Webサーバ・PHP・SQLite を導入します。
# apt install php php-mbstring php-sqlite3 libapache2-mod-php apache2
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php
libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap liblua5.2-0 libmagic-mgc libmagic1 php php-common
php-mbstring php7.0 php7.0-cli php7.0-common php7.0-json php7.0-mbstring
php7.0-opcache php7.0-readline php-sqlite3 php7.0-sqlite3
0 upgraded, 23 newly installed, 0 to remove and 0 not upgraded.
Apache は導入後、自動起動していました。
# systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
Active: active (running) since Mon 2019-03-25 12:43:17 UTC; 2min 7s ago
ソース展開
ドキュメントルート
Apache のドキュメントルートを確認して、phpUploader のソースを移動します。
※今回はドキュメントルート(/var/www/html)の直下に展開しています。
# cat /etc/apache2/sites-available/000-default.conf | grep DocumentRoot
DocumentRoot /var/www/html
# mv /tmp/phpUploader-1.2/* /var/www/html/
# ls /var/www/html/
app config download.php index.php README.md
asset delete.php index.html MIT-LICENSE.txt
phpUploader 稼働確認
今回はドキュメントルート直下なので、以下URLでアクセスできます。
- {SERVER_IPADDR}/
※元々ある index.html は削除(あるいは移動)しておく必要があります。
早速エラーになりました。
500 - ディレクトリの作成に失敗しました。
ディレクトリ権限付与
Apacheユーザ(www-data)でディレクトリ・DBファイルを作る必要があるので、オーナーを変更します。
# ls -lhd /var/www/html/
drwxr-xr-x 5 root root 4.0K Mar 25 12:46 /var/www/html/
# chown -R www-data:www-data /var/www/html/
# ls -lhd /var/www/html/
drwxr-xr-x 5 www-data www-data 4.0K Mar 25 12:46 /var/www/html/
再度、アクセスすると問題なく利用できます。
設定など
アップロード可能ファイル
デフォルトではアップロードできるファイル拡張子が固定されています。
実運用では便利だと思いますが、今回は自宅での運用なので制限を外しました。
- {phpUploader}/app/api/upload.php
# diff -u /tmp/upload.php app/api/upload.php
--- /tmp/upload.php 2019-03-25 13:01:31.312981674 +0000
+++ app/api/upload.php 2019-03-25 13:02:08.119463172 +0000
@@ -83,10 +83,10 @@
//ファイル拡張子
$ext = substr( $_FILES['file']['name'], strrpos( $_FILES['file']['name'], '.') + 1);
if(in_array(mb_strtolower($ext), $extension) === false){
- $response = array('status' => 'extension_error', 'ext' => $ext);
- //JSON形式で出力する
- echo json_encode( $response );
- exit;
+# $response = array('status' => 'extension_error', 'ext' => $ext);
+# //JSON形式で出力する
+# echo json_encode( $response );
+# exit;
}
アップロードサイズ
アップロード可能サイズは下記ファイルの 'max_file_size' と PHP(サーバ)設定の論理積(AND条件)となります。
- {phpUploader}/config/config.php
max_file_size - php.ini
memory_limit
post_max_size
upload_max_filesize
なお、Armbian-Stretch のデフォルトは以下のようになっていました。
# php -i | grep memory_limit
memory_limit => -1 => -1
# php -i | grep post_max_size
post_max_size => 8M => 8M
# php -i | grep upload_max_filesize
upload_max_filesize => 2M => 2M
画面表示(一部)
config.php では「対応拡張子」として 'extension' の配列の中身を表示しています。
上記({phpUploader}/app/api/upload.php)で拡張子制限を外したので、表示を変更しておきます。
# diff -u /tmp/config.php config/config.php
--- /tmp/config.php 2019-03-25 12:48:26.554078129 +0000
+++ config/config.php 2019-03-25 13:08:57.322387185 +0000
@@ -34,7 +34,7 @@
'max_file_size' => 2,
// アップロードできる拡張子
- 'extension' => array('zip','rar','lzh'),
+ 'extension' => array('ALL'),
// データベースディレクトリ
'db_directory' => './db',
@@ -49,4 +49,4 @@
'encrypt_filename' => false
);
}
-}
\ No newline at end of file
+}