
DevOpsCI/CDCLI开发工具运维【免费下载链接】deployerThe PHP deployment tool with support for popular frameworks out of the box项目地址https://gitcode.com/gh_mirrors/de/deployer点击查看免费下载本指南以 Deployer 项目仓库内置的 WordPress 专用 recipedocs/recipe/wordpress.md 与 recipe/wordpress.php为核心系统讲解如何通过require recipe/wordpress.php将任意 WordPress 站点接入 Deployer 的发布流水线。阅读完本文你将掌握 WordPress 项目所需的共享文件/目录配置、deploy任务完整执行链的每一环、服务器目录结构以及失败时如何回滚到上一个可用版本。WordPress Recipe 是什么Deployer 是一款用 PHP 编写的免费开源部署工具它通过 SSH 连接服务器帮助你把 WordPress 应用发布到远程主机。WordPress 专属 recipe 位于 recipe/wordpress.php对应的自动生成文档为 docs/recipe/wordpress.md。启用方式只需一行require recipe/wordpress.php;Deployer 面向 WordPress 场景的三个核心能力Provisioning服务器初始化自动为你初始化服务器安装运行站点所需的 PHP、Web 服务器、数据库等环境详见 docs/recipe/provision.md。Zero downtime deployment零停机部署采用 release symlink 切换机制发布过程中旧版本持续对外服务切换瞬间完成。Rollbacks回滚一旦发布出现问题可一键回滚到上一个可用版本。除此之外Deployer 还具备简单直观的声明式语法、基于并行连接的高效执行、全程走 SSH 的安全通道以及开箱即用地支持所有主流 PHP 框架。更多通用概念可参考 docs/getting-started.md。需要强调的事实边界本仓库中的 recipe/wordpress.php 是一个“薄封装”——它本身只定义了 3 个配置覆盖值和 1 个deploy任务真正的执行逻辑全部继承自通用 recipe因此理解 WordPress recipe 的关键在于吃透它背后继承的通用发布流水线。安装与初始化先安装 Deployer参考 docs/installation.md然后在 WordPress 项目目录下运行dep init按提示回答交互式问题Deployer 会生成deploy.php或deploy.yaml配方文件其中定义主机、任务与引入的 recipe。框架类 recipe包括 WordPress都基于 common recipe 扩展而来初始化完成后在配方文件顶部引入 WordPress recipe 即可。WordPress 专属配置项WordPress recipe 的全部配置只做了三件事把三个通用配置的默认值替换为 WordPress 项目的惯用值。源码见 recipe/wordpress.phpset(shared_files, [wp-config.php]); set(shared_dirs, [wp-content/uploads]); set(writable_dirs, [wp-content/uploads]);这三个配置项原本由通用 recipe 定义默认值分别为空列表 / 空列表 / 空列表WordPress recipe 对其进行了覆盖override。shared_files跨版本共享的文件默认值为[wp-config.php]。shared_files由 recipe/deploy/shared.php 定义它是需要在不同 release 之间共享的文件清单每个 release 都会通过符号链接指向存放在deploy_path/shared 目录下的同一份实体文件。对 WordPress 而言wp-config.php中包含数据库凭据、密钥盐security salts等环境相关配置不应该随代码版本库一起变动因此必须放入共享区。共享文件机制说明见 docs/recipe/deploy/shared.md。实际效果首次部署时 Deployer 会把wp-config.php复制到shared/wp-config.php之后每个新 release 中出现的wp-config.php都只是指向shared/wp-config.php的符号链接。你在服务器上修改一次配置所有版本立即生效。shared_dirs跨版本共享的目录默认值为[wp-content/uploads]。shared_dirs同样由 recipe/deploy/shared.php 定义需要跨 release 共享的目录清单实体存放于deploy_path/shared 目录。WordPress 的媒体库文件图片、附件都位于wp-content/uploads一旦发布新版本就把上传目录整体替换掉是不可接受的因此必须共享。机制说明见 docs/recipe/deploy/shared.md。writable_dirs需要写权限的目录默认值为[wp-content/uploads]。writable_dirs由 recipe/deploy/writable.php 定义指定哪些目录需要被设置为可写WordPress 运行期间要向 uploads 写入媒体文件。权限的落地方式由 writable_mode 控制支持chown把目录所有者改为 Web 服务器用户chgrp仅更改属组chmod按 writable_chmod_mode默认0755设置权限acl默认值使用 POSIX ACL 授予写权限sticky使用 sticky 位skip跳过写权限处理相关辅助配置还包括writable_use_sudo默认false、writable_recursive是否加-R默认false、writable_acl_groups额外授予写权限的组、http_user/http_group在chown/chgrp/acl模式下使用Deployer 会尝试从进程列表自动探测 Web 服务器用户。// 自定义示例改用 chmod 方式且递归设置 set(writable_mode, chmod); set(writable_chmod_mode, 0775); set(writable_recursive, true);如果你的服务器 ACL 不可用或部署用户权限受限建议显式覆盖writable_mode而不是依赖默认的acl。deploy 任务WordPress 完整发布流水线WordPress recipe 只声明了一个任务见 recipe/wordpress.phpdesc(Deploys your project); task(deploy, [ deploy:prepare, deploy:publish, ]);deploy是一个组任务group task由两个阶段串联而成。它完整复刻了 common recipe 中的deploy任务定义因此每次发布实际执行的子任务链如下第一阶段deploy:prepare —— 准备新 releasedeploy:prepare是组任务见 docs/recipe/common.md依次执行deploy:info打印本次部署的主机、仓库、分支等概要信息。deploy:setup在服务器上初始化部署目录骨架releases、shared、.dep等仅在首次部署时真正做事情。deploy:lock加部署锁防止多个发布流程并发执行互相干扰。deploy:release准备 release。清理未完成的残留 release并确定新 release 编号编号由 release_name 生成读取.dep/latest_release后加一首次为 1。deploy:update_code把代码更新到新 release 目录。默认采用update_code_strategy archive策略从远端仓库抓取归档可选local_archive本地打包上传或clone保留.git目录还可通过 branch默认HEAD可用--branch覆盖、target、sub_directory、git_ssh_command 等参数控制拉取行为。若需要composer install可在此之后挂接任务见下文“扩展钩子”。deploy:env按需生成/同步.env类环境配置配合env、dotenv配置项使用。deploy:shared为新 release 创建指向共享文件/目录的符号链接——也就是把wp-config.php链接到 shared 区、把wp-content/uploads链接到共享上传目录的关键一步。deploy:writable按writable_mode对writable_dirs即wp-content/uploads设置写权限。第二阶段deploy:publish —— 发布并切换deploy:publish也是组任务见 docs/recipe/common.md负责把新版本变成线上版本deploy:symlink把deploy_path/current符号链接原子性地切换到新 release。这是“零停机”的核心current切换前后站点始终可用。符号链接命令由 bin/symlink 提供默认ln -nfs若系统支持--relative则自动启用相对符号链接。deploy:unlock释放部署锁。deploy:cleanup清理旧 release仅保留 keep_releases默认 10个。deploy:success打印成功信息。执行dep deploy即按上述顺序跑完全部子任务。Deployer 会在每个任务前后显示进度便于定位卡住或失败的环节。扩展钩子在流水线中插入自定义步骤WordPress 项目的主题/插件依赖、前端构建等需求可通过after()钩子挂接。例如在代码更新完成后执行 Composer 安装task(build, function () { cd({{release_path}}); run(composer install --no-dev --optimize-autoloader); }); after(deploy:update_code, build);服务器目录结构发布完成后服务器上的布局如下以deploy_path为根~/example // deploy_path |- current - releases/1 // Symlink 指向当前 release |- releases |- 1 // 各 release 独立目录 |- ... |- wp-config.php - ../../shared/wp-config.php // 共享配置 |- wp-content/uploads - ../../shared/uploads // 共享媒体目录 |- shared // 跨版本共享区 |- wp-config.php |- uploads |- .dep // Deployer 内部状态锁、release 日志等其中current指向当前线上版本shared/wp-config.php与shared/uploads是唯一事实来源所有 release 通过符号链接引用。Web 服务器应把站点根目录指向currentNginx 可将root设置为deploy_path/current对应入口为index.php。回滚与故障处理一键回滚当发布失败或线上出现问题时执行dep rollback回滚任务定义于 recipe/deploy/rollback.php它会自动挑选回滚候选版本 rollback_candidate依据ls输出与.dep/releases_log内容然后把current符号链接切回该版本同时把当前出问题的release 标记为BAD_RELEASE写入带时间戳与用户名标记的文件后续自动回滚会跳过这些坏版本。也可手动指定候选版本dep rollback -o rollback_candidate123如果连回滚任务都无法执行可以手动修复符号链接dep run {{bin/symlink}} releases/123 {{current_path}}查看发布历史dep releases输出示例见 docs/recipe/deploy/release.md---------------------------example.org ------------------------------- | Date (UTC) | Release | Author | Target | Commit | --------------------------------------------------------------------- | 2021-11-06 20:51:45 | 1 | Anton Medvedev | HEAD | 34d24192e | | 2021-11-06 21:00:50 | 2 (bad) | Anton Medvedev | HEAD | 392948a40 | | 2021-11-06 23:19:20 | 3 | Anton Medvedev | HEAD | a4057a36c | | 2021-11-06 23:24:30 | 4 (current) | Anton Medvedev | HEAD | s3wa45ca6 | ---------------------------------------------------------------------bad表示被标记的坏版本current表示当前线上版本。发布失败时还会触发 deploy:failed 钩子可在其中编写通知或自动回滚逻辑。排错手段发布中途失败Deployer 会打印出错命令与原因常见问题包括wp-config.php未正确共享、上传目录权限不足、数据库凭据错误。用dep ssh直接登录服务器检查文件dep ssh从某个子任务开始续跑dep deploy --start-from deploy:migrate替换为你需要的任务名常见问题与建议为什么wp-config.php必须共享它包含数据库凭据与盐值属于环境信息而非代码。共享后服务器端修改立即对所有 release 生效也避免把敏感信息提交进 git 仓库。为什么 uploads 既要共享又要可写媒体文件的生命周期跨越所有发布版本因此共享同时 WordPress 运行期要写入新上传的图片因此纳入writable_dirs。默认writable_mode是acl若服务器文件系统不支持 ACL如部分传统挂载方式部署会在deploy:writable阶段报错此时应显式覆盖为chmod或chown并配合http_user设置。多站点Multisite若使用多站点且需要共享更多内容可追加配置例如set(shared_dirs, array_merge(get(shared_dirs), [wp-content/blogs.dir]))。插件/主题目录不纳入版本控制时同样可以通过扩展shared_dirs与writable_dirs处理保持与默认 uploads 一致的做法。参考资源WordPress recipe 源码recipe/wordpress.php通用 recipe 与其继承的全部子任务docs/recipe/common.md共享文件/目录机制docs/recipe/deploy/shared.md写权限处理与writable_modedocs/recipe/deploy/writable.md代码更新策略docs/recipe/deploy/update_code.md回滚机制docs/recipe/deploy/rollback.md快速上手docs/getting-started.md赞分享DevOpsCI/CDCLI开发工具运维【免费下载链接】deployerThe PHP deployment tool with support for popular frameworks out of the box项目地址https://gitcode.com/gh_mirrors/de/deployer点击查看免费下载相关推荐使用 Deployer 部署 FuelPHP 项目零停机发布、共享目录与回滚实战指南使用 Deployer 部署 FuelPHP 项目零停机发布、共享目录与回滚实战指南 FuelPHP 是 PHP 5.3 时代诞生的全栈 MVC 框架其 1DevOpsCI/CDCLI开发工具运维使用 Deployer 部署 CodeIgniter 项目从零配置到零停机发布使用 Deployer 部署 CodeIgniter 项目从零配置到零停机发布 Deployer 是一个用 PHP 编写的开源部署工具通过 SSH 连接远程DevOpsCI/CDCLI开发工具运维Deployer 部署 Prestashop 项目实战指南零停机部署、共享文件与可写目录配置详解Deployer 部署 Prestashop 项目实战指南零停机部署、共享文件与可写目录配置详解 Deployer 是一款用 PHP 编写的免费开源部署工具DevOpsCI/CDCLI开发工具运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考