phphaus / bedrock
为 phpHaus 定制的现代 WordPress 堆栈
Requires
- php: >=5.3.2
- composer/installers: v1.0.12
- fancyguy/webroot-installer: 1.1.0
- vlucas/phpdotenv: ~1.0.6
- wordpress/wordpress: 4.0
This package is not auto-updated.
Last update: 2024-09-24 07:42:29 UTC
README
Bedrock 是一个现代 WordPress 堆栈,帮助您使用最佳开发工具和项目结构开始。
目录
快速开始
使用 phphaus/vagrant-lamp 以获得专为 Bedrock 定制的开发虚拟机。
或者运行 composer create-project phphaus/bedrock <path> (有关更多详细信息,请参阅 安装/使用) 以在本地获取 Bedrock 的新副本。
功能
- 使用 Composer 进行依赖管理
- 更好的文件夹结构
- 使用针对特定环境的文件轻松配置 WordPress
- 使用 Dotenv 环境变量
- 使用 Vagrant 和 Ansible (GitHub 上的 bedrock-ansible) 轻松设置服务器环境
- mu-plugins 自动加载器(让您可以使用常规插件作为 mu-plugins)
Bedrock 的目的是作为一个基础,让您进行分叉和修改以适应您的需求。它对删除键友好,您可以删除或修改其任何部分。您还需要使用针对您的网站/公司的特定设置来定制 Bedrock。
Bedrock 背后的许多理念都受到了 Twelve-Factor App 方法论以及 WordPress 特定版本 的启发。
注意:虽然这是一个来自 Roots 主题模板 的项目的开发者,但 Bedrock 与 Roots 没有任何关联,并且可以与任何主题一起使用。
要求
- Git
- PHP >= 5.3.2 (用于 Composer)
如果您不打算使用某个部分,则也不需要其要求。
安装/使用
请参阅 文档 了解以下步骤的更多详细信息。
使用 create-project
Composer 的 create-project 命令将自动将 Bedrock 项目安装到目录并运行 composer install。
安装后的脚本将自动将 .env.example 复制到 .env 并提示您生成盐密钥并将其附加到您的 .env 文件。
注意:要无提示生成盐密钥,请使用 -n (非交互式) 运行 create-project。您还可以在您的分叉中更改 composer.json 下的 config 中的 generate-salts 设置。默认为 true。
要完全跳过脚本,请使用 --no-scripts 运行 create-project 以禁用它。
- 运行
composer create-project phphaus/bedrock <path>(path是安装到的文件夹)。使用composer create-project=1.3.x-dev phphaus/bedrock <path>安装特定版本。 - 编辑
.env并更新环境变量
DB_NAME- 数据库名称DB_USER- 数据库用户DB_PASSWORD- 数据库密码DB_HOST- 数据库主机(默认为localhost)WP_ENV- 设置环境(development、staging、production等)WP_HOME- WordPress 主页的完整 URL(http://example.com)WP_SITEURL- 包括子目录的 WordPress 的完整 URL(http://example.com/wp)
- 添加主题
- 将 Nginx 或 Apache vhost 设置为
/path/to/site/resources/public/ - 在
http://example.com/wp/wp-admin访问 WP 管理员
手动
- 克隆/分支仓库
- 运行
composer install - 将
.env.example复制到.env并更新环境变量
DB_NAME- 数据库名称DB_USER- 数据库用户DB_PASSWORD- 数据库密码DB_HOST- 数据库主机(默认为localhost)WP_ENV- 设置环境(development、staging、production等)WP_HOME- WordPress 主页的完整 URL(http://example.com)WP_SITEURL- 包括子目录的 WordPress 的完整 URL(http://example.com/wp)
- 添加主题
- 将 Nginx 或 Apache vhost 设置为
/path/to/site/resources/public/ - 在
http://example.com/wp/wp-admin访问 WP 管理员
文档
文件夹结构
├── composer.json
├── build
├── resources
│ ├── config
│ │ ├── application.php
│ │ ├── environments
│ │ │ ├── development.php
│ │ │ ├── staging.php
│ │ │ └── production.php
│ │ └── application.php
│ └── public
│ ├── app
│ │ ├── mu-plugins
│ │ ├── plugins
│ │ └── themes
│ ├── wp-config.php
│ ├── index.php
│ └── wp
├── src
├── test
└── vendor
Bedrock 的组织结构与将 WordPress 放在其自己的子目录中类似,但有一些改进。
- 为了避免在 webroot 中暴露敏感文件,Bedrock 将所需内容移动到
resources/public/目录,包括由 vendor 提供的wp/源和wp-content源。 wp-content(或可能只是content)被命名为app,以更好地反映其内容。它包含应用程序代码,而不仅仅是“静态内容”。它还与其他框架如 Symfony 和 Rails 匹配。wp-config.php仍然位于resources/public/中,因为它是 WP 所必需的,但它只起加载器的作用。实际的配置文件已移动到resources/config/以实现更好的分离。vendor/是 Composer 管理的依赖项安装的位置。wp/是 WordPress 核心的位置。它也由 Composer 管理,但由于 WP 限制,不能放在vendor下。
配置文件
根 resources/public/wp-config.php 是 WordPress 所必需的,并且仅用于加载其他主要配置。不应向其添加任何其他内容。
resources/config/application.php 是主要配置文件,其中包含 wp-config.php 通常包含的内容。基本选项应在其中设置。
对于特定环境的配置,请使用 resources/config/environments 下的文件。默认情况下有 development、staging 和 production,但这些可以是您需要的任何内容。
环境配置必须在主要 application 配置之前,因此环境配置中的任何内容都优先于 application。
注意:您不能在 PHP 中重新定义常量。所以如果您在 application.php 中有一个基本设置,并想在例如 production.php 中覆盖它,您有几个选项
- 删除基本选项,并确保在每个需要的环境中定义它
- 如果尚未定义,请只在
application.php中定义常量。
您不想这样做吗?
您将失去定义特定环境设置的能力。
- 将所有配置移动到
wp-config.php - 手动处理特定环境选项
- 删除
config目录
环境变量
Bedrock 尽可能地将配置与代码分离,并使用环境变量来实现这一点。好处是有一个单独的位置(.env)来保存数据库或其他第三方凭证等设置,而这些设置不会提交到您的仓库中。
PHP dotenv 用于加载 .env 文件。然后,所有变量都可以通过 getenv、$_SERVER 或 $_ENV 在您的应用程序中访问。
目前,以下 env 变量是必需的
DB_USERDB_NAMEDB_PASSWORDWP_HOMEWP_SITEURL
您不想这样做吗?
您将失去配置与代码之间的分离,并且可能将安全凭证置于风险之中。
- 从
composer.json中删除dotenv - 从根目录删除
.env.example文件 - 从
wp-config.php中删除require_once('vendor/autoload.php'); - 将所有
getenv调用替换为您想要设置这些值的方法
Composer
Composer 用于管理依赖项。Bedrock 将任何第三方库视为依赖项,包括 WordPress 本身和任何插件。
查看以下两个博客获取更全面的文档
屏幕录像($):使用 Composer 与 WordPress
插件
WordPress Packagist 已经在 composer.json 文件中注册,因此可以轻松要求任何来自 WordPress 插件目录 的插件。
要添加插件,请在 require 指令下添加它,或从命令行使用 composer require <namespace>/<packagename>。如果它来自 WordPress Packagist,则命名空间始终是 wpackagist-plugin。
示例:"wpackagist-plugin/akismet": "dev-trunk"
每次您添加新插件或更新 WP 版本时,请运行 composer update 以安装新包。
plugins 和 mu-plugins 默认情况下由 Git 忽略,因为 Composer 管理它们。如果您想向这些文件夹添加 不是 由 Composer 管理的东西,您需要更新 .gitignore 以将其列入白名单
!resources/public/app/plugins/plugin-name
注意:一些插件可能在其指定范围之外创建文件或文件夹,甚至修改 wp-config.php 和 app 目录中的其他文件。这些文件应添加到您的 .gitignore 文件中,因为它们由插件本身管理,这些插件通过 Composer 管理。需要修改 wp-config.php 的任何修改应移入 config/application.php。
更新 WP 和插件版本
更新您的 WordPress 版本(或任何插件)只需在 composer.json 文件中更改版本号即可。
然后运行 composer update 将拉取新版本。
主题
主题也可以由 Composer 管理,但仅在以下两种情况下才应这样做
- 您正在使用一个完全不会被修改的父主题
- 您想将主主题分离出来并用作独立包
在大多数情况下,我们建议不要进行 #2,而是将主主题保留为您的应用程序存储库的一部分。
与插件一样,WPackagist 维护了一个 WP 主题目录的 Composer 镜像。要要求一个主题,只需使用 wpackagist-theme 命名空间。
您不想这样做吗?
Composer 集成是 Bedrock 的最大部分,因此如果您打算从 Bedrock 中移除它,那么使用 Bedrock 就没有多少意义了。
数据库同步
Bedrock 默认没有提供任何用于数据库同步的功能。最佳选择是使用 WP-CLI。
wp-cron
Bedrock 通过 define('DISABLE_WP_CRON', true); 禁用了内部 WP Cron。如果您保留此设置,您需要在 crontab 文件中手动设置一个 cron 作业,如下所示
*/5 * * * * curl http://example.com/wp/wp-cron.php
WP-CLI
Bedrock 与 WP-CLI 的工作方式与任何其他 WordPress 项目一样。以前我们将在 composer.json 文件中将其作为依赖项要求 WP-CLI。这已被删除,因为 WP-CLI 现在建议使用 phar 文件全局安装它。这也导致了冲突,如果您尝试使用全局安装。
wp 命令将自动拾取 Bedrock 的子目录安装,只要您在项目目录(或更深处)中运行命令。Bedrock 包含一个 wp-cli.yml 文件,该文件将 path 选项设置为 resources/public/wp。使用此配置文件进行任何进一步的 配置。
Vagrant/Puppet
Bedrock 与 Vagrant 的集成现在可以在单独的 phphaus/vagrant-lamp 项目中找到。该项目中的 README 包含基本说明,但如果您想创建一个与特定的 Bedrock 基于的 WP 应用程序相关的 Vagrant 箱,请将示例 Vagrantfile 复制到您的应用程序存储库中,并编辑必要的文件路径。
mu-plugins 自动加载器
Bedrock 包含一个自动加载器,使得标准插件可以像必须使用的插件一样被要求加载。自动加载的插件将在所有 mu 插件和标准插件加载之后被包含。插件名称旁边的星号 (*) 表示该插件已自动加载。要移除此功能,只需删除 resources/public/app/mu-plugins/bedrock-autoloader.php。
这允许通过 Composer 使用 mu 插件,如果它们的包类型是 wordpress-muplugin。您还可以像以下示例那样覆盖插件类型
"installer-paths": { "resources/public/app/mu-plugins/{$name}/": ["type:wordpress-muplugin", "roots/soil"], "resources/public/app/plugins/{$name}/": ["type:wordpress-plugin"], "resources/public/app/themes/{$name}/": ["type:wordpress-theme"] },
Soil 是一个类型设置为 wordpress-plugin 的包。因为它实现了 composer/installers,我们可以覆盖其类型。
待办事项
- 基本数据库同步/复制解决方案
贡献
欢迎每个人帮助 贡献 并改进此项目。您可以通过几种方式来贡献
支持
使用 Roots Discourse 论坛提问并获得支持。