如何使用Docker和DDEV在本地机器上开发Drupal9网站
作为 Write for DOnations 计划的一部分,作者选择了 Diversity in Tech Fund 来接受捐赠。
介绍
DDEV 是一个开源工具,它使用 Docker 为许多不同的 PHP 框架构建本地开发环境。 借助容器化的力量,DDEV 可以极大地简化您处理使用多个技术堆栈和多个云服务器的多个项目的方式。 DDEV 包括 WordPress、Laravel、Magento、TYPO3、Drupal 等模板。
Drupal 9 于 2020 年 6 月 3 日发布,用于 Drupal CMS。 Drupal 以其易用性和庞大的模块和主题库而闻名,是一种流行的 PHP 框架,用于构建和维护各种规模的网站和应用程序。
在本教程中,您将开始使用 DDEV 在本地计算机上开发 Drupal 9 网站。 这将允许您首先构建您的网站,然后,当您准备好时,将您的项目部署到生产服务器。
先决条件
要完成本教程,您需要:
- 一台运行 Linux 或 macOS 的本地计算机
- 对于 macOS: Homebrew 包管理器,您将使用它来安装 DDEV。 要在本地机器上安装 Homebrew,请按照本 Ruby 教程 中的 步骤 3 — 安装和设置 Homebrew。
- Docker 和 Docker Compose 安装在本地计算机上。
- 对于Linux:您可以按照以下两个教程安装Docker和Docker Compose:如何安装和使用Docker和如何安装Docker Compose。 从列表中选择您的 Linux 发行版并按照包含的说明进行操作。
- 对于 macOS:Docker Compose 以前作为 Docker Toolbox 的一部分提供,但 Docker Toolbox 现在是旧版解决方案 。 今天Docker官方推荐大家安装Docker Desktop,包括Docker Compose、Docker Engine等。 按照 Docker 官方指南在 macOS 上安装 Docker Desktop。 更多信息你可以阅读官方的Docker Desktop入门指南。 如果你之前使用 Docker Toolbox 安装过各种 Docker 工具,你可以阅读这篇官方文章,了解 Docker Toolbox 和 Docker Desktop 的区别以及它们如何共存。
注意: 可以在远程服务器上使用 DDEV 开发 Drupal 9,但是您需要一个解决方案才能在 Web 浏览器中访问 localhost
。 DDEV 命令 ddev share 与 ngrok 一起使用,它会为您和其他利益相关者创建进入您的服务器的安全隧道,以查看您的开发站点。 对于个人使用,您还可以在远程服务器上安装 GUI,并通过该界面内的 Web 浏览器访问您的开发站点。 为此,您可以按照我们关于 如何在 Ubuntu 20.04 上安装和配置 VNC 的指南进行操作。 要获得更快的 GUI 解决方案,您可以按照 我们的指南,了解如何在 Ubuntu 20.04 上使用 X2Go 设置远程桌面。
第 1 步 — 安装 DDEV
在此步骤中,您将在本地计算机上安装 DDEV。 选项 1 包括 macOS 的说明,而选项 2 提供 Linux 的说明。 本教程在 DDEV 版本 1.15.0 上进行了测试。
选项 1 — 在 macOS 上安装 DDEV
DDEV 建议 macOS 用户使用 Homebrew 包管理器 安装他们的工具。 使用以下 brew
命令安装最新的稳定版本:
brew tap drud/ddev && brew install drud/ddev/ddev
如果您更喜欢绝对最新的版本,您可以使用 brew
安装 ddev-edge
:
brew tap drud/ddev-edge && brew install drud/ddev-edge/ddev
如果您已经安装了一个 DDEV 版本,或者如果您希望更新您的版本,请关闭 DDEV 并使用 brew
更新您的安装:
ddev poweroff brew upgrade ddev
安装或更新 DDEV 后,运行 ddev version
以验证您的软件:
ddev version
你会看到这样的输出:
OutputDDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os darwin router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0
DDEV 包括一个强大的 CLI 或命令行界面。 运行ddev
了解一些常用命令:
ddev
您将看到以下输出:
OutputCreate and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support Usage: ddev [command] Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses 'docker stop' to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project's database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add --remove-data. version print ddev version and component versions Flags: -h, --help help for ddev -j, --json-output If true, user-oriented output will be in JSON format. -v, --version version for ddev Use "ddev [command] --help" for more information about a command.
有关使用 DDEV CLI 的更多信息,请访问官方 DDEV 文档。
在本地机器上安装 DDEV 后,您现在可以安装 Drupal 9 并开始开发网站了。
选项 2 — 在 Linux 上安装 DDEV
在 Linux 操作系统上,您可以使用 Homebrew for Linux 或使用官方安装脚本安装 DDEV。 在 Ubuntu 上,首先更新 apt
包管理器中的包列表(您可以在 Debian 中使用 apt
,否则使用与您的 Linux 发行版相关的等效包管理器):
sudo apt update
现在从 Ubuntu 的官方存储库安装一些必备软件包:
sudo apt install build-essential apt-transport-https ca-certificates software-properties-common curl
这些包将允许您从其官方 GitHub 存储库下载 DDEV 安装脚本。
现在下载脚本:
curl -O https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh
在运行脚本之前,在 nano
或您喜欢的文本编辑器中打开它并检查其内容:
nano install_ddev.sh
查看脚本内容并感到满意后,保存并关闭文件。 现在您已准备好运行安装脚本。
使用 chmod
命令使脚本可执行:
chmod +x install_ddev.sh
现在运行脚本:
./install_ddev.sh
安装过程可能会提示您确认某些设置或输入您的 sudo
密码。 安装完成后,您将在 Linux 操作系统上使用 DDEV。
运行 ddev version
来验证您的软件:
ddev version
你会看到这样的输出:
OutputDDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os linux router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0
DDEV 是一个强大的 CLI 或命令行界面。 运行 ddev
无需其他任何东西,以了解一些常用命令:
ddev
您将看到以下输出:
OutputCreate and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support Usage: ddev [command] Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses 'docker stop' to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project's database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add --remove-data. version print ddev version and component versions Flags: -h, --help help for ddev -j, --json-output If true, user-oriented output will be in JSON format. -v, --version version for ddev Use "ddev [command] --help" for more information about a command.
有关使用 DDEV CLI 的更多信息,您可以访问官方 DDEV 文档。
在本地计算机上安装 DDEV 后,您现在可以部署 Drupal 9 并开始开发网站了。
第 2 步 — 使用 DDEV 部署新的 Drupal 9 站点
随着 DDEV 的运行,您现在将使用它来创建一个 Drupal 特定的文件系统,安装 Drupal 9,然后启动一个标准的网站项目。
首先,您将创建一个项目根目录,然后在其中移动。 您将从该位置运行所有剩余的命令。 本教程将使用 d9test
,但您可以随意将目录命名为其他名称。 但是请注意,DDEV 不能很好地处理带连字符的名称。 最好避免使用 my-project
或 drupal-site-1
等目录名称。
创建您的项目根目录并在其中导航:
mkdir d9test cd d9test
DDEV 擅长创建与特定 CMS 平台匹配的目录树。 使用 ddev config
命令创建特定于 Drupal 9 的目录结构:
ddev config --project-type=drupal9 --docroot=web --create-docroot
你会看到这样的输出:
OutputCreating a new ddev project config in the current directory (/Users/sammy/d9test) Once completed, your configuration will be written to /Users/sammy/d9test/.ddev/config.yaml Created docroot at /Users/sammy/d9test/web You have specified a project type of drupal9 but no project of that type is found in /Users/sammy/d9test/web Ensuring write permissions for d9new No settings.php file exists, creating one Existing settings.php file includes settings.ddev.php Configuration complete. You may now run 'ddev start'.
因为您将 --project-type=drupal9
传递给 ddev config
命令,DDEV 创建了几个代表 Drupal 网站默认组织的子目录和文件。 您的项目目录树现在将如下所示:
Drupal 9 目录树
. ├── .ddev │ ├── .gitignore │ ├── config.yaml │ ├── db-build │ │ └── Dockerfile.example │ └── web-build │ └── Dockerfile.example └── web └── sites └── default ├── .gitignore ├── settings.ddev.php └── settings.php 6 directories, 7 files
.ddev/
将是 ddev 配置的主文件夹。 web/
将是您新项目的文档根; 它将包含几个特定的 settings.
文件。 您现在有了新 Drupal 项目的初始脚手架。
下一步是初始化平台,这将构建必要的容器和网络配置。 DDEV 绑定到端口 80
和 443
,因此如果您在机器上运行像 Apache 这样的 Web 服务器,或者其他任何使用这些端口的服务器,请在继续之前停止这些服务。
使用 ddev start
命令初始化您的平台:
ddev start
这将为您的项目构建所有基于 Docker 的容器,其中包括一个 Web 容器、一个数据库容器和 phpmyadmin。 初始化完成后,您将看到如下输出(您的端口号可能不同):
... [secondary_label Output] Successfully started d9test Project can be reached at http://d9test.ddev.site http://127.0.0.1:32773
注意: 请记住,这里 DDEV 正在幕后启动 Docker 容器。 如果您想查看这些容器或验证它们是否正在运行,您可以随时使用 docker ps
命令:
docker ps
除了您当前正在运行的任何其他容器外,您还会发现四个新容器,每个容器运行不同的映像:php-myadmin
、ddev-webserver
、ddev-router
和 [X171X ]。
ddev start
已成功构建您的容器,并为您提供了带有两个 URL 的输出。 虽然此输出表明您的项目“可以通过 http://d9test.ddev.site
和 http://127.0.0.1:32773
访问”,但现在访问这些 URL 会引发错误。 从 Drupal 8 开始,Drupal 核心和 contrib 模块的功能类似于依赖项。 因此,您首先需要使用 PHP 项目的包管理器 Composer 完成 Drupal 的安装,然后才能在 Web 浏览器中加载任何内容。
DDEV 最有用和最优雅的功能之一是您可以通过 DDEV CLI 将 Composer 命令传递到您的容器化环境中。 这意味着您可以将机器的特定配置与开发环境分开。 您不再需要管理通常伴随本地 PHP 开发的各种文件路径、依赖项和版本问题。 此外,您可以毫不费力地使用不同的框架和技术堆栈在多个项目之间快速进行上下文切换。
使用 ddev composer
命令下载 drupal/recommended-project
。 这将下载 Drupal 核心、它的库和其他相关资源,然后创建一个默认项目:
ddev composer create "drupal/recommended-project"
现在下载一个名为 Drush 或 Drupal Shell 的最终组件。 本教程将只使用一个 drush
命令,本教程提供了一种替代方法,但是 drush
是一个强大的 Drupal 开发 CLI,可以提高您的效率。
使用ddev composer
安装drush
:
ddev composer require "drush/drush"
您现在已经构建了一个默认的 Drupal 9 项目并安装了 drush
。 现在您将在浏览器中查看您的项目并配置您网站的设置。
第三步——配置你的 Drupal 9 项目
现在您已经安装了 Drupal 9,您可以在浏览器中访问您的新项目。 为此,您可以重新运行 ddev start
并复制它输出的两个 URL 之一,或者您可以使用以下命令,这将在新的浏览器窗口中自动启动您的站点:
ddev launch
您将遇到标准的 Drupal 安装向导。
在这里,您有两个选择。 您可以使用此 UI 并按照向导完成安装,也可以返回终端并通过 ddev
传递 drush
命令。 后一个选项将自动执行安装过程并将 admin
设置为您的用户名和密码。
选项 1 — 使用向导
返回浏览器中的向导。 在选择语言下,从下拉菜单中选择一种语言,然后单击保存并继续。 现在选择一个安装配置文件。 您可以在 Standard、Minimal 和 Demo 之间进行选择。 做出选择,然后单击保存并继续。 Drupal 将自动验证您的要求、设置数据库并安装您的站点。 最后一步是自定义一些配置。 添加以您的域结尾的站点名称和站点电子邮件地址。 然后选择用户名和密码。 选择一个强密码并将您的凭据保存在安全的地方。 最后,添加您定期检查的私人电子邮件地址,填写区域设置,然后按保存并继续。
您的新网站将加载欢迎消息。
选项 2 — 使用命令行
在项目的根目录中,运行 ddev exec
命令以使用 drush
安装默认 Drupal 站点:
ddev exec drush site:install --account-name=admin --account-pass=admin
这将像向导一样创建您的站点,但具有一些样板配置。 您的用户名和密码将是 admin
。
现在启动该站点以在您的浏览器中查看它:
ddev launch
您现在已准备好开始构建您的网站,但最好的做法是检查您对 /sites/web/default
目录的权限是否正确。 当您在本地工作时,这不是一个大问题,但如果您将这些权限转移到生产服务器,它们将带来安全风险。
第 4 步 - 检查您的权限
在向导安装期间,或首次加载欢迎页面时,您可能会看到有关 /sites/web/default
目录和该目录中的一个文件的权限设置的警告:settings.php
。
安装脚本运行后,Drupal 将尝试为所有组 设置web/sites/default 目录的读取和执行权限:这是一个555
权限设置。 它还将尝试将 default/settings.php
的权限设置为 read-only
或 444
。 如果遇到此警告,请从项目的根目录运行这两个 chmod
命令。 不这样做会带来安全风险:
chmod 555 web/sites/default chmod 444 web/sites/default/settings.php
要验证您是否拥有正确的权限,请使用 a
、l
、h
和 d
开关运行此 ls
命令:
ls -alhd web/sites/default web/sites/default/settings.php
检查您的权限是否与以下输出匹配:
Outputdr-xr-xr-x 8 sammy staff 256 Jul 21 12:56 web/sites/default -r--r--r-- 1 sammy staff 249 Jul 21 12:12 web/sites/default/settings.php
您现在已准备好在本地机器上开发 Drupal 9 网站。
第 5 步 — 在 Drupal 中创建您的第一篇文章
为了测试 Drupal 的一些功能,您现在将使用 Web UI 创建一个帖子。
在您网站的初始页面中,单击上方菜单左侧边缘的 Content 按钮。 现在单击蓝色的 添加内容 按钮。 将出现一个新页面。 点击文章,会出现另一个页面。
添加您喜欢的任何标题和内容。 您也可以添加图像,例如 DigitalOcean 的壁纸之一。 准备好后,单击蓝色的 保存 按钮。
您的第一篇文章将出现在您的网站上。
您现在正在本地机器上开发 Drupal 9 网站,而无需与服务器交互,这要归功于 Docker 和 DDEV。 在接下来的步骤中,您将管理 DDEV 容器以适应您的工作流程。
第 6 步 — 管理 DDEV 容器
当您完成项目开发或想要休息时,您可以停止 DDEV 容器,而不必担心数据丢失。 DDEV 可以管理多个项目之间的快速上下文切换; 这是它最有用的功能之一。 您的代码和数据始终保留在您的项目目录中,即使在您停止或删除 DDEV 容器之后也是如此。
要释放资源,您可以随时停止 DDEV。 在项目的根目录中,运行以下命令:
ddev stop
DDEV 全局可用,因此您可以在任何地方运行 ddev
命令,只要您指定 DDEV 项目:
ddev stop d9test
您还可以使用 ddev list
一次查看所有项目:
ddev list
您可以随时重新启动 DDEV 并继续在本地开发。
结论
在本教程中,您使用 Docker 和容器化的强大功能在 DDEV 的帮助下在本地开发了一个 Drupal 站点。 DDEV 还与众多 IDE 完美集成,并为 Atom、PHPStorm 和 Visual Studio Code (vscode) 提供内置 PHP 调试。 从这里,您还可以了解更多关于 使用 DDEV 为 Drupal 创建开发环境或 开发其他 PHP 框架,如 Wordpress 。