lakedrops/docker4drupal

Composer 插件,用于为 Docker 准备本地 Drupal 开发环境。

v3.10.34 2024-09-13 15:36 UTC

This package is auto-updated.

Last update: 2024-09-13 15:37:08 UTC


README

此 Composer 插件使用来自 Docker4Drupal 的框架,由 Wodby 提供,为 Docker 准备您的本地开发环境。

需求

此插件最好在 L3D 中使用,无需满足其他要求。

在您的 Drupal 项目中安装

这是一个 Composer 插件。它可以在基于 Composer 的 Drupal 安装中使用,也可以在未使用 Composer 的纯 Drupal 中使用。

如果您正在使用 D8 项目模板D9 项目模板 的最新版本,此 docker4drupal 插件将作为 Drupal 开发环境 的依赖项自动安装。

在其他所有情况下,只需键入以下内容即可安装

composer require lakedrops/docker4drupal

这将安装和配置所有必要的文件,以便您可以立即启动 Docker 环境,而无需任何其他设置。正在执行的操作

  • 在您的项目根目录中创建和配置 docker-compose.yml
  • 在您的设置目录中创建和配置 settings.docker.php
  • 修改您的 settings.php 以加载 settings.docker.php(如果存在)
  • 在当前目录的 drush 子目录中创建 Drush 设置、别名和 shell-别名
  • ~/.traefik 目录中配置并(重新)启动单个 Docker Traefik 服务,该目录充当任何数量并行运行的 Docker4Drupal 项目的代理。此服务由 LakeDrops Traefik Library 提供。
  • 将新文件添加到 .gitignore,因为这些文件通常不需要提交

在纯 Drupal 项目中安装

在开始之前,您应该在项目根目录中创建(或添加到现有).lakedrops.yml,如下所示

docker4drupal:
  webroot: relative/path/to/drupal/core

之后,您可以调用

composer require lakedrops/docker4drupal

然后一切都会为您配置好。

用法

所有命令都需要从您主要 Drupal 项目的根目录调用。

更新 Docker-Compose 配置

# With Ahoy
ahoy update

# Directly
composer lakedrops:docker4drupal

启动 Docker 容器

# With Ahoy
ahoy up

# Directly
docker-compose up -d

停止 Docker 容器

# With Ahoy
ahoy stop

# Directly
docker-compose stop

访问服务

以下服务在 Docker 容器运行时在浏览器中可用

请注意,Solr、Node 和 Varnish 默认未启用。有关如何启用它们的说明,请参阅下面的自定义章节。

PHP 调试

默认情况下,PHP 配置了 XDebug 功能已启用,您应该查看您 IDE 的说明来了解如何开始调试会话。

查看日志

每个服务(nginx、php、db 等)都提供自己的日志,并且访问它们非常容易。

docker-compose logs -f [SERVICENAME]

每个服务都有自己的名称

  • mailhog
  • mariadb
  • nginx
  • node
  • php
  • pma
  • redis
  • solr
  • varnish

配置对您网站的 SSH 访问

默认情况下,您不需要配置对网站的 SSH 访问。但是,如果您想从网站拉取数据库和/或文件,SSH 访问会非常有用,下一章关于 Drush 的内容将向您展示如何使用它。

对于配置访问,您需要做两件事

配置您的 Drush 别名

在您的服务器项目根目录下,您会找到一个名为 drush 的子目录,其中包含一个名为 aliases.drushrc.php 的文件,该文件包含一个 dev 和一个 live 别名。第一个别名是自动配置的,第二个别名默认为空。您需要手动提供详细信息

  • root:远程主机上 Drupal 根目录的完整路径
  • uri:网站的域名和可选的基本路径
  • remote-host:远程主机的有效主机名或 IP 地址 - 如果您不确定,请使用上面 uri 中的域名
  • remote-user:您可以通过 SSH 访问远程主机的用户名

可能还有更多选项,有关详细信息,请参阅 Drush 文档。

配置从 PHP 容器中的 SSH 访问

此功能仅在您的服务器上启用了 SSH 代理转发时才可用。如果您需要任何帮助,请参阅这个优秀的教程

您的服务器 SSH 配置自动通过套接字转发到 PHP Docker 容器中,您不需要做任何事情来使其工作,只要您的服务器正确配置了通过 SSH 访问您的网站 - 在这种情况下,PHP 容器也可以这样做。这是通过将您的 SSH_AUTH_SOCK 环境变量挂载并转发到 PHP 容器中的 /ssh-agent 来实现的,以便容器内的用户可以利用与容器外构建它们的用户相同的 SSH 设置。

可能在此情况下引起麻烦的典型问题包括

  • 权限:容器内的用户必须有权访问您的 SSH 认证套接字。确保这一点的最佳方式是在容器内以 root 用户运行服务。在开发环境中,这应该是没有问题的。
  • SSH 密钥应添加到套接字:通常,在设置环境的过程中已经添加了 SSH 密钥,但如果还没有,请记住从主机调用 ssh-add /path/to/your/key 来添加您的密钥。

使用 Drush

此插件配置了 Drush 的多个设置、别名和 shell-别名,使您的开发生活变得更加轻松。您可以选择进入 PHP 容器并执行 Drush,或者您可以从主机调用每个 Drush 命令。当您使用 L3D 框架时,只需在您的 L3D 容器中调用 drush 即可,其余的都在后台自动完成。

# Entering PHP Container
docker-compose exec php sh
# Call Drush command
drush site-aliases

# ...or, call that command from your host:
docker-compose exec php drush site-aliases

更好的是,您可以为您的主机 shell 创建 shell 别名(见下文),这将使其更加容易。

drush site-aliases

如果您已经配置了对网站的 SSH 访问(见上文),则可以轻松地将数据库和/或文件从您的网站拉取到您的开发环境中。

# Pull the database
drush pull-sql

# Pull the files
drush pull-files

# Pull both
drush pull-all

进一步阅读

有关 Docker 环境可以执行的其他操作的最好描述可以在 Docker4Drupal 文档 中找到。

自定义

为了覆盖Docker环境的默认设置,请将此数组中的相关部分添加到您项目根目录下的.lakedrops.yml文件中

docker4drupal:
  projectname: [NAME OF CURRENT DIRECTORY]
  ci_home: /home/gitlab-runner
  docker0:
    ip: [IP OF YOUR DOCKER HOST]
    proxy: [IP OF TRAEFIK PROXY]
  traefik:
    domain: docker.localhost
    usessl: 0
    port: 8000
    ports: 8443
    cert: fullchain.pem
    key: privkey.pem
  live:
    root: ''
    uri: ''
    host: ''
    user: ''
  drush:
    sql:
      tables:
        structure:
          - cache
          - cache_*
          - history
          - search_*
          - sessions
          - watchdog
        skip:
          - migration_*
  drupal:
    version: 9
  php:
    version: '7.4'
    xdebug: 1
  webserver:
    type: apache
  varnish:
    enable: 0
  redis:
    version: '6'
  dbbrowser:
    type: pma
  solr:
    enable: 0
    version: '4.8.0'
  node:
    enable: 0
    key: ''
    path: ''
  memcached:
    enable: 0
  rsyslog:
    enable: 0
  athenapdf:
    enable: 0
    key: ''
  blackfire:
    enable: 0
    id: ''
    token: ''
  webgrind:
    enable: 0
  wkhtmltox:
    enable: 0

更改这些值后,运行ahoy update(或composer lakedrops:docker4drupal),环境将重新配置。下次启动您的Docker环境时,将使用这些新值。

添加新的Docker服务或增强现有服务

您可以通过添加更多详细信息到.lakedrops.yml配置来创建额外的Docker服务或增强现有服务

docker4drupal:
  docker-compose.yml:
    services:
      php:
        environment:
          MY_VAR: value
      mariadbd6:
        image: wodby/mariadb:10.5
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: drupal
          MYSQL_USER: drupal
          MYSQL_PASSWORD: drupal
      mycustomservice:
        image: mydomain/myimage

这将向php容器添加另一个环境变量,定义一个名为mariadbd6的第二个mariadb容器,可能用于例如从单独的数据库迁移,以及一个具有您自己的镜像和配置的自定义服务。

请记住,更改这些设置后,请使用ahoy update更新docker compose,然后使用ahoy up重新创建您的容器。

更多配置调整

自定义Apache配置

docker4drupal:
  webserver:
    overwriteconfig: 1

使用此设置,当加载时,Apache容器将包含位于项目根目录相对于./apache/vhost.conf的文件。

将更多域名路由到您的Apache容器

docker4drupal:
  extradomains:
    - domain1.example.com
    - domain2.example.com

技巧与窍门

有关localhost子域的一些说明

localhost域名始终定义为解析为IP地址127.0.0.1,这正是我们需要与本地安装(如本例中)一起工作的。使用localhost的子域来告诉Docker和Traefik将请求路由到哪个容器,这使得此环境真正强大。因此,您可以使用http://project1.docker.localhost:8000进行开发网站,使用http://pma.project1.docker.localhost:8000进行该网站的PhpMyAdmin门户,该门户由不同容器中的不同服务提供。

关于此类子域是否合法存在一些争议,而Chrome/Google认为这是完全正常的,并符合定义此类内容的RFA。这意味着,所有这些在Chrome中都能正常工作。不幸的是,Firefox/Mozilla尚未实现此标准(尚不支持),因此在不修改本地hosts文件的情况下无法在该浏览器中使用。如果您想使用Firefox,请在主机上的/etc/hosts文件中添加一行127.0.0.1 project1.docker.localhost pma.project1.docker.localhost ...,其中包含您将要使用所有可能域名的空间限制列表。

并行运行多个网站

此插件配置Docker容器,以便可以并行启动任意数量的容器。由于每个容器都有各自的项目名称,这些名称将包含在域名中,因此您可以同时使用它们。为此,将创建并启动一个单独的Docker服务容器,该容器作为代理操作,将您的本地流量路由到始终正确的具有正确开发网站的Docker容器。

与wkhtmltox一起工作

当使用Drupal模块print时,请转到admin/config/user-interface/print/pdf/wkhtmltopdf并删除选项--footer-font-size 7 --footer-right '[page]',因为这些选项在未打补丁的QT版本中不起作用。

链接

有关更多详细信息,我们建议以下链接