【问题标题】:Enable Drupal 8 theme on Dockerfile在 Dockerfile 上启用 Drupal 8 主题
【发布时间】:2021-06-09 23:15:43
【问题描述】:

我正在尝试 dockerize Drupal 8。我无法理解的一件事是为新容器提供自定义功能。例如,我在我的 dockerfile 中下载了 Bootstrap 主题,它显示在 Appearance > Uninstalled Themes 下。我可以从管理 UI 安装并将其设置为默认值。 但是,我不希望我的 docker 映像/容器用户处理这个问题,而是应该在他们运行容器时默认安装它。

有什么办法可以做到吗?

这是我的 Dockerfile:

FROM drupal:8.9.13
RUN cd /opt/drupal/ \
    && composer require drupal/bootstrap:^3.23 \
    && composer install \ 
    && chown www-data:www-data -R /opt/drupal/web/themes 

附:我是 Drupal 工作负载的新手。

【问题讨论】:

    标签: docker drupal drupal-8


    【解决方案1】:

    使用 composer 安装模块与在 Drupal 中安装模块非常不同。为了在 Drupal 中安装模块,您需要通过工作安装访问数据库。问题是 Dockerfile 中的任何内容都是构建过程的一部分——用于创建最终通过 CMD 运行的映像。现在,我不熟悉官方的 Drupal Docker 映像,但我确定它一定是一个简单的基于 PHP 的容器?关键是最后发生的事情是 PHP 实际运行,直到那时,MySQL 才运行。

    如何实现你的愿望很大程度上取决于你在 Docker 完成构建后如何安装 Drupal?理想情况下,您使用 ENTRYPOINT 脚本而不是手动执行此操作 - 如果是这样,那么在安装之后 - 使用 Drush 启用主题。理想情况下,您应该只制作自己的分发配置文件,这样就可以在站点安装时为用户启用主题(并允许您在一个地方进行所有自定义)。

    另一方面,如果您正在执行的部分操作是脚本化的 - 那么您可能只需要添加一个 Drush 别名,以便 Drush 能够在命令在 webroot 之外运行时找到您的安装;请参阅https://github.com/drush-ops/drush/blob/master/examples/example.site.yml,但您尚未说明如何安装 Drupal,因此我无法确定。

    【讨论】:

    • 这是我需要解决的另一个难题。目前,当我运行这个 docker 镜像时,它会通过我希望避免的 install.php 启动 drupal 安装向导。容器是短暂且无状态的,我希望我的 drupal 网站出现新的容器运行命令,而不是这个手动安装页面。如果可能的话,你能指出我正确的方向并提供样本吗?
    • 如果 drush 在容器内可用(尝试使其全局可用),那么我将使用带有某些变量的 drush si 命令。
    • 三种方式; 1. 大多数mysql容器允许你提供一个数据库转储,一旦实例运行就会自动导入。 2. 在 ENTRYPOINT 脚本中添加一个 drush si,或者 3. 哪个 TBH 是最可取的,因为其他两个需要时间(安装在完成之前不稳定)。只是制作一个 Drupal 分发配置文件,并允许您的用户自己选择它并在 UI 中安装 Drupal
    • 所以使用选项#3,如果容器重新启动或添加新容器(横向扩展),用户会再次看到安装屏幕,但这次将有一个自定义配置文件选项可供选择从?正确的?这是你推荐的吗?
    • 这取决于你?这真的取决于你的要求。 1 和 2 的“问题”是它们不是即时的,更糟糕​​的是......命令运行不可见,因此最终用户将不知道幕后发生了什么。您可能有一个“保留页面”,您的 ENTRYPOINT 会关闭它......但是好吧......这也有点垃圾......所以是的,当你制作 Drupal 分发配置文件时 - 它出现在可安装配置文件的列表中,并且然后用户可以选择它,例如drupal.org/files/issues/installation-profile-demo.png
    【解决方案2】:

    您可以在 docker 文件中通过 composer 添加 drush:composer require --dev drush/drush 并使用其供应商目录 ./vendor/bin/drush command 调用 drush bin。现在设置默认主题使用以下命令:./vendor/bin/drush config-set system.theme default bootstrap

    可以做的可选操作还有./vendor/bin/drush en bootstrap./vendor/bin/drush cr - 如果主题默认主题第一次不显示,则清除缓存。你必须检查它是否需要。

    致谢:12

    【讨论】:

    • 我按照建议进行了尝试,即更新了我的 dockerfile 以通过 composer 安装 drush 并通过 drush 启用主题,但出现此错误:"Command config:set 未找到。 Drush 无法查询数据库。因此,许多命令不可用。使用 --debug 重新运行命令以查看相关日志消息。"。 Dockerfile 中抱怨的行是:RUN vendor/bin/drush config:set system.theme default bootstrap
    • config-set not config:set ?
    • 我尝试了这两个选项,但同样的错误。语法参考this
    • Sam 检查 drush 版本。也许这个命令适用于旧版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多