如何使用Bedrock和Trellis进行WordPress开发?

如何使用Bedrock和Trellis进行WordPress开发?

文章目录

  • Bedrock和Trellis
  • Bedrock与常规WordPress
  • 为Kinsta配置Trellis
  • 暂存配置
  • 生产环境配置
  • 修改部署任务
  • 可选:安装Composer依赖项
  • 将kinsta-mu-plugins添加到Bedrock
  • 最后步骤

如何使用Bedrock和Trellis进行WordPress开发?

这篇文章是写给所有 WordPress 开发者的!

今天我们将讲解如何在 Kinsta 上使用和集成 Bedrock 和 Trellis

如果您之前没有听说过这两个工具,我们也会进行介绍,并希望能够帮助您理解为什么您应该选择它们而不是传统的设置。

Bedrock和Trellis

Bedrock 和 Trellis 的存在都是为了简化 WordPress 网站的开发、维护和部署。

  • Bedrock 提供了一种管理 WordPress 安装的替代方法,它拥有改进的文件夹结构、现代化的开发工具和更高的安全性。
  • Trellis 与 Bedrock 配合使用,可以使用 Vagrant 创建开发环境,并实现一键部署。

使用 Bedrock 的主要原因是为 WordPress 项目提供适当的依赖项和包管理。您可能已经熟悉 JavaScript 的 npm 或 Ruby 的 Bundler。PHP 也不例外,它的对应工具是 Composer

虽然使用包管理器很常见,但对于 WordPress 本身来说却不太常见,因为 WordPress 已经有了自己的插件概念。Bedrock 集成了 Composer 来管理插件、主题,甚至 WordPress 核心本身的依赖项。

Trellis 是一款可以轻松创建开发和生产服务器来托管 WordPress 网站的工具。它也专门用于与基于 Bedrock 的网站配合使用。 Trellis 的默认用例是使用 Vagrant 进行开发,并在生产环境中使用,以便在这两个环境之间保持平衡。

这篇文章解释了一个略有不同的用例:Trellis 用于开发服务器,Kinsta 用于生产(和/或预发布)服务器。

为什么选择 Kinsta 等专业的 WordPress 托管服务器而不是 Trellis 配置的 VPS?因为有时您想付费请人管理服务器,而不是自己动手(尤其是在您有很多客户的情况下)。专业的 WordPress 托管服务器还可以更轻松地进行扩展,而无需处理多服务器、负载均衡器和云上传。

Bedrock与常规WordPress

您可能想知道为什么要使用 Bedrock 而不是传统的 WordPress 安装。原因是 Bedrock 专为现代 Web 开发者打造:

  • 特定于环境的配置文件,存储在公共 Web 根目录之外
  • 环境变量将配置与代码分离在单个 .env 文件中
  • 通过限制对非 Web 文件的访问以及使用 bcrypt 哈希密码来增强安全性
  • 名为 app 的自定义 wp-content 目录
  • 用于管理 WordPress、插件、主题和其他 PHP 依赖项的 Composer
  • 排除 WordPress 核心、插件和上传文件的 .gitignore

Raspberry PiSnopesJetBlue 等公司都选择使用 Bedrock 来支持他们的 WordPress 网站。

让我们并排查看一下这两个文件夹结构:

Bedrock vs WordPress

Bedrock vs WordPress

Bedrock 将 WordPress 安装到子目录中提升到了一个新的高度。Bedrock 背后的许多理念都受到 Twelve-Factor 应用方法论(包括 WordPress 特定版本)的启发。

为Kinsta配置Trellis

首先,请确保您的 SSH 公钥已添加到 MyKinsta 信息中心。

只需进行少量更新,Trellis 即可部署到 Kinsta。由于 Kinsta 从 Web 服务器的角度提供了所有内容,因此无需配置您的预发布环境和生产环境。

Trellis 中的一键部署功能只需少量配置即可与 Kinsta 兼容。配置完成后,您可以通过在 Trellis 中运行部署手册来部署您的 WordPress 网站:

ansible-playbook deploy.yml -e env=staging -e site=example.com --limit=kinsta_staging

打开您的 MyKinsta 信息中心并导航到您使用 Bedrock 和 Trellis 设置的 WordPress 网站,同时打开代码编辑器并导航到项目中的 trellis 目录。

首先编辑 trellis/ansible.cfg,将以下内容添加到顶部的 [defaults] 中:

forks = 3
host_key_checking = False

暂存配置

确保 trellis/group_vars/staging/wordpress_sites.yml 已为您的暂存网站配置正确的 canonical

wordpress_sites:
example.com:
site_hosts:
- canonical: staging-example.kinsta.com

然后打开 trellis/group_vars/staging/main.yml 并将以下内容添加到文件末尾:

project_root: /www/example_123/public
www_root: /www/example_123/public
web_user: example
web_group: www-data

project_rootwww_root 路径替换为 MyKinsta 仪表板中为您的 Kinsta 暂存环境提供的正确路径。

公共根目录

在 MyKinsta 中找到您的公共根目录。

接下来,运行 ansible-vault edit group_vars/staging/vault.yml 命令,打开 trellis/group_vars/staging/vault.yml 文件进行编辑。

我们需要将 db_userdb_namedb_password 添加到 env 文件中。您可以在 MyKinsta 信息中心中您网站的主信息屏幕上找到这些值。

SFTP 和数据库凭据

MyKinsta 中的 SFTP 和数据库凭据。

vault_wordpress_sites:
example.com:
env:
db_user: "example"
db_name: "example"
db_password: "xxxxxxxxxxxxxxx"
# Generate your keys here: https://roots.io/salts.html
auth_key: ""
secure_auth_key: ""
logged_in_key: ""
nonce_key: ""
auth_salt: ""
secure_auth_salt: ""
logged_in_salt: ""
nonce_salt: ""

最后,打开 trellis/hosts/staging 并将内容替换为:

kinsta_staging ansible_host=104.154.94.123 ansible_ssh_port=12345 ansible_ssh_extra_args='-o StrictHostKeyChecking=no'
[web]
kinsta_staging
[staging]
kinsta_staging

确保主机和 SSH 端口与 MyKinsta 仪表板中列出的相匹配。

SFTP 主机和端口详细信息

您的暂存环境的 SFTP 主机和端口详细信息。

注:在某些情况下,尤其是在使用非标准 WordPress 设置(例如 Bedrock)的情况下,Kinsta 可能无法自动检测您的数据库凭据。这可能会导致在执行克隆环境、恢复备份或更新数据库密码等操作时出现问题。

为避免这种情况,您需要在 Bedrock 网站的配置文件 ( bedrock/config/application.php ) 中手动定义特定的 PHP 常量。此步骤对于确保 Kinsta 能够正确管理您网站的数据库凭据至关重要。

定义必要常量的方法如下:

define('DB_NAME', defined('SERVER_SECRET_DB_NAME') ? SERVER_SECRET_DB_NAME : 'your_db_name');
define('DB_USER', defined('SERVER_SECRET_DB_USER') ? SERVER_SECRET_DB_USER : 'your_db_user');
define('DB_PASSWORD', defined('SERVER_SECRET_DB_PASSWORD') ? SERVER_SECRET_DB_PASSWORD : 'your_db_password');
define('DB_HOST', defined('SERVER_SECRET_DB_HOST') ? SERVER_SECRET_DB_HOST : 'localhost');

通过将这些行添加到您的配置文件中,您可以确保 MyKinsta 可以正确管理您的数据库凭据,这对于维持顺利和无错误的部署过程至关重要。

 

生产环境配置

现在,让我们在生产环境中重复上述步骤。请确保在 MyKinsta 仪表板中切换到“实时”环境。

实时环境

切换到 MyKinsta 中的实时环境。

打开 trellis/group_vars/production/main.yml 并将以下内容添加到文件末尾:

project_root: /www/example_123/public
www_root: /www/example_123/public
web_user: example
web_group: www-data

请务必将 project_rootwww_root 路径替换为 MyKinsta 仪表板中为您的实时环境提供的正确路径。

接下来,运行 ansible-vault edit group_vars/production/vault.yml 打开 trellis/group_vars/production/vault.yml 进行编辑:

vault_wordpress_sites:
example.com:
env:
db_user: "example"
db_name: "example"
db_password: "xxxxxxxxxxxxxxx"
# Generate your keys here: https://roots.io/salts.html
auth_key: ""
secure_auth_key: ""
logged_in_key: ""
nonce_key: ""
auth_salt: ""
secure_auth_salt: ""
logged_in_salt: ""
nonce_salt: ""

最后,打开 trellis/hosts/production 并将内容替换为:

kinsta_production ansible_host=104.154.94.123 ansible_ssh_port=12345 ansible_ssh_extra_args='-o StrictHostKeyChecking=no'
[web]
kinsta_production
[production]
kinsta_production

修改部署任务

Trellis 部署会尝试重新加载 php-fpm,我们需要将其从 Kinsta 服务器上的尝试运行中移除。我们还需要在部署时触发清除 Kinsta 缓存的事件。

打开 trellis/roles/deploy/hooks/finalize-after.yml 并滚动到文件底部。删除最后一个 Reload php-fpm 任务,并添加以下内容:

- name: Clear Kinsta cache
uri:
url: "{{ site_env.wp_home }}/ask-support-rep/"
method: GET

向 Kinsta 支持代表询问清除您网站上的缓存的 URL 后,替换上面的 ask-support-rep

可选:安装Composer依赖项

如果您看到提示您运行“Composer Install”的屏幕,请在上面“Clear Kinsta cache”代码之前添加以下内容:

- name: Install Composer dependencies
composer:
command: install
working_dir: >/www/example123/public/final-path

/final-path 可能会根据您的 Bedrock/Trellis 设置而有所不同。

将kinsta-mu-plugins添加到Bedrock

Bedrock 网站已自动安装 mu-plugins,但您需要通过引入 kinsta-mu-plugins 包来安装 Kinsta MU 插件。此插件(在您通过 MyKinsta 创建 WordPress 网站时默认安装)负责处理诸如全页面缓存和 Kinsta CDN 集成等任务。

打开 site/composer.json 并在 repositories 数组中添加以下内容:

{
"type": "package",
"package": {
"name": "kinsta/kinsta-mu-plugins",
"type": "wordpress-muplugin",
"version": "2.3.3",
"dist": {
"url": "https://kinsta.com/kinsta-tools/kinsta-mu-plugins.zip",
"type": "zip"
}
}
}

然后从您的 Bedrock/site 目录运行以下命令(或在 composer.json 文件中指定 kinsta/kinsta-mu 插件作为要求):

composer require kinsta/kinsta-mu-plugins:2.3.3

可能需要以下常量来修复 CDN 路径和共享插件资源 URL 的问题。将以下代码添加到您网站的配置文件(Bedrock 网站中的 bedrock/config/application.php):

/**
* Kinsta CDN fix for Bedrock
*/
define('KINSTA_CDN_USERDIRS', 'app');
/**
* Fix Kinsta MU Plugins URL path with Bedrock
*/
$mu_plugins_url = Config::get('WP_CONTENT_URL') . '/mu-plugins';
define('KINSTAMU_CUSTOM_MUPLUGIN_URL', "{$mu_plugins_url}/kinsta-mu-plugins");

如需了解更多信息,包括如何更新插件,请查看 Kinsta MU 插件指南

最后步骤

最后一步是告知 Kinsta 将文档根目录设置为何。登录 MyKinsta,请求支持团队将您的文档根目录更新为 public/current/web

注:您现在可以使用 Kinsta API 自行设置,而无需联系支持人员。以下是一个简单的示例:

curl -X POST \
'https://api.kinsta.com/v2/sites/environments/{env_id}/change-webroot-subfolder' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"web_root_subfolder": "current/web",
"clear_all_cache": true,
"refresh_plugins_and_themes": true
}'

确保将 current/web 替换为您用作文档根目录的实际子文件夹路径。该文件夹必须已存在且包含 index.php 文件。

如果您之前尚未获取清除缓存的 URL,也请咨询您的支持代表,并确保 trellis/roles/deploy/hooks/finalize-after.yml 已更新为正确的 URL,以便在成功部署后清除 Kinsta 的缓存。

完成此更改后,您只需一行代码即可部署到暂存环境和生产环境:

# Deploy staging
ansible-playbook deploy.yml -e env=staging -e site=example.com --limit=kinsta_staging
# Deploy production
ansible-playbook deploy.yml -e env=production -e site=example.com --limit=kinsta_production

更好的是…设置一个持续集成服务,例如 CircleCI,当您提交到 stagingmaster 时自动为您运行部署!

评论留言

闪电侠

(工作日 10:00 - 18:30 为您服务)

2025-12-05 10:32:50

您好,无论是售前、售后、意见建议……均可通过联系工单与我们取得联系。

您也可选择聊天工具与我们即时沟通或点击查看:

您的工单我们已经收到,我们将会尽快跟您联系!
取消
选择聊天工具: