はりうすブログ (のすけのメモ)

はりうす代表 ”のすけ”のブログです

KUSANAGI@Conohaでオブジェクトストレージ設定のベストプラクティス

こんにちは、のすけです。

KUSANAGIを利用する理由として、今まで利用していたサーバーが遅いので
変えたいという動機が多いかと思います。

しかしながら、前回紹介して方法だと、WordPressKUSANAGIに移行する場合
既存のメディアライブラリの画像などが上手く認識されないなどの問題が出てきました。

hollywis.hatenablog.com


他の方法を模索したところ、別の手法を見つけました。

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

ただ、こちらの手法ですとディスクのマウントに失敗する事が多いため

あれこれと試し、最適な方法を見つけました。

まず、手順通り cloudfuseを入れます。

cloudfuseを入れる

yum -y install \
    libcurl libcurl-devel \
    fuse* fuse fuse-devel fuse-libs \
    libxml2 libxml2-devel openssl-devel \
    gcc gcc-c++ make git curl

git clone https://github.com/redbo/cloudfuse.git

cloudfuseというディレクトリができています。

cd cloudfuse
.configure

jsonのエラーが出たのでjson-c-develをインストール

yum -y install json-c-devel
.configure

make
make install

cd ../
rm -rf cloudfuse

ホームディレクトリ以下に .cloudfuse というテキストファイルを作成する

cd
nano .cloudfuse

内容

username=APIユーザ名
tenant=テナント名
password=APIパスワード
authurl=https://identity.tyo2.conoha.io/v2.0  (Identity ServiceのURL)
verify_ssl=True

Ctl(controlY)+X Y Enter
で保存します。

マウントテスト

cloudfuseを使ってマウントテストします。とりあえず /mntにマウントします。

cloudfuse /mnt

df -h

f:id:hollywis:20181018163900p:plain

大丈夫なようなら次に進みます。もし問題がある場合は「.cloudfuse」の設置値に問題があるので修正します。

自動マウント

それでは次に重要な自動マウント設定をやります。

私はここの検証にかなりの時間を使ってしまった。

最初は手順通り /etc/fstab を使って設定したのですがうまく自動マウントされなくてハマってしまいました。

その他、crontabの@rebootで、再起動後のスクリプトでcloudfuseコマンドを打ったりしたのですが、特定のユーザアカウントでは参照できるが
別のアカウントではドライブが参照できないなど、色々と罠に合いました。

結果的に、最初の「/etc/fstab」に設定を入れるのが最適だと判断しました。

ダメだった方法(crontab)

crontabの起動時に一度だけ実行される設定を追加してみました。
crontabに以下を追加

crontab -e

以下を最後の行に追記(xxxxxxのところはご自分のConohaAPIの設定値を入れてください)

@reboot /usr/local/bin/cloudfuse -o nonempty -o username=gncuxxxxxxx,tenant=gnctxxxxxxxx,password=xxxxxxxxx,authurl=https://identity.tyo2.conoha.io/v2.0,verify_ssl=True /home/kusanagi/rsel_terakoya/DocumentRoot/wp-content/uploads

結果、これでは特定のユーザしかディスクが参照できずダメでした。mountのオプション指定でなんとかなるのかもしれませんが、kusanagi
やnginxのユーザのアクセス権など混乱するので、結果的に諦めました。

/etc/fstabとは

OSを起動したときに、この/etc/fstabファイルが参照されます。そうするとそこに書かれている設定値でファイルシステムをマウントします。

例:

# cat /etc/fstab
/dev/hda1 / ext2 defaults 1 1


・1列目:デバイスファイル名
・2列目:マウント場所
・3列目:ファイルシステムの種類(ext2,ext3など)
・4列目:オプション
・5列目:dumpでバックアップするかしないか。(0 or 1) ext2ext3は1を指定する。
・6列目:システム起動時にファイルシステムチェック(fsckチェック)する順番を指定 (0,1,2) 0の場合はチェックしない 。ルートファイルシステムは1にしないといけない。

cloudfuseを/etc/fstabに設定数する

という事で /ect/fstabを使っていきました

# cd /home/kusanagi/( kusanagi_provision_name )/DocumentRoot/wp-content/

kusanagi_provision_nameにはKUSANAGIをセットアップ下際のプロジビジョン名を入れます

次にupulodsに変わるマウントポイントとなるディレクトリを作ります。(ex: cos)

# mkdir cos

# vi /ect/fstab 

一番下の行に次を追加します

/usr/local/bin/cloudfuse /home/kusanagi/( kusanagi_provision_name )/DocumentRoot/wp-content/cos fuse username=gncuxxxxxxxx,tenant=gnctxxxxxxxx,password=xxxxxxxxx,authurl=https://identity.tyo2.conoha.io/v2.0,verify_ssl=True,auto,_netdev,defaults,umask=001,allow_other      0 0

説明:cloudfuseでcosをマウントします。

usernameやtenant,passwoed,authurl, verify_sslは.configureと一緒ですね.

あとは、autoでmount -aで自動マウントするように。_netdevでネットワーク接続語にマウントを実行するオプションを指定

重要なのは,umaskで001を指定する事で,chmodの776と同じくなります。003でも良いかもしれません。

設定したら、うまくいくか確認します。

mount -a

何も表示されなければokです。

dfコマンドで、マウントを確認します。

df -h


よければ再起動して、テストします。

reboot

再起動後、ログインしてdfで再度確認します。

df -h

こんな感じでマウントされて入ればOKです。
f:id:hollywis:20181029150329p:plain


WordPressのメディアの参照先を変える

このままでは、「uploads」を参照してしまうので、作成した「cos」を参照するように変更する必要があります。

管理画面にログインし、URLを「/wp-admin」
から
「/wp-admin/options.php」に移動します。

するとWordPressのオプション設定画面にいくので
以下の設定を入れます。

WP options設定

upload_path wp-content/cos

upload_url_path https://object-storage.tyo2.conoha.io/v1/nc_(テナントID)

※upload_url_pathについては環境によって違うかもしれません。Cyberduckにアップロードしたファイルを選択して右クリックした際に、「URLをコピー」をクリックして取得したURLの最後のファイル名を除いたURLを設定します。

おまけ Cyberduckにアップしたファイルが参照できない場合

自分のPCのconoha-ojsをインストールします。

GitHub - hironobu-s/conoha-ojs: CLI-tool for ConoHa Object Storage


インストール後、認証して

conoha-ojs auth -u "gncuxxxxx" -p "xxxx" -t "xxxxxxx" -a "https://identity.tyo2.conoha.io/v2.0"

公開したいディレクトリを公開設定します
例:2017と2018を公開させる

conoha-ojs post -r ".r:*" 2017
conoha-ojs post -r ".r:*" 2018