我有一个自定义模块,我想将其安装在运行Kubernetes集群中的 bitnami / magento docker镜像的容器上。
我目前正在尝试将模块从本地目录安装到容器 Dockerfile :
# run bitnami's magento container
FROM bitnami/magento:2.2.5-debian-9
# add magento_code directory to the bitnami magento install
# ./magento_data/code contains the module, i.e. Foo/Bar
ADD ./magento_data/code /opt/bitnami/magento/htdocs/app/code
构建并运行此映像后,该站点ping回500错误。 pod日志显示Magento正确安装,但不知道如何处理自定义模块:
异常#0(UnexpectedValueException):未指定模块'Foo_Bar'的安装版本
因此,为了使工作正常,我必须打开容器的外壳并运行一些命令:
$ php /opt/bitnami/magento/htdocs/bin/magento setup:upgrade
$ chown -R bitnami:daemon /opt/bitnami/magento/htdocs
第一种方法解决了magento设置问题,第二种方法确保了下次Magento中的http请求能够正确生成所需的任何目录和文件。
这给了我一个正常运行的容器,但是,kubernetes无法重建该容器,因为在安装Magento之后我要手动运行一堆命令。
我考虑过在容器 readinessProbe 中运行上述命令,但是不确定在首次调用Magento时,它是否在100%的状态下无法正常工作,而且看起来也很笨拙。 / p>
任何有关如何最好地在bitnami / magento容器中设置自定义模块的建议都将受到赞赏。
更新:
自从打开此问题以来,我一直在Github上进行进一步讨论:https://github.com/bitnami/bitnami-docker-magento/issues/82
答案 0 :(得分:1)
我已经通过使用composer使其工作了,而不是手动将模块添加到app / code目录中。
我能够做到这一点,首先是将模块添加到Packagist,然后将Magento Marketplace身份验证详细信息存储在auth.json中:
{
"http-basic": {
"repo.magento.com": {
"username": <MAGENTO_MARKETPLACE_PUBLIC_KEY>,
"password": <MAGENTO_MARKETPLACE_PRIVATE_KEY>
}
}
}
您可以通过在市场中创建新的访问密钥来获取公共和私有密钥值。将文件放在 composer.json 旁边的模块根目录中。
一旦我更新了Dockerfile以使用auth.json并需要自定义模块:
# run bitnami's magento container
FROM bitnami/magento:2.2.5
# Require custom modules
WORKDIR /opt/bitnami/magento/htdocs/
ADD ./auth.json .
RUN composer require foo/bar
然后我完成了新安装,并在magento容器旁边创建了db容器。但是,只要模块版本相同,它也可以与现有数据库一起正常工作。