1.前言
Cloud Foundry是业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。Cloud Foundry平台可从Cloud Foundry Foundation作为开源软件获取,也可从众多商业服务供应商处作为软件产品或软件服务获取。
本文是作者在学习Cloud foundry的应用部署记录,给自己留做参考,演示了在云平台Pivotal Web Services (PWS)部署Django框架的python应用的过程。PWS是Pivotal公司提供的公有云服务,其底层架构Cloud Foundry,其他同类型平台操作与之类似。
部署过程中请参考Pivotal官⽅⽂档 或 Cloud Foundry官⽅⽂档以了解更多。
2. 部署条件
2.1设备要求
向Cloud Foundry部署应用对于设备没有显要的条件要求,一般电脑均可实现。对操作系统依赖较小,Linux,MacOS和Windows下都能完成部署且操作相同。
2.2支持应用类型
Cloud Foundry目前支持的应用类型有Binary,GO,HWC,Java,.NET,NGINX,NODE.js,PHP,Python,R,Ruby,Staticfile。
2.3平台服务
不同商业平台的服务费用标准不同,手册演示所使用的是PWS的免费服务,也是我在多种尝试后体验最好的部署方法,最高提供2G运行内存,可以满足小型应用的需求。
3.部署过程
3.1平台注册并登录
注册账号
在Pivotal官网(https://account.run.pivotal.io/z/uaa/sign-up)注册帐号。
建立架构
登陆PCF平台,选择PWS。打开PWS管理界面创建组织org,默认space为development,我们的应用将要部署在space下。整体架构如下所示:
--org
--space
--app
3.2本地环境准备
安装cf cli
CF CLI(Cloud Foundry Command Line Interface)是CF的终端管理工具,我们部署应用的执行命令由此提供。根据操作系统的类型,可在PWS管理界面下方Tools或者在Cloud Foundry的github页面(https://github.com/cloudfoundry/cli#downloads)选择安装方式进行安装。
安装完成之后,打开cmd,执行命令cf可检查是否安装正确。
本地运行环境
建议安装好能够运⾏应⽤的本地环境,以便进⾏调试,部署应用前需要确保本地运⾏没有问题,以提高部署的成功率。
3.3准备应用
须知
本文仅以展示了Django框架的python应用,如果需要部署其它类型的应用或有更多的需求,请在官方文档https://docs.cloudfoundry.org/buildpacks/对应类型的buildpacks查看部署要求,而不能直接套用该手册。
配置文件
在项目根目录下新建文件:
① requirements.txt
在该文件中列出运行所需要的依赖文件以及版本号。
使用Pycharm在终端执行pip freeze>requirements.txt即可,需要注意版本兼容性等问题,如2.1后的Django不再⽀持MySQL 5.*。
② Procfile
由于python_buildpaack缺少应用的启动指令,需要在该文件内自行填写,例如:
#按照示例需要在requirementst.txt添加gunicorn
③ runtime.txt
在runtime.txt中标明python版本,注意所用的Buildpack是否⽀持该版本,可在⽂档中查询。
④ mainfest.yml
该文件用用来描述部署在CF上应用的配置信息,部署过程中将自动从该文件中获取。此⽂件提供了众多⾃定义设置,包括名称、内存分配额、实例数量等等,示例中的内容是必要的。关于mainfest.yml更多内容⻅⽂档:https://docs.cloudfoundry.org/devguide/deploy-apps/manifest-attributes.html
修改端口
Host地址改为0.0.0.0,port需要从$PORT环境变量中获取。可以在manage.py中添加:
3.4使用cf cli进行部署
登录
运行cf login -a https://api.run.pivotal.io
分别输⼊刚刚注册的账号和密码,选择要部署的org和space。使⽤cf help -a可以显示所有命令。
Push
在应⽤根⽬录下运行cf push,等待一段时间,cf cli会自动进行上传和依赖的安装。
运行cf push -help可以显示push的更多使⽤⽅法。如果遇到FAILED,可以参照下节内容进行调试。
3.5调试
利⽤⽇志logs进⾏debug
cf logs [name_of_your_app] --recent
日志记录了应用部署时的详细过程,绝⼤多数失败的原因都可以在这里中找到,修复后重新push即可。
常见问题
① 数据库配置
使⽤远程数据库时确保settings.py中的database设置正确,若切换需要重新进行makemigratinos和migrate。
还可以使⽤平台提供的数据库服务。对于mysql来说,登陆平台后,在Marketplace⻚⾯搜索ClearDB,选择⽅案,绑定部署的应⽤。
打开平台的应⽤界⾯,在Service中找到ClearDB,点击View Credentials可获取远程连接数据库的地址、账号等信息。
② 未开放其他hosts访问
③ 静态文件地址
如果push中没有报错,并且看到了这样的画面,那么恭喜你,应用已经部署成功了。在此处和Pivotal平台管理界面都可以看到应用的运行情况。
点击view app打开应用(routes格式为https://appname.cfapps.io)以检查验证。