发布于 2015-12-06 07:23:04 | 271 次阅读 | 评论: 0 | 来源: 网络整理
部署的过程是一个复杂且多样的任务,它依靠于您应用的设置及需求的任务。本文不是按部就班的指导,而是一个关于部署大部分的需求和想法的大概的列表。
在部署一个 Symfony 应用时采取的典型步骤包括:
加载您的代码到成品服务器;
安装您的供应商依赖(基本上通过 Composer 完成也可能是在加载前就完成);
运行数据库迁移或者相似的任务来更新任何发生变化的数据结构;
部署也可能包括其他任务,例如:
标记一个特别版本的代码作为您源代码控制存储库;
创建一个临时的集结待命区来创建您的更新设置“脱机”;
运行任何可用的测试来确保代码和/或者服务器的稳定性;
从 web/ 目录中移除任何不必要文件来保持您的生产环境的洁净;
部署 Symfony 应用程序有几种方式。首先从一些基本的部署策略开始然后由此开始创建。
部署应用程序的最基本的方式是通过 ftp/scp (或相似的方法)手动复制文件。此方法也有弊端,因为您缺少在升级进度中对系统的控制。这个方法同样也需要您在转移文件后采取一些手动步骤(参见 Common Post-Deployment Tasks)
如果您正只用源代码控件(例如 Git 或者 SVN),您可以通过安装现场储存库的副本来简化。当您准备去升级的话这非常简单,只需从您的源代码控制系统中获取最新的更新即可。
这会使您的文件更新更简单,但是您仍然需要担心手动采取其他步骤(参见 Common Post-Deployment Tasks)。
同样也有工具来减轻部署的负担。其中的一些明确符合 Symfony 的要求。
这个基于 Ruby 的工具在 Capistrano 顶端提供了一整套专门的工具,专门针对 Symfony 项目定制。
帮助您为您的 Symfony 项目创建一个本地 Debian 包装。
这个如同 Capotrano 的部署工具在 PHP 中创建,并且或许对于 PHP 开发者延伸他们的需要来说更简单一点。
这个基于 Python 的库提供了一套操作的基本套件,来执行当地的或者远程的 shell 命令,还有加载/下载文件。
Bundles
有一些 bundles 可以直接添加部署特点到您的 Symfony 控制台上。
基本脚本
您当然可以使用 shell, Ant 或者任何其他创建工具来编写您项目的部署脚本。
作为服务提供者的平台
Symfony Cookbook 包括一些最著名的服务(PaaS)提供商的平台的细节文章:
• Heroku
在部署了您实际的源代码之后,有许多您需要做的常规的事情:
检查您的服务器是否在运行中符合要求:
$ php app/check.php
这个文件不应被部署,而是通过由 Symfony 提供的自动工具管理。
您的供应商可以在转移源代码之前进行升级(例如:升级 vendor/ 库,然后利用源代码进行转移)或者之后在服务器上升级。另一种方式就是,直接按平常的做法升级您的供应商。
$ composer install --no-dev --optimize-autoloader
--optimize-autoloader 标记通过创建一个“类映射”显著地提高了 Composer 的自动装载机性能。--no-dev 标记确保开发软件包不安装在生产环境中。
如果您在此步骤中得到“未找到类”错误,您可能就需要在运行此命令前运行 export SYMFONY_ENV=prod 从而使 post-install-cmd 脚本在 prod 环境中运行。
确保您清除(并预热)您的 symfony 缓存:
$ php app/console cache:clear --env=prod --no-debug
如果您正在使用 Assetic,您同样要清除您的资产:
$ php app/console assetic:dump --env=prod --no-debug
您需要做的事情还有很多,取决于您的设置:
运行任意数据库移植
清除您的 APC 缓存
运行 assets:install (已在 composer install 中处理)
添加/编辑 CRON 工作
推动资产到 CDN
虽然此条目涵盖了部署的技术细节,从开发到生产代码的完整生命周期或许需要更多的步骤(考虑部署到筹划,QA(质量保证),运行测试,等等)。
分段、测试、QA、持续集成、数据库合并以及回滚功能是防止失败而强烈建议使用的。有一些简单的以及更复杂的工具可以让部署像您环境所要求的那般简单(复杂)。
不要忘记部署应用程序同样包括更新任何依赖项(一般通过 Composer),合并您的数据库,清除您的缓存以及其他潜在的东西,如推动资产到 CDN 上(参见 Common Post-Deployment Tasks)。