Memo

メモ > 技術 > CMS: ECCube > 本番環境(AWS想定)での稼働

■本番環境(AWS想定)での稼働
意外に簡単!?最新EC-CUBEのAWSインストール方法 【ネットショップ構築最前線】 https://regolith.diezon.co.jp/ec11_aws.detail.html EC-CUBE4の立ち上げ〜AWSにデプロイするまで - ひろこま Hack Log https://www.mahirokazuko.com/entry/2020/01/03/235548 ■nginx ※未検証 公式にはApacheしか記載は無いが、動かないわけでは無いみたい [備忘録] EC-CUBE4をnginx上で動かす | planet-green.com https://planet-green.com/eccube4-on-nginx/3235 ■複数台構成の考察 rsyncで双方向同期…なら大丈夫そうだが、 きちんと「画像はS3に置いて」は難しそう EC-CUBEによるECサイトの負荷対策 https://www.slideshare.net/kazunoriinaba/20171010jawsugeccube 「負荷対策(1)」で紹介されているが、S3を使うとしても ・管理用サーバを1台とし、管理画面へはそこへ直接アクセス ・uploadやuser_dataなど、同期が必要なものは管理用サーバからS3に転送。公開用サーバはS3から取得 となる?つまり、S3に対応させる場合でも「ECCubeが直接S3を扱うように」は不可能? 【JAWS-UG関西女子会】#2 ELB+EC2+RDSでECサイトをつくろう 〜EC-CUBEコンテンツ同期編〜 - Qiita https://qiita.com/naotinn74/items/83ccefd08bbea796f359 双方向同期の情報はある EFSは今も激重か?使用実績は無い? 以下は最近の情報みたい Amazon Elastic File System(EFS)を使ううえでの勘所 - Qiita https://qiita.com/taichimachima/items/f7d47b68aac2a11ea7cc 色々と注意があるようなので、いきなりの実戦投入はリスクが高そう EC-CUBE とクラウドは仲良しか? https://www.slideshare.net/nanasess/aw-svs-azure ECCubeをBeanstalkで使う場合について触れられているが、ECCubeがスケーリングには対応してないとある EC-CUBE4のアーキテクチャとこれから https://www.ec-cube.net/user_data/press/R1-3_eccube.pdf いくらか参考になるかもしれない 又聞きだが、ECCube公式に確認して「ECCube自体がスケーリングを想定していないので、正式な対応手順があるわけでは無い」と回答されたとのこと 「不可能ではないが色々と工夫が必要」という感じ 「管理画面用サーバの内容をS3に自動転送して、ユーザ画面用サーバで自動取得する」が一応のベストかもしれない が、プログラム側では複数台構成を意識しなくていい「rsyncで同期方式」が無難か ■複数台構成の実践 ※詳細は要検証 基本的には、rsyncでの双方向同期で対応できそう ただしrsyncで双方向同期する際、var の内容を同期すると正しく動作しなかった いったん lsyncd.conf にて var のみ双方向同期の対象から外して対応した var 内にはエラーログなども格納されるので、ここはむしろ同期すべきでは無いかも
exclude = { "*.swp", "/html/var" },
また html/user_data/ 内にディレクトリを作成すると、グループのパーミッションが除外される(ECCubeがそのように処理しているみたい) FileController.php の181行目あたりにある $fs->mkdir($nowDir.'/'.$filename); の直後に chmod($nowDir.'/'.$filename, 0777); を追加すれば何とかなるかもしれない ただし影響範囲が読みづらいので、rsyncにsudoを許可して所有者も含めて双方向同期する方が無難そう 具体的には lsyncd.conf にて以下のように設定した
rsync = { archive = true, compress = false, owner = true, … パーミッションを保持した状態で同期 group = true, … パーミッションを保持した状態で同期 rsync_path = "sudo /usr/bin/rsync", … 管理者権限で rsync を実行 rsh = "ssh -p 10022" }
この設定を行うには、あらかじめ rsync ユーザに /usr/bin/rsync のsudo許可をしておく必要がある
# visudo -f /etc/sudoers.d/users
Cmnd_Alias RSYNCCOMMANDS = /usr/bin/rsync rsync ALL=PASSWD: ALL, NOPASSWD: RSYNCCOMMANDS
追加後、下記コマンドで追加されているか確認できる
# su -s /bin/bash - rsync … rsyncユーザへ切り替え # cat /etc/sudoers.d/users … usersファイルの所有者はrootの為、権限エラー # sudo cat /etc/sudoers.d/users … sudoに追加されていても、許可されたコマンドではないためパスワードが要求される # sudo rsync --version … sudoに追加されており、且つ許可されたコマンドなのでパスワードが要求されず実行できる
■設定ファイル インストール方法 - < for EC-CUBE 4.0 Developers /> https://doc4.ec-cube.net/quickstart_install 「インストール完了後、インストールディレクトリにデータベースの接続情報等が設定された .env ファイルが生成されます。 .env ファイルは、開発用途での環境変数を設定するためのものであり、本番環境での使用は推奨されません。 本番環境では、環境変数をサーバ設定ファイルに設定することを推奨します。 サーバ設定ファイルに環境変数を設定することにより、環境変数が外部に暴露される危険性が減り、安全に運用できます。」 自動作成された .env は削除したうえで、httpd.conf や .htaccess で設定することが推奨される 例えばインストール完了後に /var/www/main/html/.env
APP_ENV=prod APP_DEBUG=0 DATABASE_URL=mysql://webmaster:1234@localhost/main DATABASE_SERVER_VERSION=5.5.64-MariaDB MAILER_URL=smtp://smtp.gmail.com:465?username=example@gmail.com&password=xxxxxxxxxxxxxxxx&encryption=ssl&auth_mode=login ECCUBE_AUTH_MAGIC=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ECCUBE_ADMIN_ALLOW_HOSTS=[] ECCUBE_FORCE_SSL=false ECCUBE_ADMIN_ROUTE=system ECCUBE_COOKIE_PATH=/ ECCUBE_TEMPLATE_CODE=default ECCUBE_LOCALE=ja
と設定されている場合、以下のようにする /var/www/main/.htaccess
SetEnv APP_ENV prod SetEnv APP_DEBUG 0 SetEnv DATABASE_URL mysql://webmaster:1234@localhost/main SetEnv DATABASE_SERVER_VERSION 5.5.64-MariaDB SetEnv MAILER_URL smtp://smtp.gmail.com:465?username=example@gmail.com&password=xxxxxxxxxxxxxxxx&encryption=ssl&auth_mode=login SetEnv ECCUBE_AUTH_MAGIC xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx SetEnv ECCUBE_ADMIN_ALLOW_HOSTS [] SetEnv ECCUBE_FORCE_SSL false SetEnv ECCUBE_ADMIN_ROUTE system SetEnv ECCUBE_COOKIE_PATH / SetEnv ECCUBE_TEMPLATE_CODE default SetEnv ECCUBE_LOCALE ja
ブラウザでアクセスして、.env があるときと同じように表示されるか確認する インストール画面が表示される場合、設定内容が認識されていないと思われる /var/www/main 内で .htaccess の利用を許可されているかなどを確認する ただしこの設定をした場合、以下の機能を管理画面から設定できなくなる ・管理画面 → オーナーズストア → テンプレート ・管理画面 → 設定 → システム設定 → セキュリティ管理 また、「セキュリティ管理」の画面に 「 .envファイルが見つかりません。.envを利用していない場合はセキュリティ設定を管理画面から変更できません。」 と表示されるようになる この設定をした場合、マイグレーションなど bin/console を使う機能が正しく動作するか確認する (「マイグレーションがエラーになるようになった」と報告をもらったことがあるが、勘違いなのかどうかは不明) ただしそもそも、上記のように「管理画面から設定できなくなる」が発生するのは後々ややこしそう よって ・本番環境では .env の場所を一階層上げる(開発環境ではそのままでもいい) ・index.php で「../../.env」があればそれを読み込むという分岐を設ける ・bin/console で「../../.env」があればそれを読み込むという分岐を設ける ・src/Eccube/Controller/Admin/Setting/System/SecurityController.php をもとに app/Customize/Controller/Admin/Setting/System/SecurityController.php を作成し、「../../.env」があればそれを読み書きするという分岐を設ける という対応の方が良さそう 実際の案件で試して、現状特に問題なく動作している phpdotenvで環境変数を制御する - demolog http://skitn.hateblo.jp/entry/2018/04/22/212210 phpdotenvについて。 - Qiita https://qiita.com/H40831/items/aaf8ffa727928661ad1d ■SSLの強制 管理画面 → 設定 → 店舗設定 → セキュリティ管理 に「SSLを強制」という項目があり、通常はこれにチェックを入れるだけで対応が可能なはず ただし「httpsからの接続でなければSSL制限を設定できません。」と補足が書かれていて、AWSのロードバランサー経由で確認するとチェックができない ロードバランサーからEC2へのアクセスはSSLでは無いため、恐らく自動判別に失敗しているのだと思われる 以下で対応はできそうだが、プログラムを編集する必要はある ただし上の「設定ファイル」でも index.php と bin/console を編集する案があるので、素直に「本番環境ならSSLを強制」のコードをプログラム内に書くか 【EC-CUBE4系】Certificate ManagerでHTTPSを導入 | クマひよ工房 https://kumahiyo.com/certificate-manage/ EC-CUBE4カスタマイズ - ロードバランサを使用するとHTTPS・SSLが認識されない場合の対応 https://umebius.com/eccube/behind-load-balancer-ssl/

Advertisement