haddowg/bedrock

现代 WordPress 栈

维护者

详细信息

github.com/haddowg/bedrock

源代码

安装: 21

依赖: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

Forks: 1,164

类型:项目

1.3.2 2014-12-18 20:22 UTC

README

Build Status

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

目录

快速入门

使用 bedrock-ansible 开始使用为 Bedrock 定制的开发虚拟机。

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

功能

  • 使用 Composer 进行依赖管理
  • 使用 Capistrano 进行自动化部署
  • 更好的文件夹结构
  • 使用特定于环境的文件轻松配置 WordPress
  • 使用 Dotenv 的环境变量
  • 使用 VagrantAnsible - bedrock-ansible 在 GitHub 上轻松服务器环境
  • mu-plugins 的自动加载器(允许您将常规插件用作 mu-plugins)

Bedrock 旨在作为您分支和修改以适应您需求的基础。它是可删除键友好的,您可以删除或修改其任何部分。您还希望使用特定于您的网站/公司的设置自定义 Bedrock。

Bedrock 背后的许多理念都受到了 十二因素应用 方法的启发,包括 WordPress 特定版本

注意:虽然这是一个来自 Roots 启动主题 的人的项目,但 Bedrock 与 Roots 没有任何关联,并且可以与任何主题一起使用。

要求

  • Git
  • PHP >= 5.4
  • Ruby >= 1.9(用于 Capistrano)

如果您不感兴趣使用某个部分,那么您也不需要其要求。不使用 Capistrano 部署?那么请不要担心 Ruby。

安装/使用

有关以下步骤的更多详细信息,请参阅 文档

使用 create-project

Composer 的 create-project 命令将自动将 Bedrock 项目安装到目录并运行 composer install

安装后脚本将自动将 .env.example 复制到 .env,并且您将提示生成盐密钥并将它们附加到您的 .env 文件。

注意:要无提示生成盐密钥,请使用 -n(非交互式)运行 create-project。您还可以在您的分支下更改 composer.jsonconfig 下的 generate-salts 设置。默认值为 true

要完全跳过脚本,可以使用 --no-scripts 运行 create-project 以禁用它。

  1. 运行 composer create-project roots/bedrock <path>path 为安装到的文件夹)
  2. 编辑 .env 并更新环境变量
  • DB_NAME - 数据库名称
  • DB_USER - 数据库用户
  • DB_PASSWORD - 数据库密码
  • DB_HOST - 数据库主机(默认为 localhost
  • WP_ENV - 设置环境(开发预发布生产等)
  • WP_HOME - WordPress 主页的完整 URL(http://example.com
  • WP_SITEURL - 包含子目录的 WordPress 的完整 URL(http://example.com/wp
  1. 添加主题
  2. 将您的 Nginx 或 Apache vhost 设置为 /path/to/site/web/(如果使用 Capistrano,则为 /path/to/site/current/web/
  3. http://example.com/wp/wp-admin 访问 WP 管理员

手动

  1. 克隆/Fork 仓库
  2. 运行 composer install
  3. .env.example 复制到 .env 并更新环境变量
  • DB_NAME - 数据库名称
  • DB_USER - 数据库用户
  • DB_PASSWORD - 数据库密码
  • DB_HOST - 数据库主机(默认为 localhost
  • WP_ENV - 设置环境(开发预发布生产等)
  • WP_HOME - WordPress 主页的完整 URL(http://example.com
  • WP_SITEURL - 包含子目录的 WordPress 的完整 URL(http://example.com/wp
  1. 添加主题
  2. 将您的 Nginx 或 Apache vhost 设置为 /path/to/site/web/(如果使用 Capistrano,则为 /path/to/site/current/web/
  3. http://example.com/wp/wp-admin 访问 WP 管理员

使用 Capistrano 进行部署?

使用 Capistrano 部署

必需的 Gem

  • capistrano (> 3.1.0)
  • capistrano-composer

这些可以通过 gem install <gem name> 手动安装,但强烈建议您使用 Bundler 来管理它们。Bundler 是 Ruby 的 Composer 对应物。就像 Composer 管理您的 PHP 包/依赖关系一样,Bundler 管理您的 Ruby gems/依赖关系。Bundler 本身是一个 Gem,可以通过 gem install bundler 安装(可能需要 sudo 权限)。

此仓库根目录中的 Gemfile 指定了必需的 Gem(就像 composer.json)。安装 Bundler 后,运行 bundle install 以在 Gemfile 中安装 Gem。使用 Bundler 时,您需要将 cap 命令前缀为 bundle exec,如下所示(这确保您没有使用可能引起冲突的系统 Gem)。

有关设置 SSH 密钥认证以进行无密码(且安全)部署的最佳方式,请参阅 https://capistrano.ruby-lang.org.cn/documentation/getting-started/authentication-and-authorisation/

部署步骤

  1. 编辑 config/deploy/ 阶段/环境配置以设置角色/服务器和连接选项。
  2. 在第一次部署之前,运行 bundle exec cap <stage> deploy:check 以创建必要的文件夹/符号链接。
  3. 将您的 .env 文件添加到远程服务器上 deploy_to 路径的 shared/ 中,适用于您使用的所有阶段(例如:/srv/www/example.com/shared/.env
  4. 运行常规部署命令: bundle exec cap <stage> deploy
  5. 享受一键部署!
  • config/deploy/ 中编辑阶段/环境配置以设置角色/服务器和连接选项。

文档

文件夹结构

├── Capfile
├── composer.json
├── config
│   ├── application.php
│   ├── deploy
│   │   ├── staging.rb
│   │   └── production.rb
│   ├── deploy.rb
│   └── environments
│       ├── development.php
│       ├── staging.php
│       └── production.php
├── Gemfile
├── vendor
└── web
    ├── app
    │   ├── mu-plugins
    │   ├── plugins
    │   └── themes
    ├── wp-config.php
    ├── index.php
    └── wp

Bedrock 的组织结构与将 WordPress 放入自己的子目录类似,但有一些改进。

  • 为了不在 webroot 中暴露敏感文件,Bedrock 将所需内容移动到 web/ 目录中,包括 vendor 的 wp/ 源和 wp-content 源。
  • wp-content(或可能只是 content)已被重命名为 app,以更好地反映其内容。它包含应用程序代码,而不仅仅是“静态内容”。它还与诸如 Symfony 和 Rails 等其他框架相匹配。
  • wp-config.php 仍然位于 web/ 中,因为它由 WP 所需,但它仅作为加载器。实际的配置文件已移动到 config/ 以实现更好的分离。
  • Capistrano 配置也位于 config/ 中以保持一致性。
  • vendor/ 是 Composer 管理的依赖项安装的位置。
  • wp/ 是 WordPress 核心的位置。它也由 Composer 管理,但由于 WP 的限制,不能放在 vendor 下。

配置文件

web/wp-config.php 由 WordPress 所需,仅用于加载其他主要配置。不应向其添加任何内容。

config/application.php 是主配置文件,其中包含通常在 wp-config.php 中包含的内容。应在其中设置基本选项。

对于特定环境的配置,请使用位于config/environments目录下的文件。默认情况下有developmentstagingproduction,但可以按需设置。

环境配置必须在主application配置之前,因此环境配置中的任何内容都将覆盖application

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

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

您不想要它吗?

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

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

环境变量

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

PHP dotenv用于加载.env文件。然后,所有变量都可通过getenv$_SERVER$_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以将其列入白名单

!web/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就没有太多意义。

Capistrano

Capistrano是一个远程服务器自动化和部署工具。它将允许您使用一条命令部署或回滚您的应用程序

  • 部署:cap production deploy
  • 回滚:cap production deploy:rollback

Composer支持是内置的,所以当您运行部署时,会自动运行composer install。Capistrano有一个很好的部署流程,您可以将其挂钩并扩展它。

它是用Ruby编写的,因此如果您想使用它,需要在本地安装。Capistrano最近被重写,完全不受语言限制,因此如果您之前因为过于Rails中心化而放弃了它,那么请再次考虑它。

屏幕录像(付费):使用Capistrano部署WordPress

数据库同步

Bedrock默认不提供任何用于数据库同步的工具。最佳选项是使用WP-CLI。

@lavmeiker有一个很好的Capistrano WP-CLI包装插件,使其更加容易。 capistrano-wpcli提供以下命令(及其他)

  • 同步数据库:cap production wpcli:db:pushcap production wpcli:db:pull
  • 同步上传:cap production wpcli:uploads:rsync:pushcap production wpcli:uploads:rsync:pull

您不想要它吗?

您将失去一键部署和内置的Composer集成。还需要另一种部署方法。

  • 删除CapfileGemfileGemfile.lock
  • 删除config/deploy.rb
  • 删除config/deploy/目录

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选项设置为web/wp。使用此配置文件进行任何进一步的配置

Vagrant/Ansible

Bedrock与Vagrant和Ansible的集成现在可以在单独的bedrock-ansible项目中找到。该项目的README中存在基本说明,但如果您想要一个与特定Bedrock基于WP应用程序绑定的Vagrant盒子,请将示例Vagrantfile复制到您的应用程序存储库中,并编辑必要的文件路径。

请注意,使用Ansible,您不再需要手动创建/编辑一个.env文件(或使用composer create-project生成一个)。Ansible将根据其配置生成一个.env文件,并自动生成盐/密钥。

mu-plugins自动加载器

Bedrock 包含一个自动加载器,允许像必须使用的插件一样要求标准插件。自动加载的插件将在所有 mu 插件和标准插件加载之后包含。插件名称旁边带有星号(*)表示该插件已自动加载。要移除此功能,只需删除 web/app/mu-plugins/bedrock-autoloader.php

这使您可以通过 Composer 使用 mu 插件,如果它们的包类型是 wordpress-muplugin。您还可以像以下示例那样覆盖插件的类型

"installer-paths": {
  "web/app/mu-plugins/{$name}/": ["type:wordpress-muplugin", "roots/soil"],
  "web/app/plugins/{$name}/": ["type:wordpress-plugin"],
  "web/app/themes/{$name}/": ["type:wordpress-theme"]
},

Soil 是一个将类型设置为 wordpress-plugin 的包。由于它实现了 composer/installers,我们可以覆盖其类型。

待办事项

  • 基本数据库同步/复制解决方案

贡献

欢迎每个人 贡献 并改进此项目。您可以通过多种方式贡献

  • 报告问题(请参阅 问题指南
  • 建议新功能
  • 编写或重构代码
  • 修复 问题
  • 论坛 上回答问题

支持

使用 Roots Discourse 论坛提问并获得支持。