ConoHaオブジェクトストレージをマウントしてWordPressでのメディア保存先にする

追記:フリーガにてConohaサーバーおよびConohaオブジェクトストレージの試運転を継続中です。動画や数百MBのデータを公開するうえで、通常利用に耐えうる耐久力があるのかを計測しているので、ダウンロードが途中で止まる等の不具合に遭遇した際はコメントを頂けると幸いです。

—追記終わり

サクッとプラグインで実装するつもりでしたが断念しました。それ以上にマウントによるメリットも大きかったので、本日はOpenStack(swift)の勉強をすることにします。

とりあえずアヒルで確認しながら作業すると捗るかも!

サーバーの勉強をしている人なら、稼働させるぐらいは簡単な部類だと思います。幸いにも日本人の方がブログで資料を公開してくれているので、参考にしながら作業ができました。

しかしサーバーが起動不可能になる可能性があるので、必ずバックアップとってから作業してください。

cloudfuseを使ってオブジェクトストレージをマウント

日本一早くConoHaで実装した方のブログが参考になります。ただし、環境によってはサーバーが死にます!

s3fsと同様にマウント自体は簡単ですが、原因不明のエラーが発生すると半日掛かりの作業になる可能性があります・・・(と経験者の私が言っておこう)

ハマリポイントおよびマウントの手順

私の場合は無駄な勉強までしてしまったので半日掛かりでしたが、私より後に作業する人が同じ失敗をする必要はありません。世の中に失敗体験のブログが蓄積され、最終的にはコピペで作業できる情報が残されていけば幸いです・・・(とコピペプログラマーの私が望んでいます)

基本的には流連荒亡さんのブログをコピペ

ちなみに私の環境はCentOS7.1のConoHaの最安プラン、kusanagiテンプレートを使用して、NGINX1.9.6に変更しています。参考サイトの環境はCentOS6.5とのことなので、CentOS6.5~7.1まではコピペでOKでしょう。

以下、流連荒亡さんのページを保管する意味も込めてコードを置いておきます。(私のはWordPress用ですが基本的には同じ内容です)

準備からインストールまでのコード

 

必要パッケージをまとめてインストール

[php]yum install libcurl libcurl-devel fuse fuse-devel fuse-libs libxml2 libxml2-devel openssl-devel gcc gcc-c++ make git[/php]

私の環境ではbzip2がなかったので以下も追加

[php]yum install bzip2[/php]

pacoのインストールは参考サイトのまんま

[php] 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[/php]

cloudfuseをインストールしてWordPressのメディアにマウント

まずはcloudfuseをインストールしてpacoの設定まで済ませます。

[php]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[/php]

catでもvimでも好きなのを使って、cloudfuseの設定ファイルを作ります。以下は例ですが、usernameとtenantはConoHaの管理画面で確認できます。

username-tenant-password

 

authurlについてはConoHaの管理画面でいうと、APIのエンドポイントにあるIdentity Serviceです。

 

[php] cd ~/

vi .cloudfuse

username=gncu123456789

tenant=gnct123456789

password=a1s23w5e5rr

authurl=https://identity.tyo1.conoha.io/v2.0

verify_ssl=True[/php]

パーミッションを変更しておきます。

 

[php]chmod 600 ~/.cloudfuse[/php]

これで cloudfuse /マウントしたいパス/ を実行すればマウントできるはずです。

以下はConoHaのkusanagiを使用している場合の例です。

[php]cloudfuse /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads[/php]

 

私はこの時点でフォルダが空ではなかったのでエラーが出ました。
cloudfuse -h で確認したところ -nonempty というオプションで回避できることがわかりました。

注意:オプションは -o (オプション1) (オプション2) ではなくて、-o (オプション1)  -o (オプション2)です

 

ここまでで問題がなければ df -kh | grep cloudfuse でマウントされていることが確認できるはずです。

本番用に自動マウントの設定と不具合の解消

本番では手動でマウントしないと思うので重要なのはここからです。ちなみに現時点では権限問題が発生しているかもしれません。その辺りの問題も解消しながら自動マウントを設定していきます。

自動マウントの設定を追加

以下のコマンドで編集画面にはいります。

[php]vi /etc/fstab[/php]

以下の設定を一番下にでも追加しましょう。

[php]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[/php]

 

 

ここは環境によっては重要なオプションを追加しました。実は参考サイトのコードをコピペして使ったら、私の環境ではサーバーが起動不可能になってしまったのです。
この参考になったのはCHANGE MAKERSさんのブログです。

_netdevはネットワーク起動後にマウントさせるというオプションらしく、これがないとサーバーが起動不可能になる可能性を秘めているとのことです。

それとallow_otherですが、私の環境ではマウント後のフォルダが権限不足になり編集不可能な状態に陥ったのですが、このオプションを追加することにより権限が正しく認識されるようになっています。

 

以上です!お疲れ様でした。

マウント状態の場合は一度以下のコマンドで解除しましょう。

[php]umount /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads[/php]

 

 

最後に以下のコマンドを実行すれば自動起動まで完了です。

※reboot後に他の問題が発生しても自己責任でお願いします。ぜひ問題を解決して情報を共有しましょう!

[php]mount -a[/php]

おまけ:アンマウントできねー

本来であれば以下のコマンドでマウントを解除します。

[php]umount /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads[/php]

でもdevice is busyというエラーがでることがあります。

そんなときは・・・

[php]umount -l /home/kusanagi/hogehoge/DocumentRoot/wp-content/uploads/[/php]

-lオプションを付けた方が賢いらしいです。参考サイトの綾小路龍之介さん

おまけ:ポストIDごとにフォルダ分け

参考にしたのは、くろねこハッピー工房さん!この方も天才でしょう。こんなコードを数分で書ければコピペプログラマーなんぞ続けていないんだけどなぁ( ;∀;)

このフォルダー構成は私の思い描いたシステムにピッタリはまりました!ありがたく使わせていただきます<(_ _)>テーマのfunction.phpで使用します

[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’ );
[/php]

まとめ

天才の方々がブログを残してくれたため、たった一日の勉強で可能性が広がりました。

またOpenStackというオープンソースのおかげで、思い描いたシステムも想像以上に早く実装できました。

プラグインの不具合に悩まされたり、もっと簡単な方法を模索したりすることで『無為に長い時間を消耗する』よりは、ちょっとした勉強が一番の近道になるケースも多いのかもしれませんね。

 

ちっぽけなコピペプログラマーですが今日も幸せです。

利用させてくださった方々に心より感謝申し上げます!!

 -

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

同じ分類

XサーバーのPukiWikiではkakasiもchasenも使えない

有名どころのオープンソースには触っておきたいのでWikiGAというFreeGAのウィキサイトを立ててみました。 サブ〚…続き〛

Conohaの草薙!abベンチの結果が凄すぎてPHP7のリバースプロキシを止めることにした

Conohaの900円プランにて PHP7 + NGINX1.9.5 + MySQL5.7.8 の組み合わせでコツコ〚…続き〛

ConoHaで気軽にプラン変更したら止まって困った

趣味で製作中のサイトを暫らく放置していたのですが、重い腰を上げて作業に入りました! が!しかし、手始めにConoHa〚…続き〛

wordpress(stinger5)をカスタマイズして画像サイトにする

sitnger5に対して行った変更のまとめです。 当サイトやフリーガはstinger5をベースに制作しています。 同〚…続き〛

プラグインのCSSを探し当てて停止する私的なコツ

作業はfunctions.phpの編集で行います。 この手の作業は使用プラグインとバージョンによって微妙に異なるので〚…続き〛

G+