サクッとプラグインで実装するつもりでしたが断念しました。それ以上にマウントによるメリットも大きかったので、本日はOpenStack(swift)の勉強をすることにします。
とりあえずアヒルで確認しながら作業すると捗るかも!
![]()
サーバーの勉強をしている人なら、稼働させるぐらいは簡単な部類だと思います。幸いにも日本人の方がブログで資料を公開してくれているので、参考にしながら作業ができました。
しかしサーバーが起動不可能になる可能性があるので、必ずバックアップとってから作業してください。
cloudfuseを使ってオブジェクトストレージをマウント
日本一早くConoHaで実装した方のブログが参考になります。ただし、環境によってはサーバーが死にます!
s3fsと同様にマウント自体は簡単ですが、原因不明のエラーが発生すると半日掛かりの作業になる可能性があります・・・(と経験者の私が言っておこう)
ハマリポイントおよびマウントの手順
私の場合は無駄な勉強までしてしまったので半日掛かりでしたが、私より後に作業する人が同じ失敗をする必要はありません。世の中に失敗体験のブログが蓄積され、最終的にはコピペで作業できる情報が残されていけば幸いです・・・(とコピペプログラマーの私が望んでいます)
基本的には流連荒亡さんのブログをコピペ
ちなみに私の環境はCentOS7.1のConoHaの最安プラン、kusanagiテンプレートを使用して、NGINX1.9.6に変更しています。参考サイトの環境はCentOS6.5とのことなので、CentOS6.5~7.1まではコピペでOKでしょう。
以下、流連荒亡さんのページを保管する意味も込めてコードを置いておきます。(私のはWordPress用ですが基本的には同じ内容です)
準備からインストールまでのコード
必要パッケージをまとめてインストール
yum install libcurl libcurl-devel fuse fuse-devel fuse-libs libxml2 libxml2-devel openssl-devel gcc gcc-c++ make git
私の環境ではbzip2がなかったので以下も追加
yum install bzip2
pacoのインストールは参考サイトのまんま
mkdir /usr/local/src/paco
cd /usr/local/src/paco
wget http://jaist.dl.sourceforge.net/project/paco/paco/2.0.9/paco-2.0.9.tar.bz2
tar xjf paco-2.0.9.tar.bz2
cd paco-2.0.9
./configure --disable-gpaco
make
make install
make logme
cloudfuseをインストールしてWordPressのメディアにマウント
まずはcloudfuseをインストールしてpacoの設定まで済ませます。
cd /usr/local/src/
git clone https://github.com/redbo/cloudfuse.git
cd cloudfuse
./configure
make
paco -D make install
/usr/bin/install -c cloudfuse /usr/local/bin/cloudfuse
catでもvimでも好きなのを使って、cloudfuseの設定ファイルを作ります。以下は例ですが、usernameとtenantはConoHaの管理画面で確認できます。
![username-tenant-password]()
authurlについてはConoHaの管理画面でいうと、APIのエンドポイントにあるIdentity Serviceです。
cd ~/
vi .cloudfuse
username=gncu123456789
tenant=gnct123456789
password=a1s23w5e5rr
authurl=https://identity.tyo1.conoha.io/v2.0
verify_ssl=True
パーミッションを変更しておきます。
chmod 600 ~/.cloudfuse
これで cloudfuse /マウントしたいパス/ を実行すればマウントできるはずです。
以下はConoHaのkusanagiを使用している場合の例です。
cloudfuse /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads
私はこの時点でフォルダが空ではなかったのでエラーが出ました。
cloudfuse -h で確認したところ -nonempty というオプションで回避できそうでしたが、私は空にして再挑戦したので未確認です。
ここまでで問題がなければ df -kh | grep cloudfuse でマウントされていることが確認できるはずです。
本番用に自動マウントの設定と不具合の解消
本番では手動でマウントしないと思うので重要なのはここからです。ちなみに現時点では権限問題が発生しているかもしれません。その辺りの問題も解消しながら自動マウントを設定していきます。
自動マウントの設定を追加
以下のコマンドで編集画面にはいります。
vi /etc/fstab
以下の設定を一番下にでも追加しましょう。
cloudfuse /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads fuse username=gncu123456789,tenant=gnct123456789,password=a1s23w5e5rr,authurl=https://identity.tyo1.conoha.io/v2.0,verify_ssl=True,_netdev,allow_other,defaults 0 0
ここは環境によっては重要なオプションを追加しました。実は参考サイトのコードをコピペして使ったら、私の環境ではサーバーが起動不可能になってしまったのです。
この参考になったのはCHANGE MAKERSさんのブログです。
_netdevはネットワーク起動後にマウントさせるというオプションらしく、これがないとサーバーが起動不可能になる可能性を秘めているとのことです。
それとallow_otherですが、私の環境ではマウント後のフォルダが権限不足になり編集不可能な状態に陥ったのですが、このオプションを追加することにより権限が正しく認識されるようになっています。
以上です!お疲れ様でした。
マウント状態の場合は一度以下のコマンドで解除しましょう。
umount /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads
最後に以下のコマンドを実行すれば自動起動まで完了です。
※reboot後に他の問題が発生しても自己責任でお願いします。ぜひ問題を解決して情報を共有しましょう!
mount -a
おまけ:アンマウントできねー
本来であれば以下のコマンドでマウントを解除します。
umount /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads
でもdevice is busyというエラーがでることがあります。
そんなときは・・・
umount -l /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads/
-lオプションを付けた方が賢いらしいです。参考サイトの綾小路龍之介さん
おまけ:ポストIDごとにフォルダ分け
参考にしたのは、くろねこハッピー工房さん!この方も天才でしょう。こんなコードを数分で書ければコピペプログラマーなんぞ続けていないんだけどなぁ( ;∀;)
このフォルダー構成は私の思い描いたシステムにピッタリはまりました!ありがたく使わせていただきます<(_ _)>テーマのfunction.phpで使用します
function wp_plupload_include_attachment_id( $params ) {
global $post_ID;
if ( isset( $post_ID ) )
$params['post_id'] = (int) $post_ID;
return $params;
}
add_filter( 'plupload_default_params', 'wp_plupload_include_attachment_id' );
function wp_post_id_upload_dir( $args ) {
$post_id = $_REQUEST['post_id'];
if(!empty($post_id)){
$newdir = '/' . $post_id;
}else{
$newdir = '/unknown_id';
}
$args['path'] = str_replace( $args['subdir'], '', $args['path'] );
$args['url'] = str_replace( $args['subdir'], '', $args['url'] );
$args['subdir'] = $newdir;
$args['path'] .= $newdir;
$args['url'] .= $newdir;
return $args;
}
add_filter( 'upload_dir', 'wp_post_id_upload_dir' );
まとめ
天才の方々がブログを残してくれたため、たった一日の勉強で可能性が広がりました。
またOpenStackというオープンソースのおかげで、思い描いたシステムも想像以上に早く実装できました。
プラグインの不具合に悩まされたり、もっと簡単な方法を模索したりすることで『無為に長い時間を消耗する』よりは、ちょっとした勉強が一番の近道になるケースも多いのかもしれませんね。
ちっぽけなコピペプログラマーですが今日も幸せです。
利用させてくださった方々に心より感謝申し上げます!!