gaambo/deployer-wordpress

用于部署 WordPress 网站的 Deployer 任务

3.1.0 2023-06-21 09:28 UTC

This package is auto-updated.

Last update: 2024-09-10 09:51:17 UTC


README

Deployer 任务/食谱集合,用于部署 WordPress 网站。从简单通过复制文件部署的网站到构建自定义主题/插件和安装 npm/composer 供应商,它处理所有类型的 WordPress 安装。

目录

安装

  1. 在根目录中运行 composer require gaambo/deployer-wordpress --dev
  2. 选择以下之一 食谱,并将相应的示例文件(examples/baseexamples/advanced)复制到您的根目录 - 创建自己的。
  3. 阅读食谱并根据您的需求进行自定义 - 这里有一个清单
    • 检查 localhost 配置
    • 设置到您的目录结构的路径
    • 如果有自定义主题,设置其名称 - 如果没有,请删除配置和主题构建任务
    • 如果有自定义 mu 插件,设置其名称 - 如果没有,请删除配置和 mu 插件构建任务
    • 检查部署流程是否符合您的需求,并可能删除/添加/覆盖任务
  4. 使远程主机为部署做好准备(安装 composer,WP CLI;设置路径等)。尽管库检查并安装了其中大多数内容。
  5. 在一个测试/预发布服务器上进行一次 测试部署。不要直接部署到您的生产网站,您可能会破坏它。
  6. 开发、部署并快乐 :)

要求

显然

  • PHPcomposer 用于安装和使用 Deployer
  • Deployer 核心 (deployer/deployer) 是此包的必需依赖项,定义在 composer.json
  • WordPress 安装 + 使用它的本地 web 服务器和数据库

大多数任务仅在 *nix shell 中运行 - 因此推荐使用 *nix 操作系统。如果您在 Windows 上运行,请参阅 WSL 在 Windows 中运行 Ubuntu Bash。

一些任务有额外的要求,例如

  • composer 用于 PHP 依赖项
  • Node.js/npm 用于 JavaScript 依赖项
  • WP CLI 用于数据库备份/导出/导入
  • 已安装 rsynczip 命令

配置

所有任务都有文档说明,描述了需要配置哪些选项/变量。 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/filtermu-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:backupdb:remote:import
  • db:pull:将远程数据库拉取到本地主机(结合 db:remote:backupdb:local:import

文件任务 (tasks/files.php)

  • files:push:将所有文件从本地推送到远程主机(结合 wp:pushuploads:pushplugins:pushmu-plugins:pushthemes:push
  • files:pull:将所有文件从远程拉取到本地主机(结合 wp:pulluploads:pullplugins:pullmu-plugins:pullthemes:pull

主题任务 (tasks/theme.php)

  • theme:assets:vendors:安装主题资源 vendors/依赖项(npm),可以在本地或远程运行
  • theme:assets:build:运行主题资源(npm)构建脚本,可以在本地或远程运行
  • theme:assets:一个组合任务,用于构建主题资源 - 结合 theme:assets:vendorstheme:assets:build
  • theme:vendors:安装主题 vendors(composer),可以在本地或远程运行
  • theme:一个组合任务,用于准备主题 - 结合 theme:assetstheme: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-plugins
  • mu-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二进制文件可以通过多种方式完成

  1. set.php中的默认bin/wp会检查是否存在可用的WP-CLI二进制文件,如果没有找到,则下载并安装到{{deploy_path}}/.dep/wp-cli.phar (这个路径在将来也会被检查)。
  2. 如果您想使用这种行为(检查是否已安装,否则安装)但在另一个路径,用函数覆盖bin/wp变量并更改它应该安装到的路径。
  3. 在主机配置中设置bin/wp变量路径,如果WP-CLI已经安装。
  4. 使用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_pathcurrent_path

高级

这使用了类似于PHPDeployer默认通用食谱的符号链接。每个发布版本都会部署在其自己的文件夹中,位于{{deploy_path}}/releases/{{deploy_path}}/current是一个指向最新版本的符号链接。成功部署后,符号链接会自动更新。您可以配置您的web服务器只提供{{deploy_path}}/current

自定义主题

在变量theme/name中设置自定义主题名称(=目录)。默认情况下,它会在本地运行theme:assets:vendorstheme: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的最佳实践。

测试

  1. 下载我的Vanilla WordPress样板或设置带有部署配置的本地开发环境
  2. 设置远程测试服务器
  3. 配置yml/deploy.php
  4. 运行通用任务(deployplugins:pull/pushdb)适用于基本和高级食谱

Gaambo贡献者