开始使用
阅读本文档需要先安装好 Flynn 集群环境,并配置好命令行工具。如果 Flynn 还没安装好,请参考安装指南,先进行环境配置。
本文档假定你的 Flynn 集群使用demo.localflynn.com
这个默认域名(如果你安装的是演示环境)。如果你使用自定义的域名,请在 Flynn 启动时,设置CLUSTER_DOMAIN
参数的值,替换掉默认的demo.localflynn.com
。
部署应用
下面我们将部署一个使用 Node.js 编写的演示程序,它自带了一个最简单功能的 HTTP 服务器。
首先使用 Git 将代码 clone 到本地:
$ git clone https://github.com/flynn/nodejs-flynn-example.git
进入本地的代码目录,创建一个 Flynn 应用:
$ cd nodejs-flynn-example
$ flynn create example
Created example
上面的命令会增加一个 Flynn 的 Git 远程分支。
$ git remote -v
flynn https://git.demo.localflynn.com/example.git (push)
flynn https://git.demo.localflynn.com/example.git (fetch)
origin https://github.com/flynn/nodejs-flynn-example.git (fetch)
origin https://github.com/flynn/nodejs-flynn-example.git (push)
同时还会增加一个默认路由,将example.demo.localflynn.com
指向example-web
服务。
$ flynn route
ROUTE SERVICE ID
http:example.demo.localflynn.com example-web http/1ba949d1654e711d03b5f1e471426512
推送 Flynn 远程分支,来部署应用:
$ git push flynn master
...
-----> Building example...
-----> Node.js app detected
...
-----> Creating release...
=====> Application deployed
=====> Added default web=1 formation
To https://git.demo.localflynn.com/example.git
* [new branch] master -> master
现在应用已经部署成功,可以使用上面创建的域名来访问:
$ curl http://example.demo.localflynn.com
Hello from Flynn on port 55006 from container d55c7a2d5ef542c186e0feac5b94a0b0
应用扩展
Flynn 里部署的应用会在根目录下生成一个Procfile
配置文件,在此文件中定义该应用的类型。比如上文中部署的演示程序,它的配置中声明这是一个web
应用,入口可执行程序是web.js
。
$ cat Procfile
web: node web.js
web
类型的应用默认的配置是启动一个web
进程,这可以在 Flynn 里用ps
命令查看:
$ flynn ps
ID TYPE
flynn-d55c7a2d5ef542c186e0feac5b94a0b0 web
可以在 Flynn 里使用scale
命令来启动更多的web进程:
$ flynn scale web=3
使用ps
命令可以看到现在启动了三个进程:
$ flynn ps
ID TYPE
flynn-7c540dffaa7e434db3849280ed5ba020 web
flynn-3e8572dd4e5f4136a6a2243eadca5e02 web
flynn-d55c7a2d5ef542c186e0feac5b94a0b0 web
重复访问部署的 web 服务,可以看到启动的三个进程会自动进行负载均衡:
$ curl http://example.demo.localflynn.com
Hello from Flynn on port 55006 from container d55c7a2d5ef542c186e0feac5b94a0b0
$ curl http://example.demo.localflynn.com
Hello from Flynn on port 55007 from container 3e8572dd4e5f4136a6a2243eadca5e02
$ curl http://example.demo.localflynn.com
Hello from Flynn on port 55008 from container 7c540dffaa7e434db3849280ed5ba020
$ curl http://example.demo.localflynn.com
Hello from Flynn on port 55007 from container 3e8572dd4e5f4136a6a2243eadca5e02
查看应用日志
可以使用log
命令来查看任务日志(例如:stdout/stderr):
$ flynn log flynn-d55c7a2d5ef542c186e0feac5b94a0b0
Listening on 55006
关于flynn log
命令的详细介绍可以访问这里。
应用发布
在 git 里提交更新,同时推送到 Flynn 里就可以创建应用的新发布。在web.js
里最上面增加下面一行:
console.log("I've made a change!")
在 git 里提交更新到 Flynn:
$ git add web.js
$ git commit -m "Add log message"
$ git push flynn master
一旦更新成功,你会看到三个新的进程:
$ flynn ps
ID TYPE
flynn-cf834b6db8bb4514a34372c8b0020b1e web
flynn-16f2725f165343fca22a65eebab4e230 web
flynn-d7893da39a8847f395ce47f024479145 web
这些进程的日志里能看到上面增加的信息:
$ flynn log flynn-cf834b6db8bb4514a34372c8b0020b1e
I've made a change!
Listening on 55007
应用路由
创建应用时,应用的web
进程会生成一个默认的HTTP路由,是默认域名的子域名(例如:example.demo.localflynn.com
)。如果你想使用不同的域名,则需要增加新的路由配置。
假如你有一个example.com
域名,它指向你的 Flynn 集群(例如:它是example.demo.localflynn.com
的CNAME
别名)。
为这个域名增加一个路由:
$ flynn route add http example.com
http/5ababd603b22780302dd8d83498e5172
现在你的web
应用有了两个路由:
$ flynn route
ROUTE SERVICE ID
http:example.com example-web http/5ababd603b22780302dd8d83498e5172
http:example.demo.localflynn.com example-web http/1ba949d1654e711d03b5f1e471426512
现在访问example.com
的请求会被路由到对应的web进程:
$ curl http://example.com
Hello from Flynn on port 55007 from container cf834b6db8bb4514a34372c8b0020b1e
现在你可以修改应用通过 HTTP 头信息(这里是example.demo.localflynn.com
或 example.com
)来识别不同的访问并且返回不同的内容。
注意:HTTP 路由只能增加到默认的web
应用和以-web
结尾的应用类型里。例如:对于api-web
类型的应用,你可以增加如下路由:
$ flynn route add http -s example-api-web api.example.com
http/9cfb5f1b-b174-476c-b869-71f1e03ef4b
多进程
到目前为止,我们的应用只有一种进程类型(例如:web
进程),但在 Flynn 里部署的应用可以同时拥有多种进程类型,并且可以独立进行配置扩展。
让我们增加一个简单的clock
服务,每秒钟输出当前的时间。在clock.js
里增加下面的代码:
setInterval(function() {
console.log(new Date().toTimeString());
}, 1000);
在应用的Procfile
里指定clock
的进程类型:
clock: node clock.js
发布更新:
$ git add clock.js Procfile
$ git commit -m "Add clock service"
$ git push flynn master
创建一个clock
进程,并且查看输出:
$ flynn scale clock=1
$ flynn ps
ID TYPE
flynn-aff3ae71d0c149b185ec64ea2885075f clock
flynn-cf834b6db8bb4514a34372c8b0020b1e web
flynn-16f2725f165343fca22a65eebab4e230 web
flynn-d7893da39a8847f395ce47f024479145 web
$ flynn log flynn-aff3ae71d0c149b185ec64ea2885075f
18:40:42 GMT+0000 (UTC)
18:40:43 GMT+0000 (UTC)
18:40:44 GMT+0000 (UTC)
18:40:45 GMT+0000 (UTC)
18:40:46 GMT+0000 (UTC)
...
运行进程
单次运行的交互式进程可以在容器里用命令创建:
$ flynn run bash
关于flynn run
命令的详细介绍可以访问这里。