支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
部署Symfony可能是一个复杂和多样的任务,取决于你的程序的设置和需求。本文并非手把手的指南,而是罗列了部署时的常见需求和建议。
发生在部署Symfony时的典型步骤包括:
部署过程还包括其他任务,诸如:
web/
目录删除任何不必要的文件以保持生产环境干净;部署Symfony程序时有几种方式。始于一些基本的部署策略,然后从那里开始。
部署一套程序最基本的方式是通过FTP/SCP(或类似方法)手动拷贝文件。其欠点是,比如在升级过程中,你缺少对系统的控制。这种方法也需要你在文传输之后执行一些手动步骤(参考 常见的后部署任务)。
如果你使用了版本控制(比如Git或SVN),你可以直接把现场安装(live installation)做成你repository的一个拷贝。当你已经准备好升级时,简单到如同从版本控制系统中取出最新的更新一样。
这令你的文件更新变得 更容易,但你仍然需要考虑手动执行其他步骤(参考 常见的后部署任务)。
鲜少使用 有相关需求的用户,请参考Symfony官网原文。另,现代云平台,比如微软Azure,都可以一步支持Symfony3+。
不同的服务供应商之间,特殊的部署步骤十分多样化,因此从以下独立文章中查找你所选择的服务:
有几种工具可以帮助减轻部署时的痛苦。其中的一些几乎是为Symfony的需求而量身定制的:
在部署了你的真正源代码之后,有一些常见事项需要你来做:
运行以下命令以检查服务器是否满足需求:
1 | $ php bin/symfony_requirements |
此文件 不应 被部署,而是被Symfony提供的一个自动工具来管理。
你的vendors(三方包儿)可以在上传源代码之前进行更新(比如更新 vendor/
目录,然后再传源代码)或是到服务器上完成更新。不管哪种方式,只需像往常一样来更新vendors:
1 | $ composer install --no-dev --optimize-autoloader |
通过构建一个 "class map" 类映射,--optimize-autoloader
旗标大幅改进了Composer的自动加载性能。--no-dev
旗标可确保开发环境的包不被安装到生产环境。
如果在这一步你得到 "class not found" 错误,你可能需要在执行前述命令之前先运行 export SYMFONY_ENV=prod
以便 post-install-cmd
脚本运行在 prod
环境下。
确保清除(以及warm-up)了你的Symfony缓存。
1 | $ php bin/console cache:clear --env=prod --no-debug |
如果你使用了Assetic,你需要剥离出assets:
1 | $ php bin/console assetic:dump --env=prod --no-debug |
assets:install
(已经在 composer install
过程中被打点好了)虽然本文覆盖了部署过程的技术细节,但是代码从开发到生产时的完整生命周期可能需要更多步骤(考虑staging部署,QA[Quality Assurance/质量保证],运行测试,等等)
staging、测试、QA、持续整合(continuous integration),数据库迁移以及失败时的向下兼容,统统被强烈建议。有各种简单或复杂的工具,其中的某一款会令你的部署在满足环境需求的过程变得容易(或老练)。
别忘了在部署过程中也牵扯到更新依赖(一般通过Composer),迁移数据库,清除缓存以及其他潜在事项,诸如将资源发布到CDN(参考 常见的后部署任务)。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。