Getting Started with Ufop on Qiniu
====
这个教程的目的是快速上手部署和使用一个 Ufop 的应用。
当然这个教程开始前需要做一下的准备:
- 一个七牛账号
- 根据操作系统,下载相应版本的 qufopctl 工具,目前提供Linux 64位版、Linux 32位版,Windows 64位版、Mac 64位版。如果有特殊的需要,可以联系七牛的技术支持另外提供。
- 了解整个Ufop的完整使用流程:
reg // 注册
while(reg)
build // 上传和编译
check version // 切换版本
resize/start // 启动运行实例
upgrade // 升级实例
这个步骤中,首先需要通过 qufopctl 工具登陆您的账号,登陆可以使用下面两种方式:
$ qufopctl login <Username> <Passwd>
或者
$ qufopctl login <AccessKey> <SecretKey>
其中,<Username>
和<Passwd>
分别替换成您的用户名和密码,<AccessKey>
和<SecretKey>
可以在您的账号设置中找到。登陆之后用一下的命令可以注册一个 Ufop 操作:
$ qufopctl reg ufoptest_v2 -mode 2 -desc 'it is another test!'
Ufop name: ufoptest_v2
Access mode: PRIVATE
Description: it is a test!
该命令注册了一个名为 ufoptest_v2
的 ufop 操作,其中模式为私有,描述为 it is another test!
。具体命令中的参数可以参考 Ufop 完全操作指南。
Ufop 注册完成之后,您还需要提供一个监听9100端口
的二进制服务程序和一个启动脚本形成的程序包。
其中二进制服务程序即为您实现的自定义的 fop 操作。具体的协议规则参考 Ufop 完全操作指南
下面提供一个 golang 实现返回文件 mimetype 的程序:ufoptest.go。将其编译为 Linux 64位 二进制服务程序 ufoptest_v2:(该 demo 需要 golang 编译 Linux 64位环境,或者直接使用我们提供的程序)
$ GOOS=linux GOARCH=amd64 go build ufoptest.go
$ mv ufoptest ufoptest_v2
$ ls -l ufoptest_v2
-rwxr-xr-x 1 user staff 5996192 Jan 17 19:25 ufoptest_v2
该ufoptest
即为已经编译好的二进制服务程序。
你还需要提供一个名为ufop.yaml
的启动脚本,该脚本通常需要完成对服务程序的环境配置工作和程序启动工作。脚本内容如下:
image: ubuntu
build_script:
- mv $RESOURCE/* .
- chmod +x ufoptest_v2
run: ./ufoptest_v2
保存即可。具体参数规格可以参考Ufop 完全操作指南
将生成的二进制服务程序和启动脚本打成放在同一程序目录结构下,譬如放在ufop_v2目录下。结构如下:
$ tree
.
└── ufop_v2
├── ufop.yaml
└── ufoptest_v2
然后通过 qufopctl 的 build 参数上传程序目录:
$ qufopctl build ufoptest_v2 -dir ufop_v2
checking files ...
getting upload token ...
making .tar file ...
uploading .tar file ...
upload .tar succeed, please check image info and switch image version.
这时说明程序目录已经上传成功。可以通过 qufopctl 的 imageinfo 查询当前 ufop 的版本的 build 信息。
$ qufopctl imageinfo ufoptest_v2
version: 1
state: build success
createAt: 2015-01-21 11:18:25.676351549 +0800 CST
通过 qufopctl 的 info 参数可以看到 Ufop 操作当前的状态:
$ qufopctl info ufoptest_v2
Ufop name: ufoptest_v2
Owner: 1380307171
Version: 0
Access mode: PRIVATE
Description: it is another test!
Create time: 1970-01-01 08:00:00 +0800 CST
Instance num: 2
Max instanceNum: 5
Flavor: default
Access list: 1380307171
可以看到版本号仍然为 0,表示 Ufop 本身的版本号并未随着 build 操作而升级,所以我们需要做一个版本切换的操作:
$ qufopctl ufopver ufoptest_v2 -c 1
此时再查询 Ufop 的 info 时,会发现 Ufop 的版本号已经升级到版本1.
在完成绑定的动作后,由于还没有实例运行,因此 Ufop 还未处于未启动状态,下面通过 qufopctl 工具添加两个 Ufop 运行实例并启动 Ufop :
$ qufopctl resize ufoptest_v2 -num 2
Resize instance num from 2 to 2.
然后可以通过一下啊命令查询刚刚部署的 ufoptest_v2
的基本信息:
$ qufopctl info ufoptest_v2
Ufop name: ufoptest_v2
Owner: 1380307171
Version: 1
Access mode: PRIVATE
Description: it is another test!
Create time: 1970-01-01 08:00:00 +0800 CST
Instance num: 2
Max instanceNum: 5
Flavor: default
Access list: 1380307171
通过下面的命令可以查询到ufoptest
运行实例的基本状态
$ qufopctl state ufoptest_v2
instance 1 [state] Running
instance 2 [state] Running
Ufop 启动了之后,就可以直接通过 URL 同步触发或者使用持久化处理操作使用该 Ufop。
http://itisatest.qiniudn.com/gogopher.jpg?ufoptest_v2
通过上面的 URL 就会返回该图片的 mimetype 类型 image/jpeg
。
如果绑定的 Ufop 代码或者配置文件在本地做了修改,那么就需要进行这个这个操作。
如果在程序目录下修改或者添加了内容,只需要重新调用 build 命令,即可重新上传。
$ qufopctl build ufoptest_v2 -dir ufop_v2
checking files ...
getting upload token ...
making .tar file ...
uploading .tar file ...
upload .tar succeed, please check image info and switch image version.
现在调用 imageinfo 命令来查询 ufoptest_v2 这个 Ufop 当前的版本状态,会多一个新的 +1
版本号:
$ qufopctl imageinfo ufoptest_v2
version: 2
state: build success
createAt: 2015-01-21 14:16:55.733727952 +0800 CST
version: 1
state: build success
createAt: 2015-01-21 11:18:25.676351549 +0800 CST
但此时,运行在当前实例上的程序还是version 1
,所以这里需要切换程序版本,同时升级运行实例。
$ qufopctl ufopver ufoptest_v2 -c 2
$ qufopctl upgrade ufoptest_v2 -range 1:2
两条命令,将 Ufop 操作版本号切换到version 2
,同时升级两个运行实例上 Ufop 程序。
现在重新查看 ufoptest_v2的状态,可以看到,版本号已经升级为2.
$ qufopctl info ufoptest_v2
Ufop name: ufoptest_v2
Owner: 1380307171
Version: 2
Access mode: PRIVATE
Description: it is another test!
Create time: 1970-01-01 08:00:00 +0800 CST
Instance num: 2
Max instanceNum: 5
Flavor: default
Access list: 1380307171
这时,可以重复步骤5,进行对升级后的 Ufop 操作进行调用。