使用 Deployer 部署 Sulu 项目:recipe/sulu.php 配方详解与实战

发布时间:2026/9/24 1:37:18
使用 Deployer 部署 Sulu 项目:recipe/sulu.php 配方详解与实战 DevOpsCI/CDCLI开发工具运维【免费下载链接】deployerThe PHP deployment tool with support for popular frameworks out of the box项目地址https://gitcode.com/gh_mirrors/de/deployer点击查看免费下载Deployer 是使用 PHP 编写的开源部署工具其recipe/sulu.php为 Sulu CMS基于 Symfony 的企业级内容管理系统提供了开箱即用的部署配方。本文以 docs/recipe/sulu.md 为骨架结合 recipe/sulu.php 及其底层的 recipe/symfony.php、recipe/common.php 源码完整讲解 Sulu 配方的任务编排、配置参数、PHPCR 数据迁移与网站缓存处理并给出可直接运行的deploy.php示例。一、Deployer 与 Sulu 配方概览Deployer 是一款免费开源的 PHP 部署工具帮助你将 Sulu 应用发布到远程服务器。它的核心能力包括Provisioning服务器初始化自动为服务器安装与配置运行环境零停机部署通过 release 目录 符号链接切换部署期间服务不中断回滚Rollbacks发布失败时可快速回退到上一个可用版本。此外Deployer 语法简单直观、使用 SSH 连接服务器保证安全并通过并行连接提升部署速度且内置了对主流 PHP 框架的支持Sulu 便是其中之一。引入 Sulu 配方只需在部署脚本中写入require recipe/sulu.php;该配方源码位于 recipe/sulu.php对应的自动生成文档位于 docs/recipe/sulu.md。二、deploy 任务编排一次 Sulu 部署的完整流程Sulu 配方的deploy任务与 Symfony 配方一致见 docs/recipe/symfony.md 中的deploy分组任务由deploy:prepare、deploy:vendors、deploy:cache:clear、deploy:publish四个阶段组成整体结构如下deploy:prepare—— 准备一个新的 release分组任务见 docs/recipe/common.mddeploy:info显示部署信息deploy/info.phpdeploy:setup初始化远端主机部署目录结构deploy/setup.phpdeploy:lock锁定部署防止并发冲突deploy/lock.phpdeploy:release创建新的 release 目录deploy/release.phpdeploy:update_code拉取/更新代码到 releasedeploy/update_code.phpdeploy:env生成并配置.env文件deploy/env.phpdeploy:shared为共享文件与目录创建符号链接deploy/shared.phpdeploy:writable设置可写目录权限deploy/writable.phpdeploy:vendors—— 安装 Composer 依赖deploy/vendors.phpdeploy:cache:clear—— 清理 Symfony 缓存见下方 Sulu 对缓存的处理deploy:publish—— 发布 release分组任务见 docs/recipe/common.mddeploy:symlink将current符号链接切换到新 releasedeploy/symlink.phpdeploy:unlock解除部署锁deploy/lock.phpdeploy:cleanup清理旧版本 releasedeploy/cleanup.phpdeploy:success输出部署成功信息这段编排定义了 Deployer 经典的「prepare → vendors → cache → publish」发布模型所有工作在独立的 release 目录中完成最后通过一次符号链接切换实现原子发布这也是零停机与可回滚的基础。三、配方继承Sulu 基于 Symfony 配方构建recipe/sulu.php的第一行关键代码是require_once __DIR__ . /symfony.php;Sulu 配方直接继承 recipe/symfony.php因此自动获得 Symfony 配方提供的一切能力bin/console配置{{bin/php}} {{release_or_current_path}}/bin/consoledatabase:migrate任务执行doctrine:migrations:migratedoctrine:schema:validate任务校验 Doctrine 映射deploy:cache:clear任务清空缓存仅当composer_options包含--no-scripts时才主动执行因为composer install的脚本通常已清理并预热缓存deploy:dump-env任务优化环境变量composer dump-env ${APP_ENV:-prod}Symfony 默认的shared_dirsvar/log、shared_files.env.local、writable_dirsvar、var/cache、var/log、var/sessionsSymfony 配方又继承自common.php所以keep_releases默认 10保留的 release 数量、repository、deploy_path、bin/php、default_timeout默认 300 秒等通用配置同样生效。从源码结构看Sulu 配方的职责集中在「Sulu 特有的共享目录、可写目录以及网站控制台相关任务」上其余全部复用 Symfony 基础设施。四、Sulu 配方配置参数4.1 bin/websiteconsoleSulu 使用独立的bin/websiteconsole控制台入口对应 Sulu 的 Website Bundle 控制台默认值见 recipe/sulu.phpset(bin/websiteconsole, function () { return parse({{bin/php}} {{release_or_current_path}}/bin/websiteconsole --no-interaction); });要点{{bin/php}}是 PHP 可执行文件路径默认自动探测which php或当主机设置了php_version时使用/usr/bin/php{{php_version}}{{release_or_current_path}}在部署阶段指向release_path当前 release 目录在非部署任务如dep ssh后手动执行中指向current_path--no-interaction保证命令在非交互式 SSH 环境下不会卡在确认提示上。4.2 shared_dirs跨 release 共享的目录add(shared_dirs, [var/indexes, var/sitemaps, var/uploads, public/uploads]);Sulu 配方在 Symfony 默认shared_dirs基础上追加了四个目录var/indexes—— PHPCR/Sulu 的索引目录var/sitemaps—— 生成的站点地图缓存var/uploads—— 应用层上传内容public/uploads—— Web 可访问的上传目录。共享机制由 deploy/shared.php 实现首次部署时若共享目录尚不存在会从 release 目录复制一份到{{deploy_path}}/shared下之后每次发布都会删除 release 内的原目录并替换为指向shared目录的符号链接从而保证上传文件、索引等内容在 release 切换后依然保留。4.3 writable_dirs需要写入权限的目录add(writable_dirs, [public/uploads]);Sulu 将public/uploads标记为可写。可写模式的实现逻辑位于 deploy/writable.phpDeployer 会先mkdir -p确保目录存在再根据writable_mode默认acl执行相应权限设置可选模式包括chown、chgrp、chmod、acl、sticky、skip。HTTP 用户http_user默认从进程列表中自动探测 apache/nginx/www-data 等进程若探测失败可在部署脚本中手动指定set(http_user, www-data);五、Sulu 专属任务详解recipe/sulu.php定义了三个任务见 recipe/sulu.php5.1 phpcr:migrate —— PHPCR 数据迁移desc(Migrates PHPCR); task(phpcr:migrate, function () { run({{bin/console}} phpcr:migrations:migrate); });Sulu 基于 PHPCRPHP Content Repository内容仓库抽象持久化内容模型schema 变更需要通过 PHPCR 迁移执行。该任务使用{{bin/console}}而非 websiteconsole执行phpcr:migrations:migrate。与database:migrate一样建议在deploy:update_code之后、发布之前手动接入after(deploy:update_code, phpcr:migrate);5.2 deploy:website:cache:clear —— 网站缓存清理desc(Clears cache); task(deploy:website:cache:clear, function () { run({{bin/websiteconsole}} cache:clear --no-warmup); });该任务通过bin/websiteconsole清理 Sulu 网站控制台的缓存并使用--no-warmup跳过预热将预热动作交给下一个专门任务。5.3 deploy:website:cache:warmup —— 网站缓存预热desc(Warmups cache); task(deploy:website:cache:warmup, function () { run({{bin/websiteconsole}} cache:warmup); });清理之后执行预热将常用缓存提前生成避免用户首次访问时经历冷缓存等待。5.4 任务挂钩顺序关键after(deploy:cache:clear, deploy:website:cache:clear); after(deploy:website:cache:clear, deploy:website:cache:warmup);这两行after挂钩把 Sulu 缓存流程插入 Symfony 的deploy:cache:clear之后形成确定性的执行链deploy:cache:clearSymfony 控制台清理deploy:website:cache:clearSulu 网站控制台清理--no-warmupdeploy:website:cache:warmupSulu 网站控制台预热由于deploy:cache:clear又是deploy分组任务的一部分最终dep deploy会自动串联整个链路无需额外配置。从源码结构看这种「after 挂钩 分组任务」的组合是 Deployer 配方扩展的核心模式上层配方只需声明任务与挂钩即可无缝插入底层配方的既定流程。六、完整 deploy.php 示例综合以上内容一个可运行的 Sulu 部署脚本如下?php namespace Deployer; require recipe/sulu.php; // 主机与部署路径按需修改 host(example.org) -set(remote_user, deployer) -set(deploy_path, ~/sulu); // 代码仓库 set(repository, gitexample.org:team/sulu-project.git); // 可选指定 PHP 版本 / 可写模式 // set(php_version, 8.2); // set(writable_mode, chown); // PHPCR 迁移放在代码更新之后、发布之前 after(deploy:update_code, phpcr:migrate); // 可选数据库迁移继承自 Symfony 配方 // after(deploy:update_code, database:migrate);然后执行dep deploy失败时 Deployer 会打印出错命令可用dep deploy --start-from task从指定阶段续跑用dep rollback回滚用dep releases查看发布历史。服务器最终目录结构为deploy_path/current符号链接指向当前 release、releases/历史版本、shared/共享数据与上传文件、.dep/Deployer 内部文件Web 服务器将站点根目录指向current即可。七、源码级要点回顾配方即代码recipe/sulu.php 是唯一事实来源docs/recipe/sulu.md 由其自动生成文件头注释明确说明edit recipe/sulu.php, then run bin/docgen继承链sulu.php → symfony.php → common.phpSulu 只在继承之上做「增量」定制追加共享/可写目录、新增三个任务、注册两个 after 挂钩共享与可写shared_dirs通过符号链接实现跨 release 数据持久化recipe/deploy/shared.phpwritable_dirs依据writable_mode在远端执行权限调整recipe/deploy/writable.php执行顺序保障after()挂钩链保证了网站缓存一定在 Symfony 缓存清理后执行且先清后热。掌握这套配方后你可以在此基础上继续叠加自定义任务如前端构建、PHPCR 迁移、定时任务同步等并借助 Deployer 的并行连接与回滚机制获得一套稳定、可复用的 Sulu 发布流水线。赞分享DevOpsCI/CDCLI开发工具运维【免费下载链接】deployerThe PHP deployment tool with support for popular frameworks out of the box项目地址https://gitcode.com/gh_mirrors/de/deployer点击查看免费下载相关推荐使用 Deployer 部署 Pimcore 项目recipe/pimcore 配方详解与实战指南使用 Deployer 部署 Pimcore 项目recipe/pimcore 配方详解与实战指南 Deployer 是一个用 PHP 编写的开源部署工具内DevOpsCI/CDCLI开发工具运维使用 Deployer 部署 Flow Framework 项目recipe/flow_framework 实战指南使用 Deployer 部署 Flow Framework 项目recipe/flow_framework 实战指南 Flow Framework 是构建在DevOpsCI/CDCLI开发工具运维使用 Deployer 部署 Magento 项目magento 配方recipe完整解析与零停机发布实战使用 Deployer 部署 Magento 项目magento 配方recipe完整解析与零停机发布实战 导读 本文以 Deployer 开源仓库中的DevOpsCI/CDCLI开发工具运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询