gaambo / deployer-wordpress
用于部署 WordPress 网站的 Deployer 任务
Requires
- php: ^8.0|^7.3
- deployer/deployer: ^7.3
This package is auto-updated.
Last update: 2024-09-10 09:51:17 UTC
README
Deployer 任务/食谱集合,用于部署 WordPress 网站。从简单通过复制文件部署的网站到构建自定义主题/插件和安装 npm/composer 供应商,它处理所有类型的 WordPress 安装。
目录
安装
- 在根目录中运行
composer require gaambo/deployer-wordpress --dev
- 选择以下之一 食谱,并将相应的示例文件(
examples/base
或examples/advanced
)复制到您的根目录 - 或 创建自己的。 - 阅读食谱并根据您的需求进行自定义 - 这里有一个清单
- 检查 localhost 配置
- 设置到您的目录结构的路径
- 如果有自定义主题,设置其名称 - 如果没有,请删除配置和主题构建任务
- 如果有自定义 mu 插件,设置其名称 - 如果没有,请删除配置和 mu 插件构建任务
- 检查部署流程是否符合您的需求,并可能删除/添加/覆盖任务
- 使远程主机为部署做好准备(安装 composer,WP CLI;设置路径等)。尽管库检查并安装了其中大多数内容。
- 在一个测试/预发布服务器上进行一次 测试部署。不要直接部署到您的生产网站,您可能会破坏它。
- 开发、部署并快乐 :)
要求
显然
- PHP 和 composer 用于安装和使用 Deployer
- Deployer 核心 (
deployer/deployer
) 是此包的必需依赖项,定义在composer.json
中 - WordPress 安装 + 使用它的本地 web 服务器和数据库
大多数任务仅在 *nix shell 中运行 - 因此推荐使用 *nix 操作系统。如果您在 Windows 上运行,请参阅 WSL 在 Windows 中运行 Ubuntu Bash。
一些任务有额外的要求,例如
- composer 用于 PHP 依赖项
- Node.js/npm 用于 JavaScript 依赖项
- WP CLI 用于数据库备份/导出/导入
- 已安装
rsync
和zip
命令
配置
所有任务都有文档说明,描述了需要配置哪些选项/变量。 set.php
包含在所有示例配方中 - 这和示例配方应该涵盖了所有必需的配置。需要您设置的额外变量在配方中相应标记。
为了帮助理解这里的所有配置,以下是关于主题的想法:任务设计为与任何类型的 WordPress 设置(纯WordPress、Composer、子目录等)一起工作 - 因此所有路径和目录都可以通过变量进行配置。 set.php
包含一些合理的默认值,使得所有任务都可以在默认安装中直接使用。
默认目录结构
我的 Vanilla WordPress 模板 使用这个库。您可以在 GitHub 仓库中找到示例配置。
wp-config.php
为了让 WordPress 可部署,您需要将依赖于主机的配置(例如数据库访问)提取到单独的文件中,该文件不在您的 git 仓库中,也不会被部署。我建议使用一个 wp-config-local.php
文件。该文件应在您的 wp-config.php
中进行要求,并由 git 忽略(通过 .gitignore
)。这样,wp-config.php
可以(应该)位于您的 git 仓库中,并且也可以部署。默认的 wp/filter
配置假设了这一点。使用 wp-config-local.php
的另一个优点是按主机设置 WP_DEBUG
。
Rsync 过滤器/排除/包含
默认的 rsync 配置用于同步文件(由所有 *:push/*:pull 任务使用)设置在 rsync
变量中。默认情况下,它设置了一个 filter-perDir
参数,其值为 .deployfilter
- 这意味着 rsync 将在每个目录中查找一个名为 .deployfilter
的文件来解析此目录的过滤器。有关语法的更多信息,请参阅 rsync man 中的“过滤器规则”部分。
这可以方便地将它放在您的自定义主题或 mu-plugin 中 - 例如
- phpcs.xml
- README.md
- .babelrc
- node_modules
- .eslintignore
- .eslintrc.json
- .stylelintignore
- .stylelintrc.json
- gulp.config.js
- gulpfile.babel.js
- package.json
- package-lock.json
这可以防止任何开发文件/开发工具同步。我强烈建议您在自定义主题和 mu-plugin 中放置类似的内容,或者覆盖任何 themes/filter
或 mu-plugins/filter
配置。
任务
所有任务都位于 src/tasks
目录中,并有很好的文档说明。以下是所有任务的摘要 - 有关详细信息(例如所需的变量/配置),请参阅它们的源代码。您还可以运行 dep list
来查看所有可用的任务及其描述。
数据库任务 (tasks/database.php
)
db:remote:backup
:备份远程数据库并将其下载到本地主机db:local:backup
:备份本地数据库并将其上传到远程主机db:remote:import
:在远程主机上导入当前数据库备份(来自本地主机)db:local:import
:在本地主机上导入当前数据库备份(来自远程主机)db:push
:将本地数据库推送到远程主机(结合db:local:backup
和db:remote:import
)db:pull
:将远程数据库拉取到本地主机(结合db:remote:backup
和db:local:import
)
文件任务 (tasks/files.php
)
files:push
:将所有文件从本地推送到远程主机(结合wp:push
、uploads:push
、plugins:push
、mu-plugins:push
、themes:push
)files:pull
:将所有文件从远程拉取到本地主机(结合wp:pull
、uploads:pull
、plugins:pull
、mu-plugins:pull
、themes:pull
)
主题任务 (tasks/theme.php
)
theme:assets:vendors
:安装主题资源 vendors/依赖项(npm),可以在本地或远程运行theme:assets:build
:运行主题资源(npm)构建脚本,可以在本地或远程运行theme:assets
:一个组合任务,用于构建主题资源 - 结合theme:assets:vendors
和theme:assets:build
theme:vendors
:安装主题 vendors(composer),可以在本地或远程运行theme
:一个组合任务,用于准备主题 - 结合theme:assets
和theme:vendors
themes:push
:将主题从本地推送到远程themes:pull
:将主题从远程拉取到本地themes:sync
:在远程和本地之间同步主题themes:backup:remote
:在远程主机上备份主题并下载 zip 文件themes:backup:local
:在本地主机备份主题
上传任务 (tasks/uploads.php
)
uploads:push
:将本地上传内容推送到远程uploads:pull
:从远程拉取上传内容到本地uploads:sync
:同步远程和本地的上传内容uploads:backup:remote
:在远程主机备份上传内容并下载zip文件uploads:backup:local
:在本地主机备份上传内容
插件任务 (tasks/plugins.php
)
plugins:push
:将本地插件推送到远程plugins:pull
:从远程拉取插件到本地plugins:sync
:同步远程和本地的插件plugins:backup:remote
:在远程主机备份插件并下载zip文件plugins:backup:local
:在本地主机备份插件
MU 插件任务 (tasks/mu-plugins.php
)
mu-plugin:vendors
:安装mu-plugin的供应商(composer),可以在本地或远程运行mu-plugin
:一个准备主题的综合性任务 - 目前仅运行mu-plugin:vendors任务mu-plugins:push
:将本地mu-plugins推送到远程mu-plugins:pull
:从远程拉取mu-plugins到本地mu-plugins:sync
:同步远程和本地的mu-pluginsmu-plugins:backup:remote
:在远程主机备份mu-plugins并下载zip文件mu-plugins:backup:local
:在本地主机备份mu-plugins
WordPress 任务 (tasks/wp.php
)
wp:download-core
:通过WP CLI安装WordPress核心wp:push
:通过rsync推送WordPress核心文件wp:pull
:通过rsync拉取WordPress核心文件wp:info
:通过WP CLI运行--info命令 - 只是一个辅助/测试任务wp:install-wpcli
:使用wp:install-wpcli
任务手动安装WP-CLI二进制文件,之后将路径设置为/bin/wp
。
WP-CLI
处理和安装WP-CLI二进制文件可以通过多种方式完成
set.php
中的默认bin/wp
会检查是否存在可用的WP-CLI二进制文件,如果没有找到,则下载并安装到{{deploy_path}}/.dep/wp-cli.phar
(这个路径在将来也会被检查)。- 如果您想使用这种行为(检查是否已安装,否则安装)但在另一个路径,用函数覆盖
bin/wp
变量并更改它应该安装到的路径。 - 在主机配置中设置
bin/wp
变量路径,如果WP-CLI已经安装。 - 使用
wp:install-wpcli
任务手动安装WP-CLI二进制文件,之后将其路径设置为/bin/wp
。您可以通过CLI传递installPath、binaryFile和sudo使用情况:dep wp:install-wpcli stage=production -o installPath='{{deploy_path}}/.bin -o binaryFile=wp -o sudo=true
有关更多信息,请参阅原始PR。
有一个用于下载核心和--info
的任务。您可以根据自己的需要生成自己的任务来处理其他WP-CLI命令,有一个实用函数Gaambo\DeployerWordpress\Utils\WPCLI\runCommand
(src/utils/wp-cli.php
);
食谱
Deployer WordPress提供了两个基础食谱,这些食谱处理我的用例。这两个食谱都是基于默认的PHPDeployer通用食谱,并且有自己的食谱文件,您可以将它们包含在您的deploy.php
中作为起点。示例文件夹为每个食谱提供了示例。这两个食谱以PHPDeployer的默认格式(.dep
文件夹)记录已部署的版本。这两个食谱用deploy:update_code
Deployer任务替换了deploy:update_code
任务以通过rsync而不是git部署代码
基础
这是针对不需要按版本或原子发布进行符号链接的WordPress站点。这意味着在您的远程/生产主机上,您只有一个包含所有WordPress文件的文件夹,并由您的Web服务器提供服务。由于这仍然基于使用符号链接的默认PHPDeployer食谱并提供与所有任务的兼容性,因此这里硬编码了release_path
和current_path
。
高级
这使用了类似于PHPDeployer默认通用食谱的符号链接。每个发布版本都会部署在其自己的文件夹中,位于{{deploy_path}}/releases/
和{{deploy_path}}/current
是一个指向最新版本的符号链接。成功部署后,符号链接会自动更新。您可以配置您的web服务器只提供{{deploy_path}}/current
。
自定义主题
在变量theme/name
中设置自定义主题名称(=目录)。默认情况下,它会在本地运行theme:assets:vendors
和theme:assets:build
,并将构建的/dist文件推送到服务器(-->不需要在服务器上安装Node.js/npm)。theme:assets
任务(将上述两个任务分组)链接到beforedeploy:push_code
。
在服务器上完成PHP/composer的供应商/依赖项的安装。因此,theme:vendors
任务链接到afterdeploy:push_code
。
自定义 MU-插件
在变量mu-plugin/name
中设置自定义mu-plugin名称(=目录)。在服务器上完成PHP/composer的供应商/依赖项安装。因此,mu-plugin:vendors
任务链接到afterdeploy:push_code
。
变更日志
请参阅CHANGELOG.md。
贡献
如果您有功能请求,发现错误或需要帮助,请在GitHub上创建一个问题。欢迎提交拉取请求。PSR2编码标准被使用,并努力遵守Deployer的最佳实践。
测试
- 下载我的Vanilla WordPress样板或设置带有部署配置的本地开发环境
- 设置远程测试服务器
- 配置yml/deploy.php
- 运行通用任务(
deploy
,plugins:pull/push
,db
)适用于基本和高级食谱