phphaus/bedrock

为 phpHaus 定制的现代 WordPress 堆栈

安装: 2

依赖关系: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

Forks: 1,162

类型:项目

1.2.7 2014-09-04 17:20 UTC

README

Bedrock 是一个现代 WordPress 堆栈,帮助您使用最佳开发工具和项目结构开始。

目录

快速开始

使用 phphaus/vagrant-lamp 以获得专为 Bedrock 定制的开发虚拟机。

或者运行 composer create-project phphaus/bedrock <path> (有关更多详细信息,请参阅 安装/使用) 以在本地获取 Bedrock 的新副本。

功能

  • 使用 Composer 进行依赖管理
  • 更好的文件夹结构
  • 使用针对特定环境的文件轻松配置 WordPress
  • 使用 Dotenv 环境变量
  • 使用 VagrantAnsible (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 以禁用它。

  1. 运行 composer create-project phphaus/bedrock <path> (path 是安装到的文件夹)。使用 composer create-project=1.3.x-dev phphaus/bedrock <path> 安装特定版本。
  2. 编辑 .env 并更新环境变量
  • DB_NAME - 数据库名称
  • DB_USER - 数据库用户
  • DB_PASSWORD - 数据库密码
  • DB_HOST - 数据库主机(默认为 localhost
  • WP_ENV - 设置环境(developmentstagingproduction 等)
  • WP_HOME - WordPress 主页的完整 URL(http://example.com
  • WP_SITEURL - 包括子目录的 WordPress 的完整 URL(http://example.com/wp
  1. 添加主题
  2. 将 Nginx 或 Apache vhost 设置为 /path/to/site/resources/public/
  3. http://example.com/wp/wp-admin 访问 WP 管理员

手动

  1. 克隆/分支仓库
  2. 运行 composer install
  3. .env.example 复制到 .env 并更新环境变量
  • DB_NAME - 数据库名称
  • DB_USER - 数据库用户
  • DB_PASSWORD - 数据库密码
  • DB_HOST - 数据库主机(默认为 localhost
  • WP_ENV - 设置环境(developmentstagingproduction 等)
  • WP_HOME - WordPress 主页的完整 URL(http://example.com
  • WP_SITEURL - 包括子目录的 WordPress 的完整 URL(http://example.com/wp
  1. 添加主题
  2. 将 Nginx 或 Apache vhost 设置为 /path/to/site/resources/public/
  3. 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 下的文件。默认情况下有 developmentstagingproduction,但这些可以是您需要的任何内容。

环境配置必须在主要 application 配置之前,因此环境配置中的任何内容都优先于 application

注意:您不能在 PHP 中重新定义常量。所以如果您在 application.php 中有一个基本设置,并想在例如 production.php 中覆盖它,您有几个选项

  • 删除基本选项,并确保在每个需要的环境中定义它
  • 如果尚未定义,请只在 application.php 中定义常量。

您不想这样做吗?

您将失去定义特定环境设置的能力。

  • 将所有配置移动到 wp-config.php
  • 手动处理特定环境选项
  • 删除 config 目录

环境变量

Bedrock 尽可能地将配置与代码分离,并使用环境变量来实现这一点。好处是有一个单独的位置(.env)来保存数据库或其他第三方凭证等设置,而这些设置不会提交到您的仓库中。

PHP dotenv 用于加载 .env 文件。然后,所有变量都可以通过 getenv$_SERVER$_ENV 在您的应用程序中访问。

目前,以下 env 变量是必需的

  • DB_USER
  • DB_NAME
  • DB_PASSWORD
  • WP_HOME
  • WP_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 以安装新包。

pluginsmu-plugins 默认情况下由 Git 忽略,因为 Composer 管理它们。如果您想向这些文件夹添加 不是 由 Composer 管理的东西,您需要更新 .gitignore 以将其列入白名单

!resources/public/app/plugins/plugin-name

注意:一些插件可能在其指定范围之外创建文件或文件夹,甚至修改 wp-config.phpapp 目录中的其他文件。这些文件应添加到您的 .gitignore 文件中,因为它们由插件本身管理,这些插件通过 Composer 管理。需要修改 wp-config.php 的任何修改应移入 config/application.php

更新 WP 和插件版本

更新您的 WordPress 版本(或任何插件)只需在 composer.json 文件中更改版本号即可。

然后运行 composer update 将拉取新版本。

主题

主题也可以由 Composer 管理,但仅在以下两种情况下才应这样做

  1. 您正在使用一个完全不会被修改的父主题
  2. 您想将主主题分离出来并用作独立包

在大多数情况下,我们建议不要进行 #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 论坛提问并获得支持。