bradjonesllc / docker-drupal
Drupal 8项目模板,支持Composer和Docker
Requires
- composer/installers: ^1.2
- cweagans/composer-patches: ^1.6
- drupal-composer/drupal-scaffold: ^2.2
- drupal/console: ~1.0
- drupal/console-yaml: ^0.1.3
- drupal/core: ^8.5.3
- drush/drush: ^9.0
- hirak/prestissimo: ^0.3
- webmozart/path-util: ^2.3
Requires (Dev)
- webflo/drupal-core-require-dev: ^8.5.3
Conflicts
This package is not auto-updated.
Last update: 2020-09-04 20:41:14 UTC
README
虽然如此美好,但Composer和Docker已经走了很长的路,这个仓库是过去时代的遗迹。现在事情更简单了 - 使用 drupal/recommended-project
等。
Drupal 8的Docker脚手架
目的
此仓库提供两个工件
- 一个Composer包,用于一次性的新Drupal 8项目的初始脚手架,之后将是自包含的。它使用从 drupal-project 衍生的
composer.json
文件来拉取Drupal核心,并提供额外的以Docker为重点的功能。然后可以使用 drupal-project 的composer.json
文件和辅助脚本来管理核心更新、贡献模块等。Drupal 8凭借其强大的可导出配置文件管理和Composer集成,非常适合容器化开发。 - 一个针对与所包含的项目脚手架一起使用的定制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.php
、settings.local.php
和development.services.yml
文件。
- 脚本响应环境变量,默认值在docker-compose.yml文件中
- 在开发模式下,启用Apache的Xdebug,并切换
settings.local.php
和development.services.yml
的包含
- 在开发模式下,启用Apache的Xdebug,并切换
- 包装脚本
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_USER
和HTPASSWD_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。