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] RunningUfop 启动了之后,就可以直接通过 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 操作进行调用。