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

Deployer 部署 Prestashop 项目实战指南:零停机部署、共享文件与可写目录配置详解

发布时间:2026/9/23 16:25:43 来源:云帆数科 栏目:资讯中心
Deployer 部署 Prestashop 项目实战指南:零停机部署、共享文件与可写目录配置详解
Deployer 部署 Prestashop 项目实战指南零停机部署、共享文件与可写目录配置详解【免费下载链接】deployerThe PHP deployment tool with support for popular frameworks out of the box项目地址: https://gitcode.com/gh_mirrors/de/deployerDeployer 是一款用 PHP 编写的免费开源部署工具本文围绕 docs/recipe/prestashop.md 讲解如何用其官方 Prestashop 配方recipe将 Prestashop 电商应用部署到远程服务器涵盖deploy任务完整执行链、shared_files/shared_dirs/writable_dirs三组核心配置的默认值与覆盖方式以及零停机发布、回滚与权限机制的源码级原理。读完本文你将能够编写一份可直接运行的 Prestashop 部署脚本并理解每次dep deploy在服务器上究竟发生了什么。认识 Prestashop 配方在deploy.php或deploy.yaml中引入 Prestashop 配方即可获得整套部署能力require recipe/prestashop.php;该配方源码位于 recipe/prestashop.php它仅依赖并扩展了 common 配方require_once __DIR__ . /common.php;同时通过add(recipes, [prestashop]);声明自身身份。也就是说Prestashop 配方没有引入任何额外依赖所有任务与默认配置都来自 common 配方及其内部引入的 deploy/* 系列子配方。Deployer 面向 Prestashop 场景的核心价值有三点Provisioning服务器预置用provision配方自动完成服务器初始化创建用户、安装 PHP/Nginx/Caddy 等详见 docs/recipe/provision.mdZero downtime deployment零停机部署通过“新版本目录 原子切换符号链接”的方式发布期间旧版本持续对外服务Rollbacks回滚若发布后发现问题可一键回滚到上一版本。此外 Deployer 还以并行 SSH 连接加速执行、天然支持所有主流 PHP 框架。更完整的入门指引见 docs/getting-started.md。安装与初始化全局安装推荐日常使用composer global require deployer/deployer或将~/.composer/vendor/bin加入PATH写入.bashrc/.zshrc随后在项目目录运行dep init生成deploy.php。详见 docs/installation.md。项目级安装推荐 CI/CDcomposer require --dev deployer/deployer alias depvendor/bin/dep vendor/bin/dep init最小可用配置// deploy.php namespace Deployer; require recipe/prestashop.php; host(example.org) -set(remote_user, deployer) -set(deploy_path, ~/prestashop) -set(repository, gitgithub.com:your/prestashop.git);其中deploy_path为必填项若未设置recipe/common.php 会直接抛出ConfigurationException提示 “Please, specifydeploy_path.”。repository默认值为空字符串部署前必须显式设置。deploy 任务执行链一次部署的完整旅程Prestashop 配方的deploy任务定义在 recipe/prestashop.phpdesc(Deploys your project); task( deploy, [ deploy:prepare, deploy:vendors, deploy:publish, ], );它在 common 配方的deploy仅deploy:preparedeploy:publish基础上额外插入了deploy:vendors通过 Composer 安装 PHP 依赖Prestashop 依赖 vendor 目录这一步必不可少。整体调用树如下deploy:prepare—— 准备一个新版本releasedeploy:info—— 展示部署信息主机、仓库、分支等deploy:setup—— 在服务器上创建部署目录结构releases、shared、.dep等deploy:lock—— 加部署锁防止并发部署deploy:release—— 准备 release 目录新版本号deploy:update_code—— 拉取代码到 release 目录deploy:env—— 配置.env文件deploy:shared—— 为共享文件与目录创建符号链接deploy:writable—— 设置可写目录权限deploy:vendors—— 在 release 目录安装 Composer 依赖deploy:publish—— 发布该版本deploy:symlink—— 将current符号链接切换到新 releasedeploy:unlock—— 解除部署锁deploy:cleanup—— 清理过期 release默认保留 10 个deploy:success—— 输出成功信息deploy:prepare与deploy:publish都是定义在 recipe/common.php 的组任务group task上述子任务顺序与源码完全一致。发布失败时Deployer 会自动触发deploy:failed钩子见 recipe/common.php 的fail(deploy, deploy:failed);。执行部署dep deploy失败时可按--start-from从指定步骤继续例如dep deploy --start-from deploy:shared或执行dep ssh登录服务器排查dep releases可查看历史版本列表。配置一shared_files共享文件Prestashop 配方覆盖override了 deploy/shared 配方 中默认的shared_files空数组默认值如下见 recipe/prestashop.phpset(shared_files, [ config/settings.inc.php, .htaccess, ]);config/settings.inc.phpPrestashop 1.x 的核心数据库配置文件保存数据库主机、用户名、密码与表前缀等连接信息属于每台服务器各不相同的敏感配置绝不能随代码发布被覆盖.htaccessApache 下的 URL 重写与访问控制配置通常与服务器环境RewriteBase、域名、SSL 重定向强相关。deploy:shared任务recipe/deploy/shared.php的处理逻辑是将共享文件复制到{{deploy_path}}/shared目录删除 release 中的原文件再建立shared/file→{{release_path}}/file的符号链接。每次新 release 都会自动链接到同一份持久化文件因此数据库配置、伪静态规则在版本更新后保持不变。若 shared 目录中文件尚不存在而 release 中存在会先复制再链接文件目录缺失时会自动mkdir -p并touch占位。如需追加额外共享文件可在你的deploy.php中合并覆盖set(shared_files, array_merge(get(shared_files), [ config/xml, // 例如共享 XML 缓存 var/logs/.htaccess, ]));配置二shared_dirs共享目录覆盖shared_dirs默认值如下recipe/prestashop.phpset(shared_dirs, [ img, log, download, upload, translations, mails, themes/default-bootstrap/lang, themes/default-bootstrap/mails, themes/default-bootstrap/pdf/lang, ]);这些目录都是 Prestashop 运行期会持续写入、且必须跨版本保留的业务数据img商品、分类、品牌等图片上传目录log日志输出目录download虚拟商品下载文件upload用户自定义上传如附加文件translations后台翻译文件覆盖语言包mails邮件模板可能被运营定制themes/default-bootstrap/lang、themes/default-bootstrap/mails、themes/default-bootstrap/pdf/lang默认主题下的语言、邮件与 PDF 模板翻译目录对应 Prestashop 1.6 默认主题结构若使用其他主题请自行调整。共享目录的处理机制与共享文件一致release 中的对应目录被移动到shared目录并替换为符号链接。特别地deploy:shared会先对shared_dirs做重复路径校验——若两个共享目录互为包含关系如img与img/cache会抛出 “Can not share same dirs” 异常见 recipe/deploy/shared.php避免产生冲突的符号链接。提示切换默认主题时务必同步调整shared_dirs与下文writable_dirs中的主题路径否则新主题的翻译/邮件目录将无法跨版本共享。配置三writable_dirs可写目录覆盖writable_dirs默认值如下recipe/prestashop.phpset(writable_dirs, [ img, log, cache, download, upload, translations, mails, themes/default-bootstrap/lang, themes/default-bootstrap/mails, themes/default-bootstrap/pdf/lang, themes/default-bootstrap/cache, ]);该列表在shared_dirs基础上增加了cacheSmarty 模板编译缓存与themes/default-bootstrap/cache主题缓存。deploy:writable任务会先在{{release_or_current_path}}下mkdir -p创建这些目录再按writable_mode赋予权限。writable_mode 权限模式writable_mode默认值为acl见 recipe/deploy/writable.php可选值如下模式行为适用场景acl默认使用setfaclLinux或chmod amacOS为 http 用户与部署用户授予rwX权限现代 Linux ext4推荐首选chown将目录属主改为自动探测的http_user传统主机目录归 Web 用户所有chgrp改属组为http_group并加grwx多用户协作环境chmod按writable_chmod_mode默认0755执行 chmod简单直接权限粒度较粗sticky设置属组与目录 sticky 位grwxs类 Unix 共享目录惯例skip不做任何权限变更已手工配置好权限的环境常用相关参数定义于 recipe/deploy/writable.phpwritable_use_sudo默认false权限命令是否加sudowritable_recursive默认false是否递归-R应用writable_chmod_mode默认0755chmod模式下的权限位writable_acl_groups默认[]额外授予写权限的用户组列表writable_acl_force默认false无 sudo 时强制重放 ACL用于修复深层嵌套目录http_user/http_group自动从进程列表探测apache/httpd/www-data/nginx失败时抛异常要求手动指定。deploy:writable会拒绝绝对路径writable_dirs中出现以空格分隔的/开头路径将抛出异常并始终基于 release/current 目录执行mkdir -p后再做权限设置见 recipe/deploy/writable.php。需要切换到chmod模式时可在deploy.php中配置set(writable_mode, chmod); set(writable_chmod_mode, 0775); set(writable_use_sudo, true);服务器目录布局与零停机原理首次部署成功后{{deploy_path}}下的结构如下可对照 docs/getting-started.md~/prestashop // deploy_path |- current - releases/1 // 指向当前版本的符号链接 |- releases // 历史版本目录 |- 1 // 最新 release |- config/settings.inc.php - ../../shared/config/settings.inc.php |- img - ../../shared/img |- ... |- shared // 跨版本共享的文件与目录 |- config/settings.inc.php |- img |- ... |- .dep // Deployer 内部状态锁、部署记录等零停机的关键在deploy:publish阶段的原子切换deploy:symlink使用ln -nfs必要时带--relative由use_relative_symlink自动探测见 recipe/common.php将current从旧 release 重定向到新 release。由于符号链接替换是原子操作切换瞬间旧版本仍对外服务切完后流量无缝落到新版本期间无任何请求中断窗口。Web 服务器只需将站点根目录指向current目录Nginx 示例见 docs/getting-started.mdPrestashop 在current下访问共享的img、settings.inc.php等资源即可。版本保留数量由keep_releases控制默认 10recipe/common.phpdeploy:cleanup会在每次发布后清理超出数量的旧 release。若新版本异常执行dep rollback即可让current指回上一版本——回滚同样依赖符号链接原子切换因此过程同样零停机。Prestashop 配方基于 common 配方天然继承了这一整套能力。实战建议与进阶配置缓存清理Prestashop 的 Smarty 缓存可能造成版本更新后页面不刷新可在deploy.php中新增自定义任务并在发布前清理缓存目录task(prestashop:clear-cache, function () { cd({{release_or_current_path}}); run(rm -rf var/cache/prod/* var/cache/dev/* 2/dev/null || true); })-once(); before(deploy:symlink, prestashop:clear-cache);部署构建与 CI在 CI 场景下可以借助deploy:update_code的子目录策略sub_directoryarchive 策略下有效只发布仓库内指定子目录生产环境依赖建议依赖deploy:vendors在服务器上以--no-dev --optimize-autoloader安装相关默认值见 docs/recipe/deploy/vendors.md。也可参考 docs/ci-cd.md 设计流水线。部署失败排查首次部署失败常见原因是deploy_path未设置或 SSH 密钥未配置deploy:writable报 “Cant detect http user name” 时手动设置set(http_user, www-data);ACL 模式缺少setfacl时按提示执行sudo apt-get install acl或切换为chmod/chgrp模式。小结Prestashop 配方本身极简约 46 行源码其价值在于精准的三组默认配置config/settings.inc.php与.htaccess跨版本共享、8 个业务目录持久化共享、11 个可写目录自动授权。配合 common 配方提供的deploy:prepare/deploy:publish任务链、符号链接原子切换与keep_releases清理机制即可在 Prestashop 项目上获得开箱即用的零停机部署与回滚能力。将dep deploy接入 CI 后每次提交都能以可重复、可回滚、可审计的方式发布上线。【免费下载链接】deployerThe PHP deployment tool with support for popular frameworks out of the box项目地址: https://gitcode.com/gh_mirrors/de/deployer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

使用 salt-api 命令为 Salt Master 启动网络 API 接口
使用 salt-api 命令为 Salt Master 启动网络 API 接口

使用 salt-api 命令为 Salt Master 启动网络 API 接口 【免费下载链接】salt Software to automate the management and configuration of infrastructure and applications at scale. 项目地址: https://gitcode.com/gh_mirrors/sa/salt salt-api 是 Salt 项目中负责为… · 2026/9/23 16:25:37

3步图解原理窥探内存泄漏,告别环境配置卡壳
3步图解原理窥探内存泄漏,告别环境配置卡壳

3步图解原理窥探内存泄漏,告别环境配置卡壳 配置环境就卡半天,重启十次还是报错?别急着骂娘,问题往往不在网络,而在你根本没看懂底层逻辑。很多开发者以为装个依赖就能跑,结果发现服务一开就崩,CPU… · 2026/9/23 16:25:37

Swift 严格内存安全模式(SE-0458)深入解读:`@unsafe`、`@safe` 属性与 `unsafe` 表达式实战指南
Swift 严格内存安全模式(SE-0458)深入解读:`@unsafe`、`@safe` 属性与 `unsafe` 表达式实战指南

Swift 严格内存安全模式(SE-0458)深入解读:unsafe、safe 属性与 unsafe 表达式实战指南 【免费下载链接】swift-evolution This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. 项目地… · 2026/9/23 16:25:30

Relay Client 3D 完整指南:基于客户端 Relay Resolvers 的数据驱动依赖
Relay Client 3D 完整指南:基于客户端 Relay Resolvers 的数据驱动依赖

Relay Client 3D 完整指南:基于客户端 Relay Resolvers 的数据驱动依赖 【免费下载链接】relay Relay is a JavaScript framework for building data-driven React applications. 项目地址: https://gitcode.com/gh_mirrors/relay29/relay Relay 的 Client 3… · 2026/9/23 17:09:18

雅虎邮箱注册逻辑拆解:3个高频面试题背后的源码真相
雅虎邮箱注册逻辑拆解:3个高频面试题背后的源码真相

雅虎邮箱注册逻辑拆解:3个高频面试题背后的源码真相 刚毕业那年,我盯着屏幕上的注册按钮发了十分钟呆。教程看了一堆,从 fetch 到 axios ,从 Promise 到 async/await… · 2026/9/23 17:09:12

SECS/GEM协议实战:基于secsgem源码的半导体EAP通信开发指南
SECS/GEM协议实战:基于secsgem源码的半导体EAP通信开发指南

简介:这份资源是面向半导体设备自动化领域开发者的 SECS/GEM 协议源码包,适合从事 EAP 系统开发、设备通信对接的工程师以及希望深入理解 SEMI 标准的进阶学习者。它解决了半导体设备与上层系统之间通信协议实现的问题,涵盖 GEM、SECS 与 HSM… · 2026/9/23 17:09:05

3天搞定Connie Carter手写实现与选型对比
3天搞定Connie Carter手写实现与选型对比

3天搞定Connie Carter手写实现与选型对比 配置环境就卡半天,这大概是每个刚接触 connie carter 相关工具链开发者最真实的崩溃瞬间。下载依赖报错、版本不兼容、文档过时,折腾一下午还没跑通Hello… · 2026/9/23 17:08:58

Linux运维Shell脚本实战:日志过滤、服务检查与资源监控
Linux运维Shell脚本实战:日志过滤、服务检查与资源监控

简介:这份PDF面向Linux运维工程师与Shell初学者,聚焦日常运维场景中的自动化脚本实践,帮助读者用脚本替代重复手工操作,提升排障与巡检效率。内容覆盖日志过滤与错误统计、服务健康检查、旧文件清理、文件与目录备份压缩、多主机循… · 2026/9/23 17:08:58

Java工时管理系统源码解析:数据模型、Spring Boot分层与二次开发实战
Java工时管理系统源码解析:数据模型、Spring Boot分层与二次开发实战

简介:这是一套基于 Java 的轻量级项目管理工具源码,项目代号 oak project,面向需要自建项目协作平台的中小团队与开发者,重点解决工时统计、原型分发和效果图管理三类协作痛点。工时模块支持员工上报,实时记录项目投入… · 2026/9/23 17:08:58

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

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

企业微信二维码