开始使用

阅读本文档需要先安装好 Flynn 集群环境,并配置好命令行工具。如果 Flynn 还没安装好,请参考安装指南,先进行环境配置。

本文档假定你的 Flynn 集群使用demo.localflynn.com这个默认域名(如果你安装的是演示环境)。如果你使用自定义的域名,请在 Flynn 启动时,设置CLUSTER_DOMAIN参数的值,替换掉默认的demo.localflynn.com

部署应用

下面我们将部署一个使用 Node.js 编写的演示程序,它自带了一个最简单功能的 HTTP 服务器。

首先使用 Git 将代码 clone 到本地:

  1. $ git clone https://github.com/flynn/nodejs-flynn-example.git

进入本地的代码目录,创建一个 Flynn 应用:

  1. $ cd nodejs-flynn-example
  2. $ flynn create example
  3. Created example

上面的命令会增加一个 Flynn 的 Git 远程分支。

  1. $ git remote -v
  2. flynn https://git.demo.localflynn.com/example.git (push)
  3. flynn https://git.demo.localflynn.com/example.git (fetch)
  4. origin https://github.com/flynn/nodejs-flynn-example.git (fetch)
  5. origin https://github.com/flynn/nodejs-flynn-example.git (push)

同时还会增加一个默认路由,将example.demo.localflynn.com指向example-web服务。

  1. $ flynn route
  2. ROUTE SERVICE ID
  3. http:example.demo.localflynn.com example-web http/1ba949d1654e711d03b5f1e471426512

推送 Flynn 远程分支,来部署应用:

  1. $ git push flynn master
  2. ...
  3. -----> Building example...
  4. -----> Node.js app detected
  5. ...
  6. -----> Creating release...
  7. =====> Application deployed
  8. =====> Added default web=1 formation
  9. To https://git.demo.localflynn.com/example.git
  10. * [new branch] master -> master

现在应用已经部署成功,可以使用上面创建的域名来访问:

  1. $ curl http://example.demo.localflynn.com
  2. Hello from Flynn on port 55006 from container d55c7a2d5ef542c186e0feac5b94a0b0

应用扩展

Flynn 里部署的应用会在根目录下生成一个Procfile配置文件,在此文件中定义该应用的类型。比如上文中部署的演示程序,它的配置中声明这是一个web应用,入口可执行程序是web.js

  1. $ cat Procfile
  2. web: node web.js

web类型的应用默认的配置是启动一个web进程,这可以在 Flynn 里用ps命令查看:

  1. $ flynn ps
  2. ID TYPE
  3. flynn-d55c7a2d5ef542c186e0feac5b94a0b0 web

可以在 Flynn 里使用scale命令来启动更多的web进程:

  1. $ flynn scale web=3

使用ps命令可以看到现在启动了三个进程:

  1. $ flynn ps
  2. ID TYPE
  3. flynn-7c540dffaa7e434db3849280ed5ba020 web
  4. flynn-3e8572dd4e5f4136a6a2243eadca5e02 web
  5. flynn-d55c7a2d5ef542c186e0feac5b94a0b0 web

重复访问部署的 web 服务,可以看到启动的三个进程会自动进行负载均衡:

  1. $ curl http://example.demo.localflynn.com
  2. Hello from Flynn on port 55006 from container d55c7a2d5ef542c186e0feac5b94a0b0
  3. $ curl http://example.demo.localflynn.com
  4. Hello from Flynn on port 55007 from container 3e8572dd4e5f4136a6a2243eadca5e02
  5. $ curl http://example.demo.localflynn.com
  6. Hello from Flynn on port 55008 from container 7c540dffaa7e434db3849280ed5ba020
  7. $ curl http://example.demo.localflynn.com
  8. Hello from Flynn on port 55007 from container 3e8572dd4e5f4136a6a2243eadca5e02

查看应用日志

可以使用log命令来查看任务日志(例如:stdout/stderr):

  1. $ flynn log flynn-d55c7a2d5ef542c186e0feac5b94a0b0
  2. Listening on 55006

关于flynn log命令的详细介绍可以访问这里

应用发布

在 git 里提交更新,同时推送到 Flynn 里就可以创建应用的新发布。在web.js里最上面增加下面一行:

  1. console.log("I've made a change!")

在 git 里提交更新到 Flynn:

  1. $ git add web.js
  2. $ git commit -m "Add log message"
  3. $ git push flynn master

一旦更新成功,你会看到三个新的进程:

  1. $ flynn ps
  2. ID TYPE
  3. flynn-cf834b6db8bb4514a34372c8b0020b1e web
  4. flynn-16f2725f165343fca22a65eebab4e230 web
  5. flynn-d7893da39a8847f395ce47f024479145 web

这些进程的日志里能看到上面增加的信息:

  1. $ flynn log flynn-cf834b6db8bb4514a34372c8b0020b1e
  2. I've made a change!
  3. Listening on 55007

应用路由

创建应用时,应用的web进程会生成一个默认的HTTP路由,是默认域名的子域名(例如:example.demo.localflynn.com)。如果你想使用不同的域名,则需要增加新的路由配置。

假如你有一个example.com域名,它指向你的 Flynn 集群(例如:它是example.demo.localflynn.comCNAME别名)。

为这个域名增加一个路由:

  1. $ flynn route add http example.com
  2. http/5ababd603b22780302dd8d83498e5172

现在你的web应用有了两个路由:

  1. $ flynn route
  2. ROUTE SERVICE ID
  3. http:example.com example-web http/5ababd603b22780302dd8d83498e5172
  4. http:example.demo.localflynn.com example-web http/1ba949d1654e711d03b5f1e471426512

现在访问example.com的请求会被路由到对应的web进程:

  1. $ curl http://example.com
  2. Hello from Flynn on port 55007 from container cf834b6db8bb4514a34372c8b0020b1e

现在你可以修改应用通过 HTTP 头信息(这里是example.demo.localflynn.comexample.com)来识别不同的访问并且返回不同的内容。

注意:HTTP 路由只能增加到默认的web应用和以-web结尾的应用类型里。例如:对于api-web类型的应用,你可以增加如下路由:

  1. $ flynn route add http -s example-api-web api.example.com
  2. http/9cfb5f1b-b174-476c-b869-71f1e03ef4b

多进程

到目前为止,我们的应用只有一种进程类型(例如:web进程),但在 Flynn 里部署的应用可以同时拥有多种进程类型,并且可以独立进行配置扩展。

让我们增加一个简单的clock服务,每秒钟输出当前的时间。在clock.js里增加下面的代码:

  1. setInterval(function() {
  2. console.log(new Date().toTimeString());
  3. }, 1000);

在应用的Procfile里指定clock的进程类型:

  1. clock: node clock.js

发布更新:

  1. $ git add clock.js Procfile
  2. $ git commit -m "Add clock service"
  3. $ git push flynn master

创建一个clock进程,并且查看输出:

  1. $ flynn scale clock=1
  2. $ flynn ps
  3. ID TYPE
  4. flynn-aff3ae71d0c149b185ec64ea2885075f clock
  5. flynn-cf834b6db8bb4514a34372c8b0020b1e web
  6. flynn-16f2725f165343fca22a65eebab4e230 web
  7. flynn-d7893da39a8847f395ce47f024479145 web
  8. $ flynn log flynn-aff3ae71d0c149b185ec64ea2885075f
  9. 18:40:42 GMT+0000 (UTC)
  10. 18:40:43 GMT+0000 (UTC)
  11. 18:40:44 GMT+0000 (UTC)
  12. 18:40:45 GMT+0000 (UTC)
  13. 18:40:46 GMT+0000 (UTC)
  14. ...

运行进程

单次运行的交互式进程可以在容器里用命令创建:

  1. $ flynn run bash

关于flynn run命令的详细介绍可以访问这里

原文: http://doc.oschina.net/flynn?t=54092