开始使用 #开始使用 阅读本文档需要先安装好 Flynn 集群环境,并配置好命令行工具。如果 Flynn 还没安装好,请参考[安装指南](https://flynn.io/docs/installation),先进行环境配置。 本文档假定你的 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`命令的详细介绍可以访问[这里](https://flynn.io/docs/cli#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`命令的详细介绍可以访问[这里](https://flynn.io/docs/cli#run)。