EC-CUBE

EC-CUBEのカート機能を見てみる。参考にしたい。
https://github.com/EC-CUBE/ec-cube/tree/4.3
からec-cube-4.3 を採ってきて、でインストールして動かしてみる。

https://doc4.ec-cube.net/quickstart/composer_web_installer
https://doc4.ec-cube.net/quickstart/command_install
ComposerからWebインストーラでインストールする
$ cd /myproj
グローバルにインストールされている composer のバージョンをEC-CUBE 4.0の対応しているバー
ジョン(1.x)に変更
$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ composer self-update –1
Storing “stable” as default update channel for the next self-update run.
Warning: You forced the install of 1.10.27 via –1, but 2.8.1 is the latest stable version. Updating to it via composer self-update –stable is recommended.
Upgrading to version 1.10.27 (1.x channel).
Use composer self-update –rollback to return to version 2.7.8
$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ composer –version
Composer version 1.10.27 2023-09-29 10:50:23
$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ php composer.phar create-project –no-scripts ec-cube/ec-cube ec-cube “4.1.x-dev” –keep-vcs
Warning from https://repo.packagist.org: Support for Composer 1 will be shutdown on August 1st 2025. You should upgrade to Composer 2. See https://blog.packagist.com/shutting-down-packagist-org-support-for-composer-1-x/
\ [InvalidArgumentException]
\ Could not find package ec-cube/ec-cube with version 4.1.x-dev in a version installable using your PHP version 8.2.23.
(失敗らしい)

$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ composer self-update –2
Updating to version 2.8.1 (2.x channel).
Downloading (100%)
Use composer self-update –rollback to return to version 1.10.27
$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ composer create-project –no-scripts ec-cube/ec-cube ec-cube “4.1.x-dev” –keep-vcs
Creating a “ec-cube/ec-cube” project at “./ec-cube”
Cannot use ec-cube/ec-cube’s latest version 4.1.x-dev as it requires php ^7.3 which is not satisfied by your platform.
In CreateProjectCommand.php line 421:
Could not find package ec-cube/ec-cube with version 4.1.x-dev in a version installable using your PHP version, PHP extensions and Composer version.
(PHP8では動かないらしい)

$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ composer create-project –no-scripts ec-cube/ec-cube ec-cube “4.3.0” –keep-vcs
Creating a “ec-cube/ec-cube” project at “./ec-cube”
Installing ec-cube/ec-cube (4.3.0)
\ – Syncing ec-cube/ec-cube (4.3.0) into cache
\ – Installing ec-cube/ec-cube (4.3.0): Cloning c972044390 from cache
Created project in /myproj/ec-cube
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 190 installs, 0 updates, 0 removals
\ – Downloading ec-cube/plugin-installer (2.0.1)
(メモ省略)
\ – Installing vlucas/phpdotenv (v5.6.0): Extracting archive
Package sensio/framework-extra-bundle is abandoned, you should avoid using it. Use Symfony instead.
Generating optimized autoload files
146 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Run composer recipes at any time to see the status of your Symfony recipes.
Found 3 security vulnerability advisories affecting 2 packages.
Run “composer audit” for a full list of advisories.
(4.3.0 にしたらとってこれた)

$ cd ec-cube
$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ php bin/console server:run
\ There are no commands defined in the “server” namespace.
\ You may be looking for a command provided by the “Debug Bundle” which is currently not installed. Try running “composer require symfony/debug-bundle –dev”.

`EC-CUBE v4.3.0` で `php bin/console server:run` を実行した際に「There are no commands defined in the “server” namespace.」というエラーが発生しています。この問題は、Symfony の `server:run` コマンドが現在のバージョンの Symfony では含まれていないことが原因です。(->ChatGPT)
Symfony 4.4 以降では、`server:run` コマンドはデフォルトで削除され、代わりに他の手法が推奨されています。具体的には、以下の方法を試してみてください。
### 1. Symfony CLI を使用
Symfony が提供する CLI ツールを使用して、ローカルサーバーを実行できます。
$ symfony server:start
これにより、Symfony CLI がサーバーを起動します。Symfony CLI がインストールされていない場合は、以下のコマンドでインストールできます。
$ curl -sS https://get.symfony.com/cli/installer | bash
### 2. PHP のビルトインサーバーを使用
PHP 自体に組み込まれているサーバー機能を使って、サーバーを起動する方法もあります。
$ php -S localhost:8000 -t public/
これにより、`public/` ディレクトリをルートとしてサーバーが起動します。
### 3. Composer で Debug Bundle を追加
エラーメッセージで提案されている通り、Symfony の Debug Bundle をインストールして、古い `server:run` コマンドを利用することも可能です。
$ composer require symfony/debug-bundle –dev
その後、再度以下のコマンドを試してみてください。
$ php bin/console server:run
このいずれかの方法で、サーバーを起動できるはずです。

ec-cube以下にpublicは無く、DocRootをhtmlにしても動作しない。index.phpはec-cube直下にある。
$ php -S localhost:8000 -t . index.php
を実行したが、システムエラーになった。var/log/prod/のログを見るとSQLiteになっていた。
.envを設定してなかった。
.envについて、EC-CUBEではデフォルトで、DATABASE_URL=sqlite:///var/eccube.db となっていた。
DB_CONNECTION=mysql、DB_HOST=127.0.0.1、DB_PORT=????
DB_DATABASE=ec-cube_001、DB_USERNAME=root、DB_PASSWORD=passwd
としたいが、EC-CUBEでは、データのフォーマット?をどうやって作成する?
EC-CUBE v4.3.0 では、`DATABASE_URL` を使ってデータベース接続情報を設定します。Laravel とは異なり、`.env` ファイルで直接 `DB_CONNECTION` などのキーは使用しません。MySQL データベースを使用する場合、`DATABASE_URL` の形式に合わせて設定を行います。
以下のように `.env` ファイルで設定してください:
DATABASE_URL=mysql://root:passwd@127.0.0.1:3306/ec_cube_001
この形式では次の情報を指定しています:
\- `mysql://`: 接続するデータベースの種類(この場合は MySQL)
\- `root`: データベースのユーザー名
\- `passwd`: データベースのパスワード
\- `127.0.0.1`: データベースサーバーのホスト
\- `3306`: MySQL のデフォルトポート
\- `ec_cube_001`: データベース名
### データベースのポート番号
`DB_PORT` に相当する値は MySQL のデフォルトポート番号 `3306` です。このため、ポート番号が変更されていない場合は `3306` を使用します。
### フォーマットについて
EC-CUBE は `.env` ファイルの `DATABASE_URL` を使ってデータベース接続を行います。`.env` 内で複数のキーに分けて定義するのではなく、全てを1行にまとめた形式が EC-CUBE の標準的な設定方法です。
これで、MySQL に接続するための準備が整います。
### 注意点
データベースのマイグレーションやテーブル作成を行う際には、以下のコマンドを実行してデータベーススキーマを更新してください。
$ php bin/console doctrine:schema:update –force
これにより、MySQL に必要なテーブルが自動的に作成されます。(前もってDBを作成していないとエラー)

$ mysql -u root -p (sudoでなくとも行けたのか。そのうちidもrootから変えよう)
MariaDB [(none)]> CREATE DATABASE ec_cube_001; (MariaDBは’-‘を使えないらしい)
$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ php bin/console doctrine:schema:update –force
An exception occurred while executing a query: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘ec_cube_001.dtb_plugin’ doesn’t exist
エラーの内容から、`ec_cube_001` データベース内に `dtb_plugin` テーブルが存在しないため、スキーマ更新が失敗していることがわかります。
この問題は、データベースの初期セットアップがまだ完全に行われていないか、手動でスキーマ作成が必要である可能性があります。以下の手順でデータベースのセットアップを行います。
### 1. データベースの初期化
EC-CUBE のデータベースには必要なテーブルを自動的に作成する機能があります。次のコマンドを実行して、データベースの初期化を行ってください。
$ php bin/console eccube:install
このコマンドは、データベースに必要な全てのテーブルを作成し、初期データを挿入します。これにより、`dtb_plugin` を含む必要なテーブルが作成されます。
### 2. インストール時の確認事項
\- 実行中に、データベースの設定や管理者ユーザーの設定を求められます。`.env` ファイルに設定しているデータベース接続情報をそのまま使用できます。
\- 初期インストールの設定が終わったら、データベースのスキーマが作成され、EC-CUBE が動作するはずです。
### 3. キャッシュのクリア(オプション)
インストール後にキャッシュをクリアしておくと、環境の不整合を防ぐことができます。
$ php bin/console cache:clear
この手順により、`dtb_plugin` テーブルなどが正しく作成され、スキーマエラーが解消されるはずです。

$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ php bin/console eccube:install
\EC-CUBE Installer Interactive Wizard
\====================================
(メモ省略)
表示されているメッセージは、EC-CUBE のインストーラーをインタラクティブモードで実行中であることを示しています。インストーラーは、インストール時に必要な情報を対話形式で質問し、回答を基に設定を行います。
### メッセージの意味:
1. **環境変数を使ったインストールの自動化**
\ – インタラクティブな入力を避けたい場合は、以下の環境変数を設定し、`–no-interaction` オプションを付けてインストールを自動化する方法を提案しています。
\ – 必要な環境変数には以下のようなものがあります:
\ – `APP_ENV`: アプリケーションの実行環境(通常は `prod`)
\ – `APP_DEBUG`: デバッグモードのオン/オフ(通常は `0`)
\ – `DATABASE_URL`: データベース接続情報
\ – `DATABASE_SERVER_VERSION`: データベースサーバーのバージョン
\ – `MAILER_DSN`: メール設定
\ – `ECCUBE_AUTH_MAGIC`: EC-CUBE の認証マジックキー(EC-CUBE のセキュリティ設定)
これらの環境変数を事前に定義することで、対話的なインストールを省略できます。例えば、次のように設定します:
\ export APP_ENV=prod
\ export APP_DEBUG=0
\ export DATABASE_URL=mysql://root:passwd@127.0.0.1:3306/ec_cube_001
\ export DATABASE_SERVER_VERSION=5.7
\ export MAILER_DSN=ore://null
\ export ECCUBE_AUTH_MAGIC=random-generated-key
\ php bin/console eccube:install –no-interaction
これにより、対話的なインストール手順を省略して、全て自動的に設定されます。
2. **`Trusted hosts` の設定**
\ – インストール中に「`Trusted hosts`」(信頼するホスト)の設定が求められています。これは、EC-CUBE のセキュリティ機能の一部で、指定されたホスト名のみが許可されます。例えば、サイトを `localhost` や特定のドメイン名で運用する場合、それをホワイトリストに追加する必要があります。
\ – 例としては、次のように入力します:
\ ^127\.0\.0\.1$,^localhost$
\ また、実際のドメイン名を設定する場合は以下のようにします:
\ ^www.example.com$,^localhost$
### 次のステップ:
\- 提示されたインタラクティブウィザードに従ってホスト名などを設定して進めるか、環境変数を設定して自動化インストールを行うことができます。
(設定漏れあるとマズいので、インタラクティブで行くことにした)

MAILER_DSNとは何か? Laravelでは、MAIL_MAILER=sendmailを設定していたがこれとは違うのか?
`MAILER_DSN` は、EC-CUBE や Symfony フレームワークで使われるメール設定の形式です。`DSN` は「Data Source Name」の略で、メールサーバーへの接続情報を一行で表現するものです。Laravel の `MAIL_MAILER` と同じく、どのメール送信方式を使うか指定するのに利用されますが、設定方法が異なります。
### `MAILER_DSN` の形式
`MAILER_DSN` は以下のような形式で設定されます。
scheme://user:password@host:port?option1=value1&option2=value2
例えば、`sendmail` を使う場合の設定は以下のようになります。
.env
MAILER_DSN=sendmail://default
`MAILER_DSN` の `scheme` 部分は、メール送信に使う方式(SMTP、sendmail、nullなど)を指定し、それに続くユーザー、パスワード、ホストなどの情報を組み合わせる形になります。
### Laravel との違い
\- Laravel の `MAIL_MAILER=sendmail` は、`sendmail` を使ってメールを送信することを意味しますが、EC-CUBE では `MAILER_DSN=sendmail://default` のような形式を使用します。
\- Laravel で `MAIL_MAILER=smtp` として SMTP 設定を使う場合、`MAIL_HOST`、`MAIL_PORT` などを別々に指定しますが、EC-CUBE ではこれらを一つの DSN 文字列でまとめます。
### 例: SMTP での設定
SMTP での設定は次のようになります(Gmail SMTP の場合の例):
.env
MAILER_DSN=smtp://username:password@smtp.gmail.com:587
これに対し、Laravel では以下のように設定します。
.env
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=username
MAIL_PASSWORD=password
つまり、`MAILER_DSN` は Laravel の複数のメール設定を一つの文字列にまとめたものと考えればよいです。

$ PATH=$PATH:/usr/local/laravel-composer/:~/.config/composer/vendor/bin/ php bin/console eccube:install
\EC-CUBE Installer Interactive Wizard
\====================================
(メモ省略)
\ !
\ ! [CAUTION] Execute the installation process. All data is initialized.
\ !
Is it OK? (yes/no) [yes]:
\ >
Run doctrine:database:create –if-not-exists…
Database `ec_cube_001` for connection named default already exists. Skipped.
Run doctrine:schema:drop –force…
Run doctrine:schema:create…
Run eccube:fixtures:load…
\ > Finished Successful!
Run cache:clear –no-warmup…
// Clearing the cache for the prod environment with debug false
[OK] Cache for the “prod” environment (debug=false) was successfully cleared.
[OK] EC-CUBE installation successful.

$ php -S localhost:8000 -t . index.php
で、http://localhost:8000 にアクセスしたが、CSSが効いてない。画像も表示されない。ここから先は
使い方か。EC-CUBEは65テーブルだった。ApacheにホストさせたらCSSも効いて全部見れた。

Apacheからのアクセスを許可しないと、管理パネルは使えない。
$ sudo chown -R apache /myproj/ec-cube/var
$ sudo -u apache php bin/console cache:clear
(ChatGPT無料版は管理パネルをあまり知らなかった。というかEC-CUBEにあまり詳しくない気がする)
permまだあった。
https://doc4.ec-cube.net/quickstart/permission
パーミッションの設定例
権限が必要なロールはサーバの仕様によって異なります。 例えば共有サーバ等の場合、ファイルを設置するFTPユーザとWebサーバの実行ユーザが異なる場合があります。 この場合、WebサーバはOtherでの権限でアクセスすることになりますので、EC-CUBEの機能を利用するためにはOtherに対して適切に書き込み権限を設定する必要があります。
(こりゃメンドクサイな、格安レンタルサーバはそうなるのか、せめてGroupにできんかな、sudo使えないからムリか。AWSのVPSは使えたが安くはないのだろう。とりあえずapache保有とするか、ファイル編集時にその都度chownか、sudo -u apache emacs &)
$ sudo chown apache /myproj/ec-cube
$ sudo chown -R apache /myproj/ec-cube/{app,app/Plugin,app/PluginData,app/proxy,app/template,html,vendor,composer.json,composer.lock}
と思ったが、やっぱり本番環境と同じにしよう。上を戻して以下を実行した。
$ chmod o+rw /myproj/ec-cube
$ chmod -R o+rw /myproj/ec-cube/{app,app/Plugin,app/PluginData,app/proxy,app/template,html,var,vendor,composer.json,composer.lock,storage}

本番環境での .env ファイル利用
https://doc4.ec-cube.net/quickstart/dotenv
インストール完了後、インストールディレクトリにデータベースの接続情報等が設定された .env ファイルが生成されます。 .env ファイルは、開発用途での環境変数を設定するためのものであり、本番環境での使用は推奨されません。 本番環境では、環境変数をサーバ設定ファイルに設定することを推奨します。 サーバ設定ファイルに環境変数を設定することにより、環境変数が外部に暴露される危険性が減り、安全に運用できます。(Apacheでの設定例はリンク先参照)

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です