概述
使用作为 Web 开发人员的您已经熟悉的语言和工具,开始在云中工作。在本教程中,将学习如何运行、修改、测试一个简单的 PHP 应用程序,并将其部署到云中。在将应用程序部署到 IBM 云开发平台 Bluemix 后,任何人都可以通过网络访问它。
本教程是 developerWorks 上的 “Bluemix 基础” 教程系列中的一篇文章。
您将在本教程中完成的任务
第 1 步.下载代码
第 2 步. 将应用程序部署到 Bluemix
第 3 步. 检查代码结构
第 4 步. 使用内置的服务器运行该应用程序
第 5 步. 修改代码并重新运行应用程序
第 6 步. 将更改后的代码部署到 Bluemix
测验时间!
结束语
让我们开始吧。
IBM Bluemix 是企业开发人员构建、运行、扩展和管理应用程序的地方。准备好开始在 Bluemix 上创建自己的应用程序了吗?本教程将介绍托管一个 PHP 应用程序的步骤。您首先要提供一个示例 PHP 应用程序,在本地系统上运行它,修改它的代码,然后将该应用程序部署到 Bluemix,以便任何在线的人都可以使用它。
本教程将简要概括如何使用 Bluemix。
您在云中运行自己的 Apache Web 服务器 实例来支持您的 PHP 应用程序。该服务器成功部署后,将继续运行,不会与任何人共享它。
您还将在您计算机上本地运行一个内置 PHP 服务器实例,并将应用程序加载到其中。使用此设置,可以快速测试和调试应用程序,无需连接网络和在每次执行更改后上传代码。
当您的代码能够在本地服务器上正常运行,而且您觉得已准备好与大家分享它后,使用 Cloud Foundry 命令行接口将您的应用程序上传到云中(图中的黑色虚线箭头表示的流程)。Bluemix 在 Apache 服务器的幕后使用 PHP 模块设置您的应用程序。然后,您的应用程序可以通过 Bluemix 提供,任何拥有浏览器的人都可以通过网络访问它。
完成本教程需要掌握的知识
- PHP 开发的实用知识
- 客户端/服务器系统基础和术语的一般知识
完成本教程所需的软件
- 一个 Bluemix 帐户(注册您的 免费试用版帐户 ,如果您已经有一个帐户,请 登录到 Bluemix )。
- 在您的计算机上安装以下软件:
- PHP 5.9 或更高版本。
- 一个文本编辑器 — 首选具有 PHP 语法突出显示的编辑器,比如 Sublime Text (可使用免费试用版本),还可以使用开源编辑器,比如 Atom 。
- Cloud Foundry 命令行接口 (CLI)。
阅读: CloudFoundry CLI 文档
第 1 步. 下载示例 PHP Web 应用程序
- 单击此按钮下载示例 PHP Web 应用程序:
下载示例 PHP Web 应用程序
- 将示例 PHP Web 应用程序保存到您的计算机并解压缩其中的内容,其中包括以下文件和目录:
- index.php ,主要程序,用于将传入的请求路由到 views 目录中的一个模板。
- vars.php 包含这个 PHP 项目中使用的变量。一个变量包含网站标题的文本。
- views 目录包含构成应用程序的 4 个页面的模板 — .tpl 文件。每个模板文件都可以包含动态元素,这些元素动态地呈现传入的请求。
- static 目录包含应用程序的所有静态资产,其中包括 CSS、图像和在浏览器上运行的客户端 JavaScript 代码。
第 2 步. 将该应用程序部署到 Bluemix
像大多数 PHP Web 应用程序一样,此应用程序可以立即部署到 Bluemix,无需执行额外的修改或配置。要将部署到 Bluemix:
- 如果尚未登录 Bluemix,请从您的 OS 命令提示符运行这些命令来进行登录:
cf api https://api.ng.bluemix.net/ cf login
-
运行下面这个命令,将应用程序上传到 Bluemix:
cf push <em>您的应用程序名称</em>
您为应用程序选择的名称必须在 Bluemix 上是唯一的— 未被其他任何 Bluemix 用户使用。如果该名称(被称为一个 路由 )已被使用,您会获得一个错误。
您刚才运行的命令:
- 将应用程序上传到 Bluemix
- 在 Bluemix 上运行针对 PHP 的 Cloud Foundrybuildpack
- 在 Bluemix 上启动一个 Apache Web 服务器实例,其中已加载 PHP 和您的应用程序
- 将一个路由映射到您正在运行的应用程序,该应用程序可以通过网络使用 URL https:// your app name .mybluemix.net/ 进行访问
- 在浏览器中打开 https:// 您的应用程序名称 .mybluemix.net/ 来试用该应用程序 — 一个名为 Lauren's Lovely Landscapes 的简单网络商店。该商店目前销售三种印刷品;每种印刷品的页面都显示了关联的名称、图像和价格。
- 停下来想一想。您刚才已经将一个正在运行的 Web 应用程序部署到云中!您需要使用
cf
命令行工具和一个 Bluemix 帐户。
请参阅术语表,了解此 buildpack 如何与 Bluemix 一起载入和部署您的应用程序的更多细节。
从下一步开始,将会检查和修改应用程序的代码。一个具有多选项卡支持的语法突出显示编辑器可以让您更轻松地处理多个 PHP 和模板源代码文件。
第 3 步. 检查代码结构
查看解压的 ZIP 文件爱你中的 views 目录。您会看到组成该网站的 4 个模板文件:
下图显示了该应用程序的工作原理:
每个针对 Lauren's Lovely Landscapes 商店的某个页面的 Web 请求都由您的代码路由到这些模板中的一个模板。在路由到模板时,您的代码会附加一个包含网站标题信息的 PHP 变量 $site_title
。每个模板都使用此对象呈现它的标题 ( Lauren's Lovely Landscapes
)。
在 index.php 中,可以看到将请求路由到某个模板所用的代码,以及一个包含来自 $site_title
对象的变量:
$lll_route = trim("$_SERVER[REQUEST_URI]", "/"); if (file_exists("views/$lll_route.tpl")) { ob_start(); require_once("views/$lll_route.tpl"); $lllpage = ob_get_contents(); ob_end_clean(); echo $lllpage; } elseif ...
在本例中,该代码首先从 URI 提取视图的基础名称,并将它加载到 $lll_route
变量中。然后它会检查 views 目录 (views/alaska.tpl) 下是否存在一个与路由名称(假设为 alaska, say)相匹配并包含 .tpl 文件扩展名的模板文件 (alaska.tpl)。
如果存在这样的 .tpl 文件,则会将它的内容读入到输出缓冲区中,并将它存储在 $lllpage
变量中。通过将该文件读入到输出缓冲区中,index.php 能够处理模板文件中的 PHP 代码。在将包含已处理的 PHP 代码的 HTML 页面加载到一个变量 ( $lllpage
) 中后,会使用 echo
命令发送到浏览器。
如果检查其中一个模板(比如 alaska.tpl),就可以看到使用了 $site_title
PHP 模板变量来呈现该标题:
<head> <title> <?php echo $site_title; ?> </title> ...
第 4 步. 使用内置的服务器运行该应用程序
从 PHP 5.4.0 版开始,每个 PHP 安装都包含一个内部 Web 应用程序。这个极小的服务器使得 PHP 应用程序的编码、测试和演示得到大大简化。您不必再为了在 PHP 中进行编码而设置和配置 Apache 或 Ngnix 服务器。
现在,您已经准备好在计算机上本地运行该应用程序:
-
在应用程序的根目录下,运行:
php -S localhost:8000
- 在浏览器中访问本地服务器:http://localhost:8000/。
- 试用应用程序的这个实例,看看是否会发现与 Bluemix 托管的应用程序不同的地方。因为您查看的是用相同代码生成的同一个应用程序,所以二者之间应该没有明显的区别。
第 5 步. 修改代码并重新运行应用程序
在这一步中,您将修改印刷品的价格,查看它是否会立即在本地运行的网站上更新。
- 在文本编辑器中打开 antarctica.tpl 文件,在源代码中查找价格。
- 将价格从
100.00
更改为 80.00
并保存该文件。更改的行应类似于: <div id="price">80.00</div>
-
再次在本地运行该应用程序:
php -S localhost:8000
- 在浏览器中访问 PHP 服务器。
- 选择 Antarctica 印刷品,您可以注意到,印刷品的价格已发生更改。
第 6 步. 将更改后的代码部署到 Bluemix
要让网络上的每个人都知道 Antarctica 印刷品的新价格,需要将更改后的应用程序部署到 Bluemix。
提示:您还可以指定 Bluemix 应向您的应用程序分配多少内存。例如,要设置 128 MB 的内存,可以使用:
cf push -m 128M 您的应用程序名称
在第 2 步中,您看到了将 PHP 应用程序部署到 Bluemix 是多么简单。再次从您代码的根目录中运行此命令:
cf push <em>您的应用程序名称</em>
成功部署后,在任何 Web 浏览器中访问以下链接来试用该应用程序:
https:// 您的应用程序名称 .mybluemix.net/
术语表和状态消息
让我们来看看在使用 Bluemix 时可能遇到的一些术语和状态消息。
术语表
- Droplet : 已准备好在云中部署的程序包,包含除操作系统外的一切资源(例如一个包含 JVM、Liberty 配置文件服务器和您的应用程序的程序包)。
- Buildpack : 一个可执行程序,它获取您推送的代码或打包的服务器,并将其捆绑到 droplet 中。
- 清单 : 一个可以添加到您项目中的可选文件,名为 manifest.yml。清单文件配置会影响部署的服务器的各种参数 — 包括内存大小、在部署期间使用的 buildpack、所需的服务、使用的磁盘空间,等等。对于简单的 PHP 应用程序,不需要清单文件;系统会自动检测和使用 Cloud Foundry buildpack 并应用默认配置。
阅读: 使用应用程序清单文件进行部署
- 载入(staging) : 由 buildpack 处理的过程,将您上传的内容与系统组件和依赖项一起捆绑到一个有效的 droplet 中。
- Droplet 执行代理 (DEA) : 负责重构 droplet 并在云中运行您的应用程序的系统部分。
- Warden : 一种确保您的应用程序已与其他运行的应用程序隔离并受到保护的机制。
状态消息
在发出 cf push
CLI 命令时,您会看到一系列状态消息。如果仔细查看,就会看到以下相继短语:
- Your push successfully uploaded the app source code to the staging area.(您的推送已成功将应用程序源代码上传到载入区域。)
- If an existing instance of your app is already running, it's stopped before staging begins.(如果您应用程序的一个现有实例已在运行,它会在载入开始之前停止。)
- The buildpack starts the staging process, which can include:(buildpack 启动载入过程,这可能包括:)
- Downloading and installing various system components (Apache web server and PHP module for Apache, for example)(下载并安装各种系统组件(例如 Apache Web 服务器和用于 Apache 的 PHP 模块))
- Downloading and installing runtime tools(下载并安装运行时工具)
- Putting your app into place(将您的应用程序放入适当位置)
- Setting up the environment(设置环境)
- Bundling everything up to create the droplet(捆绑所有资源来创建 droplet)
为了加速这些步骤,载入过程会使用大量缓存,所以您可能也会在消息组合中看到一些有关从缓存重用的消息。 - The DEA tries to start your app from the droplet, running under supervision of a warden (container).(DEA 尝试从 droplet 启动您的应用程序,并在一位管理人的监督下运行(容器)。)
测试
测试您在本教程中学到的知识。答案在下方。
- 在将 PHP 应用程序部署到 Bluemix 之前,必须在系统上安装 5.4.0 及更高版本的 PHP。
- 对
- 错;任何 PHP 版本都可以
- 错;完全不需要安装 PHP
- PHP 内置 Web 服务器很有用,因为:
- 它比旧版 Apache Web 服务器更加强大和功能更丰富
- 它集成了 Bluemix,使通过网络托管应用程序变得很容易
- 它的命令行非常短
- 上述所有选项
- 上述所有选项都不是
- 您为 Lauren's Lovely Landscape Bluemix 部署选择的应用程序名称必须:
- 较长且听起来很重要
- 简明扼要
- 在您的其他所有应用程序中是唯一的
- 在同一个数据中心中的所有应用程序中是唯一的
- 未被全世界的其他任何 Bluemix 用户使用
- 在您推送应用程序后,Bluemix 在载入期间创建的适合运行的程序包被称为一个:
- Bluemix dropping
- Mullet
- Droplet
- 适合运行的程序包
- Bluemix zip 文件
- 在 Bluemix 状态消息中,术语 载入 指的是:
- 一场百老汇戏剧
- 一个由 buildpack 处理的捆绑流程,生成一个 droplet
- 加载一个 buildpack
- 部署之前的验证流程
- 您应用程序在实际部署到云之前的一次模拟应用程序
测试的答案
1. c,2. e,3. e,4. c,5. b
结束语
在本教程中,您:
- 使用了 Cloud Foundry CLI 将 PHP 应用程序从源代码部署到 Bluemix
- 了解了 Lauren's Lovely Landscapes PHP Web 应用程序的结构
- 修改了应用程序代码,并使用了 PHP 的内置服务器在本地运行和测试修改后的应用程序
- 使用了 Cloud Foundry CLI 将修改后的代码重新部署到 Bluemix,并通过网络测试了该应用程序
现在通过下一篇教程在 developerWorks 上继续学习 “Bluemix 基础”。您将学习如何为 PHP 应用程序设置团队协作和自动化部署:
为 PHP 应用程序设置 DevOps
更多 Bluemix 资源
要获取源源不断的教程和技术资源流来帮助您使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的Bluemix 资源中心。