dasuchin / bedrock
现代WordPress栈
Requires
- php: >=5.3.2
- composer/installers: v1.0.12
- fancyguy/webroot-installer: 1.1.0
- roots/soil: 3.0.0
- vlucas/phpdotenv: ~1.0.6
- wordpress/wordpress: >=3.9.2
- wpackagist-plugin/advanced-custom-fields: >=4.3.8
- wpackagist-plugin/contact-form-7: ~3.9.1
- wpackagist-plugin/contact-form-7-honeypot: ~1.6.1
- wpackagist-plugin/contact-form-7-to-database-extension: >=2.8
- wpackagist-plugin/custom-post-type-ui: >=0.8.3
- wpackagist-plugin/lightbox-plus: >=2.7
- wpackagist-plugin/members: >=0.2.4
- wpackagist-plugin/nextgen-gallery: >=2.0.66
- wpackagist-plugin/rb-internal-links: >=2.0.16
- wpackagist-plugin/simple-urls: >=0.9.4
- wpackagist-plugin/use-google-libraries: >=1.5.2
- wpackagist-plugin/w3-total-cache: >=0.9.4
- wpackagist-plugin/widget-logic: >=0.57
- wpackagist-plugin/wordpress-seo: >=1.5
This package is not auto-updated.
Last update: 2024-09-24 03:56:16 UTC
README
Bedrock 是一个现代WordPress栈,可以帮助你使用最佳的开发工具和项目结构开始。
目录
快速开始
使用 bedrock-ansible 开始使用针对 Bedrock 定制的开发虚拟机。
或者运行 composer create-project roots/bedrock <path>
(有关更多详细信息,请参阅 安装/使用)以在本地获取 Bedrock 的新副本。
特性
- 使用 Composer 进行依赖管理
- 使用 Capistrano 进行自动化部署
- 更好的文件夹结构
- 使用环境特定文件轻松配置WordPress
- 使用 Dotenv 的环境变量
- 使用 Vagrant 和 Ansible(GitHub 上的 bedrock-ansible)轻松创建服务器环境
Bedrock 旨在作为您进行分支和修改以适应您需求的基座。它对删除键友好,您可以删除或修改其任何部分。您还希望使用特定于您的网站/公司的设置自定义 Bedrock。
Bedrock 的许多理念都受到 十二因素应用 方法的启发,包括针对 WordPress 的特定版本。
注意:虽然这是一个来自 Roots 启动主题 的团队的项目,但 Bedrock 与 Roots 没有任何关联,并且可以与任何主题一起使用。
需求
- Git
- PHP >= 5.3.2(用于 Composer)
- 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
。
要完全跳过脚本,可以通过运行create-project
命令并带上--no-scripts
选项来禁用它。
- 运行
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虚拟主机设置为
/path/to/site/web/
(如果使用Capistrano,则为/path/to/site/current/web/
) - 在
http://example.com/wp/wp-admin
访问WP管理员
手动
- 克隆/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虚拟主机设置为
/path/to/site/web/
(如果使用Capistrano,则为/path/to/site/current/web/
) - 在
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 Gem/依赖关系。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/。
部署步骤
- 编辑您的
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
│ └── application.php
├── Gemfile
├── vendor
└── web
├── app
│ ├── mu-plugins
│ ├── plugins
│ └── themes
├── wp-config.php
├── index.php
└── wp
Bedrock的架构类似于将WordPress放入其自己的子目录中,但有一些改进。
- 为了避免在webroot中暴露敏感文件,Bedrock将所需的内容移动到
web/
目录中,包括由Composer管理的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
您不想这样做吗?
您将失去一键部署和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
现在可以在单独的bedrock-ansible项目中找到与Bedrock的Vagrant和Ansible集成。在该项目的README文件中有基本说明,但如果您想将Vagrant箱与特定的基于Bedrock的WP应用程序绑定,请将示例Vagrantfile
复制到您的应用程序仓库中,并编辑必要的文件路径。
请注意,使用Ansible,您不再需要手动创建/编辑一个.env
文件(或使用composer create-project
生成一个)。Ansible将根据其配置生成一个.env
,并自动生成盐/密钥。
待办事项
- 基本数据库同步/复制解决方案
贡献
每个人都欢迎来贡献和改进此项目。您可以通过几种方式来贡献
支持
使用Roots Discourse论坛提问并获得支持。