bradjonesllc/docker-drupal

此包已被废弃,不再维护。未建议替代包。

Drupal 8项目模板,支持Composer和Docker

安装: 355

依赖者: 0

建议者: 0

安全: 0

星星: 41

关注者: 3

分支: 8

开放问题: 11

类型:项目

v2.2 2018-07-12 09:35 UTC

This package is not auto-updated.

Last update: 2020-09-04 20:41:14 UTC


README

虽然如此美好,但Composer和Docker已经走了很长的路,这个仓库是过去时代的遗迹。现在事情更简单了 - 使用 drupal/recommended-project 等。

Drupal 8的Docker脚手架

Docker Automated buil Packagist

目的

此仓库提供两个工件

  1. 一个Composer包,用于一次性的新Drupal 8项目的初始脚手架,之后将是自包含的。它使用从 drupal-project 衍生的 composer.json 文件来拉取Drupal核心,并提供额外的以Docker为重点的功能。然后可以使用 drupal-project 的 composer.json 文件和辅助脚本来管理核心更新、贡献模块等。Drupal 8凭借其强大的可导出配置文件管理和Composer集成,非常适合容器化开发。
  2. 一个针对与所包含的项目脚手架一起使用的定制Docker镜像。其行为主要受 config/docker/web/base 中的文件控制,但可以在特定项目的基础上通过复制适当的目标文件来覆盖它们。使用此镜像时请自行承担风险,理解在您的情况下可能无法保证向后兼容性。为了获得最安全的结果,请构建自己的基础镜像。

使用/快速入门

composer create-project  --stability dev --no-interaction --ignore-platform-reqs bradjonesllc/docker-drupal:^2 PROJECT-DIR

...将会安装到一个名为 PROJECT-DIR 的新目录中。

默认地址和命令示例

  • 首次启动;创建数据容器,安装Drupal:docker-compose up
  • Web: https://:8082
  • 安装后获取uid 1的登录凭证:docker-compose exec web drush uli(以下为快捷选项)

功能

您的新Drupal 8网站附带了一些辅助脚本和配置文件,它们可以在容器化环境中加快开发并简化生产部署。

  • 包含所有必需PHP扩展的 Dockerfile
  • 快速启动 Docker Compose 文件,它提供了一个Apache/PHP网页容器、mysql容器和数据卷。
  • 使用以下方式安装网站:
    • 可选地强制设置现有的网站UUID和导入配置文件(如果存在)。
    • 合理的默认 settings.phpsettings.local.phpdevelopment.services.yml 文件。
  • 脚本响应环境变量,默认值在docker-compose.yml文件中
    • 在开发模式下,启用Apache的Xdebug,并切换 settings.local.phpdevelopment.services.yml 的包含
  • 包装脚本
    • ddrush,在网页容器内执行 drush,带有一个启动全局 /etc/drush/drushrc.php 文件。
    • dbash,获取Web容器内的bash壳(作为www-data)的快捷方式
  • 用于与direnv配合使用的.envrc文件,它
    • 告诉包装脚本要针对哪个容器执行(通过模式)。
    • 将包装脚本和vendor/bin目录包含到PATH中。
  • 用于开发的Xdebug,以及所有对ddrush辅助脚本的调用
  • .dockerignore排除了VCS和上传的文件。Docker在构建时在容器内运行composer install,尽管如果你的开发环境包含许多这些文件,将它们复制到容器中可以节省一些构建时间。请参阅下面的开发工作流程
  • Web容器中的所有进程都记录到STDOUT;如果你希望聚合Docker容器日志或与外部日志服务集成,这很有用。
  • 默认的PhpStorm配置文件,包括服务器配置和Xdebug路径映射,以及将最大调试连接设置为10以与Drush的子请求兼容。
  • 默认通过crontab实现的cron,仅在非开发模式下运行。
  • 当设置了HTPASSWD_USERHTPASSWD_PASSWORD环境变量时,支持站点级别的HTTP基本身份验证,例如用于预发布站点。(或者挂载你自己的/etc/.htpasswd文件以使用。)

为什么附带Xdebug?它不会在生产中浪费资源吗?

当处于开发模式时,Xdebug不会加载/启动(见下文),所以尽管你分发了一个稍微大一点的容器,但这种设置避免了需要“仅开发”Dockerfile的需求。

开发工作流程

TL;DR:尽可能利用composer来管理你的项目。关于这一点,drupal-project的README非常有帮助(见上方)。

虽然提供了一个包装器来在容器内运行drush,但应避免使用如drush dl之类的命令。当使用默认的docker-compose.yml文件时,我们将主机上的整个文件结构注入到容器中,所以你的本地文件更改会实时反映出来。要求drush在sites/*/files目录之外进行文件系统更改(drush cache-rebuild应该没问题)可能会导致权限错误和其他奇怪的问题。

开发模式

通过设置环境变量ENVIRONMENT等于DEV来启用开发模式(默认开启)。

版本控制说明

在使用composer时,包括项目和其它依赖关系的正确方式是,将它们添加到composer.json中的要求,然后运行composer update

如上所述,这些依赖项的内容默认在.gitignore中被排除,所以你应该只对站点定制的代码进行版本控制。

ddrush辅助脚本

配合由direnv设置的环境变量/PATH(见上文),您可以在项目内部通过输入ddrush your-command来执行大多数Drush命令。在开始工作之前,您可能需要在您的shell中运行direnv allow。涉及引号的复杂命令不会原样传递;首先运行dbash,然后在容器内直接运行drush命令。

在Docker容器上使用Xdebug

在浏览器或HTTP请求中切换Xdebug,并在您的IDE中端口9000上启动相应的监听会话。提供的PhpStorm配置意味着您只需点击电话图标即可开始使用!

更新Drupal核心

drupal-project的安装后命令将确保您的Drupal核心“脚手架”文件与上游保持同步。请参阅drupal-project的README。

关于Drupal 8配置怎么办?

为了与导出的配置一起发货/版本化您站点的副本,将配置导出到磁盘 - ddrush config-export - 您的配置将被导出到config/drupal/sync。该目录设置为开发模式下Apache用户的可写,以方便导出。在生产环境中,使用drush或Web UI导入您的配置。

打补丁

查看composer-patches以获取简单解决方案。

开发模式下的配置管理

当Web容器以环境变量DRUPAL_INSTALL = TRUE启动时,引导脚本会尝试确定是否存在已安装的Drupal数据库。如果没有找到,脚本将尝试安装Drupal,设置站点UUID,并导入任何现有配置。因此,您可以在Web容器重建之间重复使用(或不再使用)开发数据库。

开发模式下的数据库管理

如上所述,引导脚本包含一些防止覆盖现有数据库的安全措施。如果您希望(重新)从头开始(或导入您的导出配置文件的新导入),请删除db数据库容器,然后是drupal_data容器。

SSL支持

SSL终止不再捆绑。本着Docker容器做好一项任务的宗旨,考虑使用结合免费Let's Encrypt证书的代理容器

生产部署

数据持久性

在开发模式关闭的情况下,Drupal 将会在 db 别名处期望找到一个已安装的数据库。同时,强烈建议您将主机目录挂载到容器中的 web-writeable.txt 所指定的位置,以保留用户和系统生成的文件。

要求

  • Docker
  • Docker Compose,用于本地运行容器。
  • 带有 bash shell 的 Linux 或类似虚拟化环境。如果您使用的是 Windows 或 Mac,也许 Docker Toolbox 能帮到您?
  • composer 的本地安装

强烈推荐

  • direnv,用于在 vendor/bin 中使用 ddrush drush 包装器和脚本,无需配置。

贡献

欢迎提出问题和拉取请求;Drupal 8 和 Docker 都是相对较新且快速发展的项目。似乎没有很多其他针对 Docker 和 Drupal 的全面入门套件,因此这是我努力帮助他人避免在这方面学习曲线陡峭的举措。

已知问题

查看问题队列中的确认错误

另请参阅

其他项目

还有一些 Drupal/Docker 项目,尽管大多数似乎专注于 Drupal 7。

组和资源

版权和许可

© 2016-2018, Brad Jones LLC。许可协议为 GPL 2。