使用 Lando 进行本地 WordPress 开发(或 Docker 变得简单)

已发表: 2019-11-22

今年早些时候,我写了一篇关于如何使用 Docker 在 WordPress 中进行开发的指南。 我真的很喜欢在那篇文章上工作,看起来你也喜欢它(感谢你的所有评论和电子邮件)。 如果您没有阅读这篇文章,这里有一个快速提醒:

Docker 是一个程序,它允许您将软件打包到容器中并在虚拟机上运行它们。 Docker 的主要优势在于其容器使用宿主操作系统提供的虚拟化环境运行,从而产生快速、轻量级的容器

Docker 的主要问题其配置繁琐。 例如,要创建一个 WordPress 开发环境,我们需要启动两个(至少)服务:一个数据库服务和一个 webapp 服务器。

在开头评论的帖子中,我们看到了一个工具Docker Compose ,它允许定义我们必须为给定项目启动的所有服务。 使用Docker Compose ,我们设法在一个文件docker-compose.yml中定义了我们项目的所有依赖项,并通过一个命令启动它。

或者这就是我最初承诺的,因为我通过解释如何配置另一个 Docker 服务来结束这篇文章,这将允许您在 WordPress 安装中使用漂亮的域名。 如果您还记得,使用原始docker-compose.yml文件,我们的 WordPress 开发环境可以通过http://localhost:8080访问。 但是如果我们想使用http://myplugin.local类的东西,我们必须设置一个可以解析域名的代理,并向我们docker-compose.yml添加更多设置……

我知道,我知道——启动和运行起来非常复杂! 但是,一旦您正确设置了所有内容,就很容易了,对吗? 不管怎样,我决定向你介绍我的新朋友:兰多。 他将帮助您在几秒钟内建立新的开发环境。

进入兰多

我认为向 Lando 介绍自己的最佳方式是使用他文档中的一句话:

Lando 适用于希望避免直接使用docker或 docker- docker-compose的内置受虐狂的开发人员。

兰多的文档

是的,显然使用dockerdocker-compose是为受虐狂们准备的……所以让我们看看如何快速且不复杂地指定在新 WordPress 项目上工作所需的所有服务。

安装兰多

为了能够使用 Lando,您应该做的第一件事是(惊喜,惊喜!)将它安装到您的计算机上。 安装过程非常简单,并且有很好的文档记录,但我们可以将其总结为以下步骤:

  1. Lando 需要 Docker。 如果您在 Linux 上,请先安装 Docker 社区版。 如果您使用的是 Mac 或 Windows,Lando 的安装程序本身将安装 Docker(如果它尚不可用)。
  2. 为您的操作系统下载适当的 Lando 安装程序。 例如,就我而言,我下载了文件lando-v3.0.0-rc.22.deb (我在 Linux 上)并使用dpkg安装它。 对于 Mac,使用.dmg文件,对于 Windows,使用.exe
  3. 运行安装程序并按照步骤操作。

就是这样!

如何在 Lando 中创建一个新的 WordPress 项目

我们要做的第一件事是转到我们要使用的项目文件夹(或为其创建一个新文件夹)。 在我的例子中,我将创建一个新的 WordPress 开发环境来开发我们的 Nelio A/B 测试插件,所以我将cd到我下载项目的文件夹: ~/dev/plugins/nelio-ab-testing

在那里,我们必须创建 Lando 的配置文件。 该文件类似于docker-compose.yml ,但要简单得多。 对于初学者,您甚至不需要编写它——Lando 可以为您完成! 只需使用lando init即可创建新的开发环境:

 lando init \ --recipe wordpress --source remote --remote-url https://wordpress.org/latest.tar.gz --webroot wordpress --name "Nelio AB Testing" # name the project as you want

让我们看看前面的指令做了什么:

  • 首先,我们告诉 Lando 我们要使用lando init在当前目录中创建一个新的配置文件。
  • 第一个参数 ( --recipe wordpress ) 告诉 Lando 我们要创建一个 WordPress 项目。 这将帮助 Lando 了解它必须设置的服务(数据库、Web 服务器等)。
  • 然后我们表示我们希望 Lando 从 WordPress.org 下载 WordPress。
  • 使用--webroot wordpress ,我们可以告诉 Lando WordPress 的安装位置。 由于我们刚刚指定 WordPress 必须从 WordPress.org 下载,并且下载的 zip Lando 将在解压缩后创建一个wordpress文件夹,这就是我们用于 Lando 的位置。
  • 最后,我们指定项目的名称(Lando 将使用它来生成友好的 URL 域)。

运行前面的命令后,您将看到 Lando 如何安装所有内容并使用以下信息欢迎您:

 NOW WE'RE COOKING WITH FIRE!!! Your app has been initialized! Go to the directory where your app was initialized and run `lando start` to get rolling. Check the LOCATION printed below if you are unsure where to go. Oh... and here are some vitals: NAME my-site LOCATION /tmp/plugin RECIPE wordpress DOCS https://docs.devwithlando.io/tutorials/wordpress.html

列出当前文件夹中的所有文件,您会看到 Lando 创建了一个名为.lando.yml的隐藏文件,其内容如下:

 name: my-site recipe: wordpress config: webroot: wordpress

非常简单,对吧? 现在使用lando start启动你的服务,你就可以开始了:

 BOOMSHAKALAKA!!! Your app has started up correctly. Here are some vitals: NAME my-site LOCATION /tmp/plugin SERVICES appserver, database APPSERVER URLS https://localhost:32781 http://localhost:32782 http://nelio-ab-testing.lndo.site https://nelio-ab-testing.lndo.site

恭喜! 您现在有一个新的 WordPress 安装并运行。 如果我们现在转到开始时列出的 URL 之一,您会发现您只需要按照以下步骤完成 WordPress 的安装:

在国家/地区安装 WordPress
在兰多安装 WordPress。

快速完成 WordPress 安装

显然,您可以使用上一屏的安装程序完成 WordPress 的安装。 但是还有一个更好的解决方案:使用 WP-CLI,我们在 Lando 中也提供了它。

要使用 WP-CLI 安装 WordPress,我们首先需要在wordpress目录中创建一个wp-config.php 。 要创建该文件,我们需要一些关于数据库的信息:它在哪里、它的用户名和密码等。所有这些信息都可以通过lando info找到,它返回以下 JSON:

 [ { service: 'appserver', urls: [ 'https://localhost:32781', 'http://localhost:32782', 'http://nelio-ab-testing.lndo.site', 'https://nelio-ab-testing.lndo.site' ], //... }, { service: 'database', //... creds: { database: 'wordpress', password: 'wordpress', user: 'wordpress', }, //... } ]

由于结果是一个 JSON 字符串,我们可以使用 Unix 的jq工具来检索我们感兴趣的特定值。例如,如果我们想知道我们数据库的用户,只需运行以下命令:

 $ lando info --service database --format json | jq -r ".[0].creds.user" wordpress

现在,让我们利用这个命令并检索我们使用 WP-CLI 构建配置文件所需的所有相关数据:

 # Find WordPress' directory (webroot entry in .lando.yml) WEBROOT=`grep webroot .lando.yml | cut -d: -f2 | xargs` # Retrieve database credentials using lando info DBNAME=`lando info --service database --format json | jq -r ".[0].creds.database"` DBUSER=`lando info --service database --format json | jq -r ".[0].creds.user"` DBPASS=`lando info --service database --format json | jq -r ".[0].creds.password"` DBHOST=`lando info --service database --format json | jq -r ".[0].hostnames[0]"` # Create WordPress' config file lando wp config create \ --dbname=$DBNAME \ --dbuser=$DBUSER \ --dbpass=$DBPASS \ --dbhost=$DBHOST \ --path=$WEBROOT

创建文件后,我们可以启动安装命令:

 # Get WordPress' project name from .lando.yml PROJECT_NAME=`grep name .lando.yml | cut -d: -f2 | xargs` SITE_NAME=`echo "$PROJECT_NAME" | sed -e "s/-/ /g" | sed "s/\b[az]/\u&/g"` # Get one of the possible WordPress' URLs ando created (https) URL=`lando info --service appserver --format json | jq -r ".[0].urls" | grep -vw localhost | grep https: | cut -d'"' -f2` # Extract the domain from the previous URL (removing https) DOMAIN=`echo "$URL" | sed -e "s/^https:\/\///"` # Install WordPress lando wp core install --url=$URL --title="$SITE_NAME" --admin_user=admin --admin_password=password --admin_email=admin@$DOMAIN --path=$WEBROOT

完毕! 我们已经安装并运行了 WordPress。

如何将我们的项目放入 WordPress

如果我们现在登录 WordPress 并查看可用的插件,我们会发现我们的插件(在我的示例中为 Nelio A/B 测试)不存在。 那是因为 Nelio A/B 测试不在wordpress/wp-content/plugins/中。 为了解决这个问题,我们只需要在这个目录中创建一个指向我们项目根目录的软链接:

 cd wordpress/wp-content/plugins/ ln -s ../../../ nelio-ab-testing cd -

就是这样!

现在由您决定更适合您需求的方法。 如果您想为每个项目创建一个 WordPress 安装,只需按照我描述的步骤操作即可。 另一方面,如果您想要一个包含所有主题和插件的 WordPress 安装,那么只需创建一个新文件夹,在那里初始化 Lando,然后将所有插件添加到wordpress/wp-content/plugins/中。

我希望你和我一样喜欢这篇文章和工具。 我希望它能让你的工作更轻松、更有趣。 自从使用 Lando 后,我完全离开了 Docker。

Victoire Joncheray 在 Unsplash 上的特色图片。