1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SoftLayer Object Storageを使ってEC-CUBEの画像ファイルを送信する。

Posted at

このエントリはSoftLayerAdventCalendar2014の16日目のエントリです。

#概要
EC-CUBEはオープンソースのECサイト構築パッケージです。今回はEC-CUBEをSoftLayer上に作成し、尚且つ商品の画像ファイル等をObjectStorageに保存,配信する方法を紹介します。

EC-CUBEは通常、Apache+PHP+MySQLの構成で構築されることが多いです。今回はEC-CUBEの高速化を図るために、ApacheではなくApacheと比較してメモリ消費量が少なく、サーバー本体への負担が低いNginx+PHP-FPMの構成で環境を構築します、またECサイトなので画像を使う事が多いかと思います。静的コンテンツである画像等をSoftLayer ObjectStorageに保存しサーバーのCPUやメモリの負荷を下げるアプローチとなります。
#前提
SoftLayer Object Storageのコンテナは設定済みのものとします。
設定に関しては次のリンクが参考になります。ソフトレイヤー活用技術資料 -> コンフィグレーションガイド -> 5.オブジェクト・ストレージ編
#構成
OS:CentOS6.x
WEB:Nginx1.6.2
DB:MySQL5.6.16
PHP-FPM:5.5.10
EC-CUBE:2.13.3
#インストール
上記パッケージはソースコンパイルでインストールしてます。ですがyumでのインストールでも問題ありません。
詳細は割愛します。。

#Object Storageへ画像のアップロード
ObjectStorageへの画像アップロードは管理ポータルからアップロードする方法もありますが、アップする画像が多い時など結構面倒くさいです。APIを使う方法もありますが今回は次のリンクを参考にCloudBerry Explorer for OpenStack (Windows)を使って画像をアップロードします。一括でアップロード出来るので便利ですね。

SoftLayer Object Storage のファイル操作を簡単に行う方法

screen1.png

###アップロードするEC-CUBEのディレクトリ
/var/www/eccube_html/user_data/packages/default/img
img以下に存在する画像を設定済みのコンテナにアップロードします。EC-CUBEはデバイス毎(PC用、スマホ用、モバイル用)にディレクトリが分かれていますが、今回はPC用:default以下の画像を対象とします。
※eccube_htmlは任意のディレクトリ

#登録された動画・画像のブラウザからの参照の有効化
管理ポータル画面から、コンテナの中のページに移動し「Static Site Access」の「Enable Static Site」のチェックボックスを有効にします。

#画像ファイルをObjectStorageを参照するように変更する
Nginxのリダイレクト(rewrite)を使います。
###Nginx設定ファイル

/etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        #root   /usr/share/nginx/html;
        root   /var/www/eccube_html;
        index  index.html index.htm index.php;
    }

    location /user_data/packages/default/img/ {
        rewrite ^/user_data/packages/default/img/(.*)/(.*) https://sjc01.objectstorage.softlayer.net/v1/AUTH_xxxxxxxxxxxxxxxxxxxxxxxx/sjc-object-storage/img/$1/$2;
# xxxxxの所は環境に応じて変更ください。
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/eccube_html$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

この設定では/user_data/packages/default/img/以下のファイルへのアクセスをオブジェクト・ストレージに変更しています。
※sjc-object-storageはコンテナ名です。

screen2.png
※見た目は変わりませんが、各画像がObjectStrageから配信されています。

#まとめ
以上でEC-CUBEの画像ファイルをObjectStorageから配信する事が出来ました。今度時間があれば、商品画像を登録する際、ローカルからObjectStorageに画像を保存する機能をSoftLayerのAPIを使って実現したいと思います。最後になりましたが、この記事が何かのお役に立てれば幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?