💨
EC-CUBEをGoogle App Engineにデプロイする際にはまったポイント
先日EC-CUBEをGoogle App Engine上にデプロイする際にはまったポイントがいくつかありましたので、今後困らないように備忘録としてまとめます。
環境
EC-CUBE 4.2
Symfony 5.4
PHP 7.4
MySQL 5.7
ログ・キャッシュ・セッションがうまく出力されない
EC-CUBEのデフォルト設定だと var/
配下にログ・キャッシュ・セッションのディレクトリが作成されるようになっていますが、App Engineから作成できずエラーとなっていました。
ログ対応
ログの出力先を標準エラー出力に変更し、ログエクスプローラーで拾ってもらうようにしました。
app/config/eccube/packages/prod/monolog.yml
monolog:
handlers:
e_user_deprecated_filter:
type: filter
accepted_levels: ['info']
channels: ['php']
handler: blackhole
bubble: false
main:
type: fingers_crossed
action_level: error
passthru_level: info
handler: main_rotating_file
main_rotating_file:
# type: rotating_file
# max_files: 60
# path: '%kernel.logs_dir%/%kernel.environment%/site.log'
# formatter: eccube.log.formatter.line
# level: debug
type: stream
path: "php://stderr"
level: debug
front:
type: fingers_crossed
action_level: error
passthru_level: info
handler: front_rotating_file
channels: ['front', 'app', 'php']
front_rotating_file:
# type: rotating_file
# max_files: 60
# path: '%kernel.logs_dir%/%kernel.environment%/front.log'
# formatter: eccube.log.formatter.line
# level: debug
type: stream
path: "php://stderr"
level: debug
admin:
type: fingers_crossed
action_level: error
passthru_level: info
handler: admin_rotating_file
channels: ['admin', 'app', 'php']
admin_rotating_file:
# type: rotating_file
# max_files: 60
# path: '%kernel.logs_dir%/%kernel.environment%/admin.log'
# formatter: eccube.log.formatter.line
# level: debug
type: stream
path: "php://stderr"
level: debug
console:
type: console
process_psr_3_messages: false
channels: ['!event', '!doctrine']
# keep this last
blackhole:
type: "null"
キャッシュ対応
キャッシュの保存場所をApp Engineが書き込めるtmp配下に変更しました。ここでは念のためログの出力先もtmp配下に変えています。
src/Eccube/Kernel.php
public function getCacheDir()
{
if ($this->environment === 'prod') {
return '/tmp/var/cache/'.$this->environment;
}
return $this->getProjectDir().'/var/cache/'.$this->environment;
}
public function getLogDir()
{
if ($this->environment === 'prod') {
return '/tmp/var/log';
}
return $this->getProjectDir().'/var/log';
}
セッション対応
セッションの保存場所をDBに変更しました。
参考: https://doc4.ec-cube.net/session_handler_settings#rdbmsに保存する
CSS、JS、画像ファイルが配信されない
こちらはapp.yamlに以下のhandlersを追加することで配信できるようになりました。
app.yaml
handlers:
- url: /html/template/admin/assets
static_dir: html/template/admin/assets
- url: /html/template/default/assets
static_dir: html/template/default/assets
- url: /html/user_data/assets
static_dir: html/user_data/assets
- url: /html/upload/save_image
static_dir: html/upload/save_image
- url: /html/bundle
static_dir: html/bundle
Cloud SQLに接続できない
ここは非常にはまりました。トライアンドエラーで何とか接続できるようになりましたのでその設定を記載しておきます。
DB名を重複して設定しているのがミソです。これでなぜか動きました()
DATABASE_URL: mysql://[ユーザ名]:[パスワード]@localhost/[DB名]?unix_socket=/cloudsql/[CloudSQLインスタンス接続名]&dbname=[DB名]
例)
DATABASE_URL: mysql://user:password@localhost/eccubedb?unix_socket=/cloudsql/xxx:asia-nortieast1:instance-name&dbname=eccubedb
Discussion