rankhammer / bedrock
现代WordPress堆栈
Requires
- php: >=5.4
- components/font-awesome: 4.2.*@dev
- composer/installers: v1.0.12
- johnpbloch/wordpress: 4.2.2
- rankhammer/roots: dev-master
- roots/soil: 3.0.2
- vlucas/phpdotenv: 1.0.9
- wpackagist-plugin/ewww-image-optimizer: *
- wpackagist-plugin/wordpress-seo: *
This package is not auto-updated.
Last update: 2024-09-28 15:59:57 UTC
README
Bedrock是一个现代WordPress堆栈,可以帮助您使用最佳开发工具和项目结构开始工作。
目录
快速开始
使用 bedrock-ansible 来开始使用为Bedrock定制的开发虚拟机。
或者运行 composer create-project rankhammer/bedrock <path>
(有关更多详细信息,请参阅安装/使用)以仅在本地上获取Bedrock的新副本。
功能
- 使用 Composer 进行依赖管理
- 使用 Capistrano 进行自动部署
- 更好的文件夹结构
- 使用环境特定文件轻松配置WordPress
- 使用 Dotenv 环境变量
- 使用 Vagrant 和 Ansible - GitHub上的 bedrock-ansible 轻松服务器环境
- 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.json
下的 config
中的 generate-salts
设置。默认值为 true
。
要完全跳过脚本,可以使用带有--no-scripts
选项的create-project
命令来禁用它。
- 运行
composer create-project roots/bedrock <路径>
(路径
为安装到的文件夹) - 编辑
.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/web/
(如果使用Capistrano,则为/path/to/site/current/web/
) - 在
http://example.com/wp/wp-admin
访问WP Admin
手动
- 克隆/Fork仓库
- 运行
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/web/
(如果使用Capistrano,则为/path/to/site/current/web/
) - 在
http://example.com/wp/wp-admin
访问WP Admin
使用Capistrano进行部署吗?
使用Capistrano部署
必需的Gems
- 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
指定了必需的Gems(就像composer.json
)。一旦安装了Bundler,运行bundle install
来安装Gemfile
中的Gems。当使用Bundler时,你需要在cap
命令前添加bundle exec
,如下所示(这确保你没有使用系统Gems,这可能导致冲突)。
有关为您的服务器设置SSH密钥认证以实现无密码(且安全)部署的最佳方法的详细信息,请参阅https://capistrano.ruby-lang.org.cn/documentation/getting-started/authentication-and-authorisation/。
部署步骤
- 编辑你的
config/deploy/
阶段/环境配置以设置角色/服务器和连接选项。 - 在第一次部署之前,运行
bundle exec cap <阶段> deploy:check
来创建必要的文件夹/符号链接。 - 将你的
.env
文件添加到远程服务器上的deploy_to
路径的shared/
中,用于你使用的所有阶段(例如:/srv/www/example.com/shared/.env
) - 运行常规部署命令:
bundle exec cap <阶段> deploy
- 享受一键部署!
- 在
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
下。
配置文件
WordPress需要的根配置文件web/wp-config.php
,仅用于加载其他主要配置。不应向其添加其他内容。
config/application.php
是包含wp-config.php
通常包含内容的主要配置文件。应在其中设置基本选项。
针对特定环境的配置,请使用config/environments
目录下的文件。默认情况下有development
、staging
和production
,但这些可以是你需要的任何内容。
环境配置必须在主要application
配置之前,所以环境配置中的任何内容都将优先于application
。
注意:在PHP中不能重新定义常量。所以如果你在application.php
中有基本设置,并想在例如production.php
中覆盖它,你有几种选择
- 移除基本选项,并确保在需要的环境中定义它
- 只有在尚未在
application.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
以安装新包。
plugins
和mu-plugins
默认情况下由Git忽略,因为Composer管理它们。如果你想向这些目录添加不是由Composer管理的项目,你需要更新.gitignore
以将这些目录列入白名单
!web/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就没有太多意义。
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:push
和cap production wpcli:db:pull
- 同步上传:
cap production wpcli:uploads:rsync:push
和cap production wpcli:uploads:rsync:pull
你不想要它吗?
您将失去一键部署和Composer的内置集成。还需要另一种部署方法。
- 删除
Capfile
、Gemfile
和Gemfile.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与其他WordPress项目一样与WP-CLI
配合使用。以前我们在composer.json
文件中将WP-CLI作为依赖项。这已被删除,因为WP-CLI现在推荐使用phar
文件全局安装它。这也导致了如果您尝试使用全局安装时发生冲突。
wp
命令将自动识别Bedrock的子目录安装,只要您从项目目录(或更深层)运行命令。Bedrock包含一个wp-cli.yml
文件,该文件将path
选项设置为web/wp
。使用此配置文件进行任何进一步的配置。
Vagrant/Ansible
Vagrant和Ansible与Bedrock的集成现在可以在独立的bedrock-ansible项目中找到。该项目的README文件中包含基本说明,但如果你需要一个与特定Bedrock基于WordPress应用程序关联的Vagrant虚拟机,请将示例Vagrantfile
复制到你的应用程序仓库中,并编辑必要的文件路径。
注意,使用Ansible后,你不再需要手动创建/编辑.env
文件(或使用composer create-project
生成一个)。Ansible将根据其配置生成一个.env
文件,并自动生成盐值/密钥。
mu-plugins自动加载器
Bedrock包含一个自动加载器,允许标准插件像必须使用插件一样被引入。自动加载的插件在所有mu-plugins和标准插件加载之后被包含。插件名称旁边的星号(*)表示已自动加载的插件。要删除此功能,只需删除web/app/mu-plugins/bedrock-autoloader.php
。
这允许通过Composer使用mu-plugins,如果它们的包类型为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论坛提问并获取支持。