digitalerase / deployer-extended-wordpress-composer
基于 Composer 的 WordPress 部署,使用 deployer.org。
Requires
- deployer/deployer: ~7.0
- digitalerase/deployer-extended: ^18
- digitalerase/deployer-extended-database: ^16
- digitalerase/deployer-extended-media: ^11
- digitalerase/deployer-loader: ^4
- symfony/dotenv: ^3.3 || ^4 || ^5 || ^6
- wp-cli/search-replace-command: ~2.0
- wp-cli/wp-cli: ~2.1
README
它做什么?
本包提供使用 deployer (deployer.org) 部署 WordPress 的任务,并额外提供同步数据库和媒体文件的任务。
预期部署与基于 https://roots.io/bedrock/ 的 composer 基于 WordPress 项目兼容。
依赖项
本包依赖于以下包
- digitalerase/deployer-extended 包提供了一些 deployer 任务,可用于任何框架或 CMS。
- digitalerase/deployer-extended-database 包提供了一些与 PHP 框架无关的 deployer 任务,用于同步数据库。
- digitalerase/deployer-extended-media 包提供了一些与 PHP 框架无关的 deployer 任务,用于同步媒体。
- wp-cli/search-replace-command 包用于在数据库同步后更改域名。是 wp-cli/wp-cli 工具的一部分。
安装
使用 composer 安装包
composer require digitalerase/deployer-extended-wordpress-composer
如果你使用 deployer 作为 phar,则在你的 deploy.php 中添加以下行
require_once(__DIR__ . '/vendor/digitalerase/deployer-loader/autoload.php'); new \SourceBroker\DeployerExtendedWordpressComposer\Loader();
从你的 deploy.php 中删除任务 "deploy"。否则,你会覆盖掉 deployer/deploy/task/deploy.php 中定义的部署任务
示例 deploy.php 文件
<?php namespace Deployer; require_once(__DIR__ . '/vendor/digitalerase/deployer-loader/autoload.php'); new \SourceBroker\DeployerExtendedWordpressComposer\Loader(); set('repository', 'git@my-git:my-project.git'); host('development') ->set('public_urls', ['https://example.test/']) ->set('deploy_path', getcwd()); host('staging') ->setHostname('111.111.111.111') ->setRemoteUser('www-data') ->set('branch', 'staging') ->set('public_urls', ['https://www.example.staging.com/']) ->set('deploy_path', '/var/www/example.staging.com'); host('production') ->setHostname('111.111.111.111') ->setRemoteUser('www-data') ->set('branch', 'master') ->set('public_urls', ['https://example.com/']) ->set('deploy_path', '/var/www/example.com');
注意 host('dev'); 的声明。这是为了数据库任务声明域名替换和存储数据库备份的路径所必需的。
同步数据库
数据库同步使用 digitalerase/deployer-extended-database 完成。以下是从生产环境同步到本地实例的命令示例
dep db:pull production
您也可以像以下这样从生产环境复制数据库到测试实例
dep db:copy production --options=target:staging
域名替换
"post_command" 任务 "db:import:post_command:wp_domains" 会更改在 "public_urls" 中声明的域名。域名替换是通过来自 wp-cli/wp-cli 的 cli 命令 "search-replace" 完成的。
请注意,每个实例中 "public_urls" 的数量应相同,因为域名替换是针对每对对应的 URL 执行的。
以下示例将给你一个想法
host('development') ->set('public_urls', ['https://example.test', 'https://sub-example.test']) ->set('deploy_path', getcwd()); host('staging') ->setHostname('111.111.111.111') ->setRemoteUser('www-data') ->set('public_urls', ['https://example.staging.com', 'https://sub-example.staging.com']) ->set('deploy_path', '/var/www/example.staging.com'); host('production') ->setHostname('111.111.111.111') ->setRemoteUser('www-data') ->set('public_urls', ['https://example.com', 'https://sub-example.se']) ->set('deploy_path', '/var/www/example.com');
如果你将执行以下命令
dep db:pull production
数据库导入后,以下命令将自动执行
wp search-replace https://example.com https://example.test wp search-replace https://sub-example.com https://sub-example.test
我应该使用 "deployer-extended-wordpress" 还是 "deployer-extended-wordpress-composer"?
在 `digitalerase/deployer-extended-wordpress`_ 中,WordPress 和第三方插件是手动安装的。好处是你可以自动更新 WordPress 和插件。这可以被认为是低预算 WordPress 网站的优选方案。
在 digitalerase/deployer-extended-wordpress-composer 中,WordPress 和第三方插件使用 composer 进行安装。这种方式可以让你更好地控制安装内容,但同时也意味着在安装新的 WordPress 或新的插件版本之前,你需要首先修改 composer.json 或执行 composer update(具体取决于升级的大小)。然后你需要提交 composer.json / composer.lock 并进行部署,这将安装新的 WordPress 和插件版本。这是一项不能轻易自动化的额外工作。这种解决方案的一个额外优点是,你可以轻松清理受感染的 WordPress/plugins 文件,因为每次部署时,所有的 PHP 文件都是全新的(来自你的 git 和 composer 仓库的部分)。