在Kubernetes上将自定义模块与bitnami / magento容器一起使用

时间:2018-08-10 11:22:11

标签: docker magento kubernetes magento2 bitnami

我有一个自定义模块,我想将其安装在运行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

1 个答案:

答案 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容器。但是,只要模块版本相同,它也可以与现有数据库一起正常工作。