OpenShift云服务是Red Hat公司推出的一个面向开源开发者的PaaS(Platform-as-a-Service,平台即服务),2011年的“软件自由日”时,Red Hat公司曾在北邮做过OpenShift Express(OpenShift的免费版本)的校园宣讲,使我对这个产品产生了很大兴趣,于是打算在OpenShift平台上搭建一个应用试试。
OpenShift有很大的灵活性,可以支持Java,Ruby,PHP,Python的多种开发框架,因为我目前只会使用Python,所以我选择在OpenShift上搭建一个Django应用。
注册&登入OpenShift
首先,需要到OpenShift网站注册一个帐号https://openshift.redhat.com/
然后登入OpenShift,选择Express版本
安装rhc client tools
在Linux上,需要git,ruby 1.8以上版本,以及rubygems
然后执行命令:
su -c 'gem install rhc'
其他平台上的安装方法详见https://openshift.redhat.com/app/express#quickstart
创建一个域名
直接执行命令:
rhc-create-domain -n mydomain -l rhlogin
其中mydomain
是你想要创建的域名,以后你所创建的每一个应用将会有这样的URL http://appname-mydomain.rhcloud.com
,rhlogin
则是你的OpenShift登入邮箱
创建一个应用
这里有两种方法可以创建一个应用
一是命令行的方法,执行命令:
rhc-create-app -a appname -t apptype
appname
是你创建的应用名称,apptype
是你创建的应用类型,我这里想要创建的是Django应用,但是OpenShift并不直接提供Django应用的支持,因此我选择通过wsgi运行我的Django应用,所以我执行的命令就是:
rhc-create-app -a appname -t wsgi-3.2
UPDATE:OpenShift现在创建django应用的类型不再是wsgi-3.2,而是python-2.6,其他仍然保持不变,即:
rhc-create-app -a appname -t python-2.6
然后可以看到在当前目录下生成了一个以appname
命名的应用目录,说明应用创建成功。
另一种方法,在OpenShift的控制板直接创建应用,然后根据提供的git地址使用git clone在本地创建应用目录。
应用的提交
OpenShift使用git
提交和管理应用,因此提交应用非常方便,只需执行命令:
git commit -a -m "Some commit message"
git push
即可
Django应用的部署
关于Django应用的部署可以参照github上的示例django-example
两种方法:
如果直接使用示例程序开始构建,执行命令:
git remote add upstream -m master git://github.com/openshift/django-example.git
git pull -s recursive -X theirs upstream master
修改成自己的应用,然后提交:
git push
如果你想要将已有的Django应用部署到OpenShift上,只需将整个Django应用放在wsgi目录下,然后编辑wsgi目录下的application文件:
#!/usr/bin/env python
import os
import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'openshift.settings';
sys.path.append(os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi', 'openshift'))
virtenv = os.environ['APPDIR'] + '/virtenv/'
os.environ['PYTHON_EGG_CACHE'] = os.path.join(virtenv, 'lib/python2.6/site-packages')
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
execfile(virtualenv, dict(__file__=virtualenv))
except:
pass
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
其中的'openshift'是需要修改成你的Django应用的名称的 同时,需要在你的Django应用的settings.py文件前加入以下内容:
# Django settings for openshift project.
import os
# a setting to determine whether we are running on OpenShift
ON_OPENSHIFT = False
if os.environ.has_key('OPENSHIFT_REPO_DIR'):
ON_OPENSHIFT = True
PROJECT_DIR = os.path.dirname(os.path.realpath(__file__))
此外,整个OpenShift应用的setup.py也需要修改,将
install_requires=['Django>=1.3'],
这一行取消注释,然后提交。
这时你的Django应用已经可以通过http://appname-mydomain.rhcloud.com/
访问了
Django应用中静态文件的问题
在我们的应用中经常会使用到静态文件,比如CSS、图片等等,一般Django应用的静态文件的目录是在settings.py中配置的,但是OpenShift使用了不一样的方式,所有的静态文件都将被放置在wsgi/static目录下,然后通过编辑wsgi/.htaccess文件定义url rewrite规则:
RewriteEngine On
RewriteRule ^application/(.+)$ /static/$1 [L]
这样就可以通过诸如http://appname-mydomain.rhcloud.com/static/style.css
的方式引用wsgi/static目录下的静态文件了
Leave a Comment