13. 服务器与部署

未匹配的标注

部署 PHP 应用程序到生产环境中有多种方式。

平台即服务 (PaaS)

PaaS 提供了运行 PHP 应用程序所必须的系统环境和网络架构。这意味着几乎不用做什么配置就可以运行 PHP 应用或 PHP 框架。

现在,PaaS 已经成为一种部署、托管和扩展各种规模的 PHP 应用程序的流行方式。你可以在我们的 资源区 查看 PHP PaaS “平台即服务” 提供商

虚拟或专用服务器

如果你喜欢系统管理员的工作,或者对这方面感兴趣,虚拟或者专用服务器可以让你完全控制自己的生产环境。

nginx 和 PHP-FPM

PHP, 通过 PHP 内置的 FastCGI 进程管理器 (FPM), 可以很好的与轻量级的高性能 web 服务器软件 nginx 一起工作。 Nginx 比 Apache 占用更少内存并且处理更多的并发请求,这对那些没有太多内存的虚拟服务器特别重要。

Apache 和 PHP

PHP 和 Apache 有很长的共同工作历史. Apache 有很强的可配置性和大量的 模块 可扩展功能。它是共享主机的常见选择,并且很容易为诸如 WordPress 的 PHP 开源框架进行配置。可惜, Apache 不能处理非常多的访问请求,而且会比 nginx 消耗更多的资源。

Apache 有多种方式运行 PHP,使用 mode_php5 是 prefork MPM 最简单常见的方式。虽然它对内存的利用效率并不高,但它是最容易使用的,如果你不想深入研究服务器管理方面,那么这种方式可能是你最佳选择。需要注意的是如果你使用 mod_php5 ,就必须使用 prefork MPM。

如果你追求更高性能和高稳定性的 Apache ,可以选择与 nginx 类似的 FPM 系统 worker MPM 或者 event MPM,它们分别使用 mod_fastcgi 和 mod_fcgid。这种方式将显著提高内存效率和速度,但是配置也相对复杂一些。

如果你运行的是 Apache2.4 或更高版本,则可以使用 mod_proxy_fcgi ,可以通过简单的设置就获得出色性能。

共享主机

PHP的流行很大程度上要归功于共享主机。你基本找不到没有安装PHP的共享主机,不过最好要用最新的PHP版本。 共享主机是把您和其他开发者的网站一起部署在一台服务器上。这样做的好处是价格便宜。缺点也很明显,就是你永远不知道其他开发者的程序会给你造成什么影响,还有服务器负载高、安全漏洞等都会对影响你程序的稳定性。 如果你的项目预算充足,应该尽量避免使用共享主机。

要确保您的共享主机是最新版本的PHP,可以查看 各个共享主机PHP版本.

构建和部署您的应用程序

如果你发现每次发布部署新版本都是手动上传文件、手动修改数据库结构以及手动测试程序, 请慎重! 手动操作很容易出错。 无论您是做最简单的文件上传、迭代更新或者完整版本的发布,请考虑自动化部署 。

您可能希望自动化的任务包括:

  • 依赖管理
  • 编译压缩你的静态资源
  • 运行测试
  • 创建文档
  • 打包
  • 部署

部署工具

部署工具可以看做部署任务中常见的脚本集合。部署工具不是你软件系统的一部分,它一般在外部帮助实现自动化部署。

有很多可用的开源工具可以帮助你自动构建和部署,这些工具中有的是用 PHP 编写的,有的不是。应该根据你的实际项目来选择最适合的工具,不要让语言阻碍了你使用这些工具。如下是一些例子:

通过 Phing 你可以控制打包,部署或者测试,只需要一个简单的 XML 构建文件。Phing (基于Apache Ant) 提供了在安装或者升级 web 应用时的一套丰富的任务脚本,并且可以通过 PHP 编写额外的任务脚本来扩展。它是一个可靠而健壮的工具,并且已经存在很长一段时间。由于是使用 XML 文件处理配置,有的时候会被认为有一点过时。

Capistrano 是一个为 中高级程序员 准备的系统,以一种结构化、可复用的方式在一台或多台远程机器上执行命令。对于部署 Ruby on Rails 的应用,它提供了预定义的配置,不过也可以用它来 部署 PHP 应用 。如果要成功的使用 Capistrano ,需要一定的 Ruby 和 Rake 的知识。

Ansistrano 是一对Ansible角色,用于轻松管理 PHP、Python 和 Ruby 等脚本应用程序的部署过程(部署和回滚)。它是 Capistrano 的一个 Ansible 端口。它已经被相当多的 PHP 公司使用。

Rocketeer 从 Laravel 框架中得到了很多灵感。 目标是默认智能化配置、高速、优雅的自动化部署工具。他支持多服务器,多阶段,并行部署等功能。工具的扩展性极强,一切都支持热插拔扩展,并且是由 PHP 编写。

Deployer 是一个用 PHP 编写的部署工具,它很简单且实用。并行执行任务,原子化部署,在多台服务器之间保持一致性。为 Symfony、Laravel、Zend Framework 和 Yii 提供了通用的任务脚本。推荐阅读 Younes Rafie 的博文 快速使用 Deployer 部署 PHP 应用,该博文是此工具的绝佳教程。

Magallanes 是另一个由 PHP 编写的自动化部署工具。使用 YAML 作为配置信息,支持多服务器和多环境,自动化部署。并且自带了许多通用的任务,可用于常见的工具和框架。

扩展阅读:

服务器布置

在多台服务器的场景下,管理服务器系统配置信息将会是一个令人棘手的事情。接下来介绍几种工具来让你自动化这些工作,以确保你得到了正确的服务,并且服务器配置无误。一般情况下,一些大型的云托管商(如:Amazon Web Services, Heroku, DigitalOcean 等)会集成自动化管理工具,这使得扩展应用程序变得更加容易。

Ansible 让你使用 YAML 配置文件来管理你的服务器基础设施。入门简单,能支持复杂和大型应用场景。支持 API 来动态管理云主机实例,可以使用某些工具通过动态库存机制来管理它们。

Puppet 是一种具有自定义语言和文件类型的工具,用于管理服务和配置信息。它支持主从结构或者是 无主结构。在主从结构模式中,客户机将按设定的时间间隔轮询中央主机以获取新配置,并在必要时进行自我更新。在无主结构模式中,你需要将更改推送到节点。

Chef 是一个基于 Ruby 的强大的系统集成框架,可以使用它构建整个服务环境或虚拟机。Amazon Web 提供一个叫 OpsWorks 的服务将其很好地集成进去。

延伸阅读:

持续集成

持续集成是一种软件开发实践,团队成员频繁集成他们的工作,通常每个人至少每天集成一次,因此每天都会有许多的集成。许多团队发现,这种方法大大减少了集成问题,并帮助团队高效地开发更内聚的软件。

– Martin Fowler

有许多方式可以实现 PHP 的持续集成。Travis CI 在持续集成上做得相当出色,即使对于小项目也是如此。Travis CI 是一个托管的用于开源社区的持续集成服务。它可以和 GitHub 很好地集成,为包括 PHP 在内的多种语言提供一流的支持。

延伸阅读:

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
Summer
贡献者:6
讨论数量: 0
发起讨论 只看当前版本


暂无话题~