
这篇文章是写给所有 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 Pi、Snopes、JetBlue 等公司都选择使用 Bedrock 来支持他们的 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_root 和 www_root 路径替换为 MyKinsta 仪表板中为您的 Kinsta 暂存环境提供的正确路径。

在 MyKinsta 中找到您的公共根目录。
接下来,运行 ansible-vault edit group_vars/staging/vault.yml 命令,打开 trellis/group_vars/staging/vault.yml 文件进行编辑。
我们需要将 db_user、 db_name 和 db_password 添加到 env 文件中。您可以在 MyKinsta 信息中心中您网站的主信息屏幕上找到这些值。

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 主机和端口详细信息。
注:在某些情况下,尤其是在使用非标准 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_root 和 www_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,当您提交到 staging 或 master 时自动为您运行部署!



评论留言