【编者按】一直想申请一个免费的托管空间,国内找了一圈sinaapp还算差强人意,但是对于python不以安装C extension的包,而且SAE的一整套流程用起来感觉很不爽,而openshift的平台的工作流更适合一般开发人员的思维模式(我是针对Python,其他语言没有试过没有发言权),鉴于国内关注得还比较少,我把自己注册到开发的经验记录下来,希望对需要的人有所帮助。
Openshift是RedHat公司的一款平台云产品,openshift.com是由RedHat公司维护的一个公有平台云服务平台,提供基础的语言环境、数据库以及其他运维相关的环境。用git实现自动部署,免费用户可以得到1GB的空间,流量无限制。因为RedHat服务器在国外,访问国外的网站速度也会有优势。特别是管理端,可以通过ssh直接登录上去进行调试管理,使用十分方便。语言方面,支持Java、Python、Ruby、Perl、PHP、Node.js等主流的编程语言。
缺点嘛,国外的网站,管理端访问速度确实有点慢,做出来网站的访问速度感觉还可以,当然现在我做的规模还比较小,但对于个人做点事情(比如爬虫)感觉还是可以的。
到Openshift官网点SIGN UP FOR FREE,不过,那个验证码是从google取的,不的话看不到验证码,不过仅注册的这一次验证码,注册完再登录不需要便可以正常登录。
注册可能会发你一封验证邮件,点一下验证邮件里的链接即完成注册,然后便可以用此用户登录使用了。
用你刚注册的用户登录,到 http://www.openshift.com 点击右上角MY ACCOUNT里的WEB CONSOLE菜单登录。登录上去可以看到你的控制台,点击下面的Add Application按钮即可新建一个应用:
点击完后需要你选择应用的类型,比如你可以选择python2.7,当然你也可以选择python3.3,选择完后会让先让你给应用起个名称,名称都会加上你的用户名后缀。
其它的选项暂时可以不用改,点击最下面的Create Application按钮,这个应用便是创建完成了。每个免费的用户可以创建3个应用,每个应用1GB的存储空间,包括数据库和语言相关包以及你的所有的程序文件共享这1GB的空间。点完Create Application后可以看到一些提示信息,不管它直接Continue即可。
服务端会给你的应用建立一个python的virtualenv,你的程序在此virtualenv中运行。
现在你的应用已经可以通过WEB进行访问了,生成的时候会自动生成一些默认的代码。
点击你的应用后面有个图标,可以为应用添加一个数据库,我选择用postgresql9.2,后面再介绍如何进行数据库访问。
rhc是Openshift的客户端管理程序,利用它可以不必每次都登录到Web控制台上去点鼠标。Ubuntu/Debian可以直接在其官方源里搜索rhc并安装,RHEL/Centos下可以用gem install rhc来,需要系统安装了Ruby和Git。
首次运行rhc需要先进行初始化,rhc setup
,按照提示输入账户和密码进行初始化后,系统会生成一个token,下一次便不用再输入了,这个token也是有一定有效期的,过期之后还要重新输入密码,以下所有的rhc命令均是。
rhc git-clone mytest
我觉得Openshift一个很赞的用法是可以通过ssh远程登录到你的主机平台,有些操作(比如安装Python包,比如看一下远方的环境变量设置,比如看一下远端数据库里的内容(当然Mysql数据库可以通过PhpMyadmin来看)等可以直接登录上去用。
rhc ssh <appname>
登录上去后你可以运行env看一下其中的环境变量,其中有几个要用得到的。
如果在本地环境中模拟远端的运行,则可以通过设置上述环境变量使其指向本地的路径即可。
克隆到本地的代码可以在本地进行修改,用Git进行版本管理,如果需要部署,可以通过git push的形式部署:
git push origin master
两点注意的是:
1. 如果有python依赖包需要安装,则可以在代码的根目录下建一个requirements.txt
的文件,里面把依赖的包名称写上,这样每次你push的时候,服务端总会检查一下系统中是否安装了这些包,如果没有安装,则会在部署时用pip进行安装。
1. 如果想要在远端运行程序(比如初始化数据库)除上直接ssh上去运行外,也可以在.openshift/action_hooks目录下添加一个deploy的可执行脚本,这样在你git push进行部署的时候会自动调用这个脚本。
rhc scp mytest upload initial.sql $OPENSHIFT_REPO_DIR/
rhc scp mytest download ./ $OPENSHIFT_DATA_DIR/test.log
以上两条命令一是向mytest应用的服务端拷贝文件,第二条是从远程下载文件。
刚才讲的是用Web的方式创建app,你也可以直接用rhc的方式创建:
rhc app-create mytest python-2.7 postgresql-9.2
即完成刚才Web界面点击的那套东西。
rhc apps
rhc tail <appname>
还有一些用法可以参见rhc的帮助:
rhc help
可以在远程部署定期运行的程序,可支持按分钟、小时、天、月、周等不同的周期定期运行程序,比如你可以在上面部署爬虫。
可以运行rhc cartridge-add cron -a
为你的程序启用cron。
然后将需要定期运行的脚本放在.openshift/cron/相应的目录下,并把其权限改为可执行的即可。
有这么个资源用来部爬虫我觉得还是挺不错的,当然了,数据量超过1GB的话可能会有问题。
scrapy
。由于国内直接用rhc访问Openshift有些慢,一点技巧:
nohup pip install -r $OPENSHIFT_REPO_DIR/requirements.txt > /dev/null &