Apacheで動く高速ファイルアップローダ(mod_uploader)の設置方法

インフラ技術

ファイルアップローダといえばPerlやPHPで作られたものが多いですが、レスポンスが悪かったりメモリを大幅に消費しがちです。mod_uploader はApacheのモジュールとして動作するため、非常に高速です。

導入の経緯

Dropbox等のオンラインストレージを使えば済む話ではあるのですが、ITリテラシの低いユーザーにアカウント取得やクライアントのインストールを案内するのは現実的でない場面もあります。「ブラウザだけでデータ共有できる手段」として、レガシーながら本手法はまだまだ有用だと判断しました。

身内で大量の旅行写真を共有する目的で導入しています。

インストール環境

  • Ubuntu 12.04.1 LTS
  • Apache 2.2.x
  • PHP 5.3.x

インストール手順

debパッケージではlibmagick等のバージョン不整合でうまくいかなかったため、ソースコンパイルで導入しました。

必須パッケージ

sudo aptitude install imagemagick libmagick++-dev

apxsが必要になるため、Apache動作モードに応じたパッケージを導入します。apache2 -VServer MPM を確認してください。

# Preforkの場合
sudo aptitude install apache2-prefork-dev

# Workerの場合
sudo aptitude install apache2-threaded-dev

コンパイルとインストール

wget --trust-server-names \
  'http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fmod-uploader%2F37519%2Fmod_uploader-3.1.1.tgz'

cd mod_uploader-3.1.1
./configure --enable-empty-comment --enable-empty-password \
            --enable-remove-unpopular --enable-thumbnail
make
sudo make -f GNUmakefile.apache install

make install により mods-available へのコンフィグ作成と mods-enabled へのsymlink作成まで実行されるため、a2enmod は不要です。

configureオプションの意味

オプション説明
--enable-empty-comment空のコメントを受け付ける
--enable-empty-password空のパスワードによる削除を受け付ける
--enable-remove-unpopular容量満杯時に、古いものではなく最近ダウンロードされていないものから削除する
--enable-thumbnailファイルのサムネイル画像を生成する

ディレクトリ配置

mod_uploader のサイト用ファイル(img, css, js, tmpl)をコピーして配置します。サイト全体を認証しつつ、アップロードグループ毎に異なる認証を設定する構成にしました。

virtualhost_root/
├ mod_uploader_tmpl
└ public_html
    ├ mod_uploader_root
    │   ├ img, css, js
    │   ├ upload_group_A
    │   │    └ data, file, temp, thumb
    │   └ upload_group_B
    │        └ data, file, temp, thumb
    ├ up_img@ → mod_uploader_root/img
    ├ up_css@ → mod_uploader_root/css
    └ up_js@  → mod_uploader_root/js

symlinkで up_* のみ認証を外すことで、複数アップローダを効率的に運用できます。

パーミッション設定と起動

chown -R www-data:www-data mod_uploader_root
/etc/init.d/apache2 restart

導入時のトラブル

debパッケージからのインストールでは以下のエラーが発生しました。libMagick++.so.9 が見つからないという依存関係の問題です。

Cannot load /usr/lib/apache2/modules/mod_uploader.so into server:
libMagick++.so.9: cannot open shared object file: No such file or directory

ソースコンパイルで導入することで解決しています。

Related Posts