首页/新闻资讯/正文详情

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

发布时间:2026/9/24 1:37:10 来源:云帆数科 栏目:资讯中心
使用 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),仅供参考

相关推荐

RFM6601:硬件级LoRaWAN协议栈实现远距离低功耗大容量组网
RFM6601:硬件级LoRaWAN协议栈实现远距离低功耗大容量组网

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 1:37:04

晶晨S905M2-B盒子刷机卡2%?NAND短接与烧录工具实战指南
晶晨S905M2-B盒子刷机卡2%?NAND短接与烧录工具实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 1:36:14

基于8051内核的GPIO软件模拟IIC读取SHT30温湿度传感器实战
基于8051内核的GPIO软件模拟IIC读取SHT30温湿度传感器实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 1:35:43

嵌入式软件静态测试(十二)——ISO 26262 ASIL等级对静态测试的要求:工具置信度与证据链构建
嵌入式软件静态测试(十二)——ISO 26262 ASIL等级对静态测试的要求:工具置信度与证据链构建

❄️ 我的个人专栏: 《智能软件工程AI4SE》 《嵌入式面试总结》 《嵌入式处理器架构解析》 《嵌入式与虚拟化》 《嵌入式软件测试》 🌟 Simplicity is the ultimate sophistication摘要:本文围绕 ISO 26262 标准对嵌入式软件静态测试的要求&… · 2026/9/24 2:58:12

Segment Anything (SAM) 实战指南:在 AI-Research-SKILLs 中用点、框与掩码提示实现零样本图像分割
Segment Anything (SAM) 实战指南:在 AI-Research-SKILLs 中用点、框与掩码提示实现零样本图像分割

AI 技能人工智能大模型深度学习 【免费下载链接】AI-Research-SKILLs Comprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude code/codex/gemini agent will be an AI research agent with full hor… · 2026/9/24 2:58:06

AI正在拆掉传统界面:从表单到对话,人机交互的范式转移
AI正在拆掉传统界面:从表单到对话,人机交互的范式转移

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 2:57:29

Mosquitto 1.4.2 版本剖析:Broker 与客户端库关键缺陷修复详解
Mosquitto 1.4.2 版本剖析:Broker 与客户端库关键缺陷修复详解

后端消息队列消息路由 【免费下载链接】mosquitto Eclipse Mosquitto - An open source MQTT broker 项目地址: https://gitcode.com/gh_mirrors/mos/mosquitto 点击查看 免费下载 Mosquitto 1.4.2 是 Eclipse Mosquitto 在 2015 年 5 月发布的一个纯缺陷修复&… · 2026/9/24 2:57:23

Vue-ECharts 运行时更新机制深度解析:从快照规划、图形稀疏提交到主题边界的工程实现
Vue-ECharts 运行时更新机制深度解析:从快照规划、图形稀疏提交到主题边界的工程实现

前端图表库数据可视化 【免费下载链接】vue-echarts Vue.js component for Apache ECharts™. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-echarts 点击查看 免费下载 本篇文章基于 Vue-ECharts 官方设计文档 docs/runtime-updates.md 及其源码实现&#xf… · 2026/9/24 2:57:17

Kornia RandomTransplantation 的 MPS 后端空轴过滤 Bug 修复解析(4160)
Kornia RandomTransplantation 的 MPS 后端空轴过滤 Bug 修复解析(4160)

计算机视觉人工智能深度学习图像处理 【免费下载链接】kornia 🐍 Geometric Computer Vision Library for Spatial AI 项目地址: https://gitcode.com/gh_mirrors/ko/kornia 点击查看 免费下载 导读 本文围绕 Kornia 版本迁移记录 changelog.d/migrati… · 2026/9/24 2:57:17

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码