netresearch / akeneo-bootstrap
在运行前设置 Bootstrap Akeneo
Requires
- symfony/console: ^2.7
Replaces
This package is auto-updated.
Last update: 2024-08-27 08:49:30 UTC
README
这是
- Composer 包 netresearch/akeneo-bootstrap,用于引导 Akeneo 项目并从其他包中配置它们,而不是通过它们自己的配置文件(更好的可更新性)。
- 提供已构建好的 Akeneo PIM 项目的 Docker 镜像 netresearch/akeneo-app,使用 MongoDB 运行,并利用 akeneo-bootstrap 优化,以便最佳更新。
内容
Composer 包
安装 Akeneo 的常见方法是创建一个由 akeneo/pim-community-standard 生成的 composer 项目,这有主要缺点
- Akeneo 仍然 未将其核心包发布到 Packagist,因此需要将其作为 composer 仓库提供。由于相应的 github 仓库有成千上万的分支和标签,因此首先使用它进行 composer 非常慢,其次会使 composer 达到 github API 限制,这在任何你不希望暴露你的 github API 密钥的环境中都很难处理。此外,只要未在根 composer.json 中添加 github 仓库,其他包就没有办法要求 akeneo/pim-community-dev。
composer create-project
自然创建项目一次 - 如果你想要更新到原始项目的较新版本,就没有简单的方法使用 composer 来实现这一点。相反,你将不得不按照升级说明更新复制的源代码,这对我们来说至少不是我们想要的。- 如果你需要更改 Akeneo 配置、路由或添加捆绑包,你必须接触由
composer create-project
生成的代码,这使得更新更加困难。
你也可以下载一个现成的 Akeneo 项目 - 但是更新问题仍然存在。
此包提供了一种绕过上述问题的机制
- 它提供了一个简单的 shell 脚本 akeneo-project,用于创建或升级 Akeneo 项目。
- 它提供了一个命令行应用程序 akeneo-bootstrap,该应用程序根据已安装包中的指令生成配置,并将 Akeneo 设置为运行。
它替换了 incenteev/parameter-handler,该程序注册为 composers post-install-cmd 和 post-update-cmd,因此当安装包时自动调用以生成 AppKernel、配置和路由(akeneo-bootstrap 命令的步骤 1-4)。
akeneo-project
使用 akeneo-project
脚本创建或升级 Akeneo 项目。它还将在项目中安装 netresearch/akeneo-bootstrap(这将自动调用 akeneo-bootstrap 命令的步骤 1-4)。
安装
脚本可以独立运行,但由于它仍然需要PHP和composer,您最好使用composer来安装它
composer global require netresearch/akeneo-bootstrap akeneo-project -h
创建项目
akeneo-project create -v 1.7.6
升级/降级项目
akeneo-project upgrade -v 1.7.6
akeneo-bootstrap
命令akeneo-bootstrap
包含在composer包netresearch/akeneo-bootstrap
中,该包也由akeneo-project安装。它执行以下步骤
- 生成AppKernel(覆盖,而不是替换原始Akeneo AppKernel),包含由安装的任何包所需的组件
- 调用由安装的任何包所需的资源,生成(本地)配置和路由文件
- 从环境变量生成parameters.yml
- 修正PIM、ORO和Symfony的要求(调整路径)
- 如果需要,清除缓存
- 启动内核
- 等待数据库启动
- 确保Akeneo安装(检查要求,安装/升级数据库,导出资源)
- 设置导出/导入路径
- 如果需要,链接静态目录(Akeneo有时不使用配置的目录,而是使用固定路径,如
app/logs
- 此步骤将这些目录符号链接到配置的目录,如LOG_DIR) - 将需要从网络可写的目录的所有权更改为
WEB_USER
环境变量
akeneo-bootstrap使用以下环境变量来配置Akeneo
由于该包主要针对Docker容器中的安装,因此选择了通过环境变量进行配置。如果您不使用此类,并且不想将上述变量添加到环境变量中,可以将它们放入一个.env文件中,然后像这样运行akeneo-bootstrap和composer命令
eval $(cat .env) composer update
从其他包中自定义 Akeneo
akeneo-bootstrap将扫描所有安装的包,寻找其composer.json中的设置,允许您注册Bundles、配置、路由和自定义引导步骤以自定义Akeneo
{ "name": "acme/akeneo-config", "version": "1.0.0", "require": { "akeneo-labs/custom-entity-bundle": "1.10.*" }, "extra": { "netresearch/akeneo-bootstrap": { "generate": [ "Acme\\AkeneoConfig\\Bootstrap\\Generate" ], "boot": [ "Acme\\AkeneoConfig\\Bootstrap\\Boot" ], "bundles": [ { "class": "Pim\\Bundle\\CustomEntityBundle\\PimCustomEntityBundle" } ], "routing": { "pim_customentity": { "resource": "@PimCustomEntityBundle/Resources/config/routing.yml", "prefix": "/reference-data" } } } } }
安装或更新此包akeneo-bootstrap后,将自动更新内核和本地配置以及路由文件,以添加配置的资源。
请注意,只有当包实际更新或安装时,对此composer.json文件所做的更改才会生效 - 如果您只更改了vendor包中的内容,则不会发生任何操作。
添加捆绑包
在您的composer.json中,将Bundles注册为数组中的对象,在extra.netresearch/akeneo-bootstrap.bundles
中。其中每个都必须有包含包类的class
属性,并可以有一个包含环境名称数组或逗号分隔字符串的env
属性
{ "name": "acme/akeneo-config", "version": "1.0.0", "extra": { "netresearch/akeneo-bootstrap": { "bundles": [ { "class": "Acme\\Bundle\\AllEnvsBundle" }, { "class": "Acme\\Bundle\\ProdOnlyBundle", "env": "prod" }, { "class": "Acme\\Bundle\\DevAndTestOnlyBundle", "env": ["dev", "test"] } ] } } }
注意,将扫描所有包。这允许您在项目中只要求一个包,该包需要其他包含此类配置的包。
添加配置
将配置文件注册为数组中的对象,在您的composer.json中的extra.netresearch/akeneo-bootstrap.config
。其中每个都必须有包含文件路径的resource
属性,并可以有一个包含环境名称数组或逗号分隔字符串的env
属性
{ "name": "acme/akeneo-config", "version": "1.0.0", "extra": { "netresearch/akeneo-bootstrap": { "config": [ { "resource": "../../vendor/acme/akeneo-config/Resources/config/general.yml" }, { "resource": "../../vendor/acme/akeneo-config/Resources/config/prod.yml", "env": "prod" }, { "resource": "../../vendor/acme/akeneo-config/Resources/config/dev.yml", "env": ["dev", "test"] } ] } } }
添加路由
将路由文件注册为对象中的对象,在您的composer.json中的extra.netresearch/akeneo-bootstrap.routing
。其中每个都必须有包含文件路径的resource
属性,并可以有一个包含环境名称数组或逗号分隔字符串的env
属性。键是它们在routing_local.yml中注册的键
{ "name": "acme/akeneo-config", "version": "1.0.0", "extra": { "netresearch/akeneo-bootstrap": { "routing": { "all_envs": { "resource": "@AllEnvsBundle/Resources/config/routing.yml" }, "prod": { "resource": "../../vendor/acme/akeneo-config/Resources/config/routing_prod.yml", "env": "prod" }, "test": { "resource": "../../vendor/acme/akeneo-config/Resources/config/routing_dev.yml", "env": ["dev", "test"] } } } } }
添加自定义引导
引导程序有两个作用域:生成(Akeneo/DB 不一定已初始化;在 composer update/install
和 ./bin/akeneo-bootstrap
之后调用)和 引导(Akeneo/DB 准备运行,仅在 generate
之后从 ./bin/akeneo-bootstrap
调用)。可以在 composer.json 中的 extra.netresearch/akeneo-bootstrap.{SCOPE}
中为每个作用域注册自定义引导类,以类名数组的形式。这些类都必须实现 \Netresearch\AkeneoBootstrap\Bootstrap\BootstrapInterface
接口。
{ "name": "acme/akeneo-config", "version": "1.0.0", "extra": { "netresearch/akeneo-bootstrap": { "generate": [ "Acme\\AkeneoConfig\\Bootstrap\\Generate" ], "boot": [ "Acme\\AkeneoConfig\\Bootstrap\\Boot" ] } } }
例如,引导程序可能如下所示
<?php namespace Acme\AkeneoConfig\Bootstrap; use \Netresearch\AkeneoBootstrap\Bootstrap\BootstrapAbstract; class Generate extends BootstrapAbstract { public function getMessage() { return 'Forcing cache to be cleared' . ' (cache dir: ' . $this->getKernel()->getCacheDir() . ')'; } public function run() { $this->isCacheClearRequired(true); } }
请查看现有引导程序以获取更多示例。
Docker 镜像
Docker 镜像 netresearch/akeneo-app 是一个 Alpine 镜像,包含一个在 /var/www/html
中的 Akeneo 项目设置,以及 akeneo-project
脚本本身位于 /opt/akeneo-bootstrap/bin/akeneo-project
。
当与此镜像一起使用 netresearch/akeneo-php:apache 或 netresearch/akeneo-php,并将 akeneo-php-entrypoint
设置为入口点时,引导程序将在容器启动时自动调用。
运行
此镜像仅包含源文件。要使用它运行 Akeneo,需要 PHP、MySQL/MariaDB 数据库,以及可选的 Apache 和 MongoDB。
Akeneo 有多个 PHP 平台依赖项,因此我们建议使用我们的 Akeneo 专用 PHP Docker 镜像(有 PHP 仅有的和 PHP+Apache 版本)。
最好使用 docker-compose 运行它。有关示例,请参阅此处。
为了 使用 Akeneo 开发,您还可以使用此 docker-compose.override.yml 以及以下 Dockerfile 等类似文件。
环境变量
与 akeneo-bootstrap 相同。
自定义 Akeneo
此镜像提供了一个已构建好的 Akeneo 项目(已执行 composer install
),不打算通过修改其配置和内核进行定制 - 它更倾向于使用 netresearch/akeneo-bootstrap 来由其他包进行 定制。
要安装自己的包,您应该使用自定义 Dockerfile 扩展此镜像 - 我们建议使用以下 多阶段构建文件 以保持结果镜像小巧。
FROM netresearch:akeneo-app as sources FROM netresearch:akeneo-php as builder COPY --from=sources /var/www/html /var/www/html WORKDIR /var/www/html # You can use private packages by adding them into # /src/packages/{vendor}/{packagename} # THOSE PACKAGES NEED TO HAVE A version TO BE SET IN THEIR composer.json # see above for further information COPY ./packages/acme/akeneo-config /src/packages/acme/akeneo-config RUN composer require acme/akeneo-config FROM alpine COPY --from=builder /src/packages /src/packages COPY --from=builder /var/www/html /var/www/html # If you will mount a local directory to /var/www/html # which is what you'll likely do during development # it is a good idea to also copy akeneo-project # (see docker-compose.override.yml for how to invoke) COPY --from=sources /usr/local/bin/akeneo-project /opt/akeneo-bootstrap/bin/akeneo-project
GitHub
如果您有任何问题、疑问、功能请求或只想给予星标,请访问GitHub 仓库。