WEBサーバー

ECCUBE 2.13.x on AWS EC2 & EFS

ECCUBE 4がリリースされており、3ですら乗り遅れていますが、
中身をイジリまくっているシステムとしては、
安易に移行ができません。

この度、PHP7への対応を行った「EC-CUBE 2.17.0α」の存在を知りましたが、

https://www.ec-cube.net/news/detail.php?news_id=290

これも1年前のリリース。

まだ、開発者向けのαなので、

***

さて、この度、AWS 東京リージョンで、EFSが使えるようになり、
2つ以上のEC2上でのファイル共有がすこぶる楽になったわけですが、
全然、使いこなせていませんでした。

※EFS ≒ NFS ≒ファイル共有システム

その理由は、過去に行った改造によるもの

通常

  • data
  • html

のフォルダーになっていますが、
フォルダー移動が面倒という理由から、
html下にdataフォルダーを移動させました。

define.phpで宣言されている

/** HTMLディレクトリからのDATAディレクトリの相対パス */
define('HTML2DATA_DIR', '../_data/');

を、「./_data/」に書き換えるだけで、
作業効率が著しく上がったのですが、

2台のEC2のファイル更新が面倒で面倒で、
ようやく導入されたEFSに飛びついたわけですが、

全ファイルをEFSに移動させたところ、

超遅い!!

 

これは、smartyのtemplate_c以下に生成される
テンプレートファイルの読み書きの問題だと思いますが、

user_data(ベースのテンプレートが保存されている)だけを、
EFSに移行させたところ、速度は改善されました。

dataフォルダーは滅多に書き換えることがないのですが、
このdataが下層フォルダーにあることで、
EFSに乗せることができない状況にありました。

=HTML2DATA_DIR ../data/ >> ./data/の書き換えが原因

 

ということで、今回標準のdataフォルダーを、
htmlの同層にもどし、htmlをEFSに載せましたが、

当初、なんでこんな2層にしているだろう?
と疑問に思っておりましたが、

NFS(EFS)にHTMLを乗せるための、構造だったんですね!

製作者の意図が汲み取れず、自分が情けなくなりました。。。

 

これで、html以下にあるshoppingなどのphpを書き換えも、
2台分書き換えなくてよくなり、大変便利になり、
ECCUBEの開発元のロックオンさんの設計の素晴らしさに痛感しました!

 

3系は、システム設計が根本から変わっており、
参入障壁が高いことから、2.17に期待したいところですが、
すでに4リリースされていることもあり、

すでに過去の遺産・・・

 

来年こそは、3系に移行できたら良いなと思っている今日このごろです。

-

rclone on AWS EC2(Amazon Linux)の設定 @Google Drive

なんて不親切なんだろう・・・という、設定記事しかなく
最終的に、

rcloneでGoogle Driveへのリモートバックアップを自動化する【rsyncみたいなやつ】

を見つけて、ようやくGoogle Driveの接続が出来ました。
動いてしまえば、どの記事を読んでも「ああ~」という感じなんですが、
悩ましいかったところを強調して、記載してみました。

rcloneのインストール

curl https://rclone.org/install.sh | sudo bash

これだけ。あっけないぐらい、
あとは、つらつらと勝手にインストールしてくれます。

rcloneの設定

インストール完了後、入力するところを、強調しています。
※当然ながら、以降は入力せんでいいやつです。

[ec2-user@ip-10-0-0-0 ~]$ rclone config
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n ※新規
name> GoogleDrive ※任意
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
(省略)
11 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
12 / Google Drive
\ "drive"
(省略)
Storage> 12
** See help for drive backend at: https://rclone.org/drive/ **

Google Application Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id> 000000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com ※Google APIs 承認情報
Google Application Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> xxxxxxxxxxxxxxxxxxxxxxxxx ※Google APIs 承認情報

Google Driveを使うには、認証が必要です。

  • client_id
  • client_secret

は、まず、

https://console.developers.google.com/apis/credentials

に、読み書きしたいGoogleDriveのアカウントでログインします。
規約云々は、やり過ごしてもらって、

1. プロジェクトを作成

 

※場所は、「組織なし」で、作成を押します。

2. 認証情報

「OAuth クライアント ID の作成」をしていきます。

++ 以下、作成中 ++

では、続きを。

Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / Full access all files, excluding Application Data Folder.
\ "drive"
2 / Read-only access to file metadata and file contents.
\ "drive.readonly"
/ Access to files created by rclone only.
(省略)
scope> 2 ※readonly(EC2から書き込む予定があれば、1)
ID of the root folder
Leave blank normally.
Fill in to access "Computers" folders. (see docs).
Enter a string value. Press Enter for the default ("").
root_folder_id> xxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxx ※ルート直下の場合はなにも入力しない
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Enter a string value. Press Enter for the default ("").
service_account_file> ※なにも入れず、Enterを押す
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> n
If your browser doesn't open automatically go to the following link: 
https://accounts.google.com/o/oauth2/auth?(省略)
※このURLをブラウザーに貼り付け、認証の手続きを行う。
Log in and authorize rclone for access
Enter verification code> xxxxxxxxxxxxxxxxxxxxxxx ※承認後に表示されるコード
Configure this as a team drive?
y) Yes
n) No
y/n> n
--------------------
[GoogleDrive] ※最初に設定した名前
type = drive
client_id = 000000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
client_secret = xxxxxxxxxxxxxxxxxxxxxxxxx
scope = drive.readonly
root_folder_id = xxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxx
token = {"access_token":"xxxx","token_type":"Bearer","refresh_token":"1/xxxx","expiry":"2018-10-28T18:54:53.172455517Z"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name Type
==== ====
GoogleDrive drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q ※終了

rcloseの動作確認

rclone ls GoogleDrive:/

の実行結果↓

rclose 実行

無事、GoogleDrive上の一覧を取得することが出来ました!

Amazon Cloudですが、こちらも参考に。

>> https://qiita.com/_akisato/items/f4b36e86fcf7ae665b4d

 

rclone 導入経緯

クライアントで入力された値を、直接WEBのURLを叩いて、データを送り込むのが普通なんですが、
「インターネット非接続状態で動かない」という
現場からのクレームを考えた結果、

ファイルとしてログを保存しておけば、
オンラインになれば、GoogleDriveが勝手に、
ファイルを吸い上げてくれるので、

オフライン・オンライン時の処理を簡素化するために、GoogleDriveを使いました。

Gmailやリモートデスクトップも使えるので、
ホントGoogleアカウントは便利ですネ?!

***

そんなわけで、どうしても、EC2からGoogleDriveにアクセスする必要があり、

まず試したのが、「google-drive-ocamlfuse」なんですが、
インストールで失敗します。
リポジトリー先にファイルがなく、開発終了?のため断念。

参考 > https://qiita.com/wapa5pow/items/b91be008810331c4dc59

次に、PHPでやろうとしたのですが、コンソールでないと動かないようで、

参考 > https://t.co/fyUsZ8TBx0

(後で思えば、execで呼び出せばよかった)
Javascript版でGoogleDriveを読み込んで、AJAXでDBに書き込もうかとしたのですが、
それも面倒だったので、

rcloneにたどり着いたわけです。

 

せっかくなので、
WEBサーバーのファイルバックアップの設定もしておきたいと思います。

-