Openshift 是 RedHat 推出的 PaaS. 从 wr 那里听说的, 这几天一直在玩儿, 感觉很不错, 相比一直以来在压榨的 gae 来说, 更自由, 更像个 vps, 没有明确的配额限制, 用 git 直接提交, 有多个数据库可选, 有简单的 ssh 等等. 简单记录一下, 方便再折腾.
首先在 https://openshift.redhat.com/app/ 注册, 看看首页上的那些语言, 总有一门适合你!
进入后, 可以在 web 上建立 app, 选择语言和平台就好了.
点进去 app 的管理页面, 没有意象之中的繁杂的各种管理选项, 只列出了当前用的语言和本项目的 git 地址. 等等, 这里还有一个隐藏功能, 就是添加 cartridge. 点右上角那个加号, 可以看到可以添加 MongoDB, MySQL, PostgreSQL 这几个数据库和对应的管理界面 RockMongo, PhpMyAdmin, 还有 Cron 可以定时执行任务, 还有个废柴的 Openshift Metrics 会显示 cpu 和 mem 消耗, 最后还有个不明真相的 Jenkins Client. 这个界面不能显示安装了的 cartridge 的端口啊密码啊等信息, 也不能删除 cartridge, Orz.
言而总之, web 界面就是个摆设, 牛逼的工具都在叫 rhc 的命令行工具包里. 在下面链接里有 mac, win, linux 下的安装指南. 看到上面说 win 下需要 Cygwin, 原来觉得这个挺好, 现在觉得挺不伦不类的, 还不如直接到 linux 里折腾. Arch 里 AUR 里就有 rhc, 可以看出丫其实就是一个 Ruby gem, 安装过程也主要就是补齐 gems 依赖: ruby-rest-client, ruby-parseconfig, ruby-json.
在 web 上创建 app 时, 应该就已经让你选一个 domain 做为 app 的后缀了, 不得不说又长又难看. 下面举例说明一下命令用法.
console 下创建 domain, 即使在 web 端做了, 本地也有必要做一下:
1
|
rhc domain create -n $NAMESPACE -l $USERNAME
|
会在 ~/.ssh 下生成 libra_id_rsa.pub 文件, 可在 web 的 My account 页面加入 public keys.
创建 app:
1
|
rhc app create -a $APPNAME -t python-2.6
|
app 这个子命令下还有 start, stop, tail, add-alias, cartridge 等有用的子命令, 用法类似. add-alias 可以绑定域名, tail 可以看 log, 这个超有用, cartridge 下 又有 add, remove 等子命令可以操作 cartridges.
git clone 一下 app 的 git 地址, 会得到一个如下的目录(以python为例):
1
2
3
4
5
6
7
8
9
10
11
12
13
|
.
|-- .git/
|-- .gitignore
|-- .openshift/
|-- data/
|-- libs/
|-- README
|-- README.md
|-- setup.py
`-- wsgi/
|-- application
`-- static/
`-- README
|
README 必读, 有各目录的用法, 一些有用的环境变量. wsgi/ 目录里放代码, application 是主程序, 如何修改参见下面链接里的例子. wsgi/static/ 目录里放静态文件, 放进去后代码里用 href='/static/...' 就行了. data 和 libs 尚不会用. setup.py 文件里可以配置 install_requires 项包含项目所需的包如 pymongo, bottle, django, 尚不知那些包可自动安装.
app 的 git 地址里的那个 ssh 可以直接登录的! 有 .git/ 和一些 logs 可以看.
关于 bottle 需要说明的一点是,在 "./views" 下是找不到模板的,请添加这一句,其他本地文件操作也请参考:
1
2
3
|
bottle.TEMPLATE_PATH.append(
os.path.join(os.environ['OPENSHIFT_GEAR_DIR'],
'runtime/repo/wsgi/views/'))
|
另外关于 mongodb 有一些诡异, 用的不是 README 里说的环境变量, 而是 'OPENSHIFT_NOSQL_DB_USERNAME' 这种的, 第一次用会怎么也连不上, 需要在代码里替换变量为在命令行下添加 mongodb 时给出的信息, 连一次以后就好了. 如果不是在命令行下添加的或者没有记下, 可以参考下面链接里的例子里的 '/DEBUG/env' 查看所有环境变量, 或者可能可以 ssh 进去看.
有用的一些链接:
bottle+mongodb实现的山寨twitter
使用bottle的例子
官方安装指南
官方命令详解
发表回复