GMOクラウドVPS+Ubuntu14.04にFlynnをインストールしたのでその手順(2016/02/05)


GMOクラウドVPSを契約したのでFlynnをインストールしてみた

先月ぐらいにWEBサイトを作成したくなりGMOクラウドVPSの1GBプランを契約しました。
そこでサーバー側の環境構築に折角なのでプライベートPaasを構築してみたくなりFlynnのインストールをしてみました。その中で結構はまっちゃったのでインストールからデプロイまでの手順を残しておきたいと思います。
また、後述しますが、最終的によく分からないエラーにはまってしまい最終的に使用を断念してしまいました。

目次

  • Flynnとは
  • インストール準備
  • Flynnのインストール
  • Flynnの起動
  • クラスター登録
  • デプロイ
  • 終わり
  • 参考にしたサイト

Flynnとは

Flynnとは何かをざっくり言うとOSSのPaasになります。
Flynnを使えば

  • 自前のサーバーにHerokuライクなPaas環境を構築できる
  • コマンド一つでスケールができるようになる

などが行えるようになります。Herokuライクな環境を構築できるおかげで、サーバー側にRubyをインストールしたりRaisをインストールしたりなどといった環境構築の手間が省けます。

他のOSSのPaasですが、Flynn以外に以下のものがあります。

  • CloudFoundry
  • OpenShift
  • Deis

今回、これらを使うことも考えたんですが、CloudFoundryとOpenShiftは機能が豊富でIBMが採用していたり、Google,Amazonが使用して入りと個人がGMOクラウドVPSの1GBプランで使うには少し大げさな気がして今回は使いませんでした。

また、Deisを使用するにはOSがCoreOSでなければならず、Ubuntu環境である今回は使用できませんでした。
そこで、Flynnですが、システム要件が

  • 1GB以上のRAM
  • 20GB以上のストレージ
  • 2つのCPUコア
  • Ubuntu

と、今回のGMOクラウドVPSの1GBプランにぴったりでした。そのため、Flynnを使うことにしたのです。

インストール準備

最初にGMOクラウドVPSでは契約時のUbuntuのバージョンが12.04となっているため、14.04にアップデートを行いました。
参考サイト[http://hentai-kun.hatenablog.jp/entry/2014/09/18/200000]

次に、Flynnインストール時に必要っぽいUbuntuカーネルとzfsのインストールを行いました。
これらはFlynnインストール時にもapt-getでインストールしているようですが、私はここでUbuntuカーネルのインストールなりzfsのインストールなりに失敗してハマっちゃいました。ですので、事前にインストールしておいたほうが無難だと思います。

Ubuntuカーネルのインストール

Ubuntuカーネルはapt-getコマンドでインストールしました。以下のコマンドを入力して何もエラーがでなければ大丈夫だと思います。

$ sudo apt-get install  linux-image-$(uname -r) linux-headers-$(uname -r) linux-image-extra-$(uname -r)

zfsのインストール

次にzfsのインストールです。以下のコマンドを入力して問題なくzfsがインストールできればFlynnをインストールするときに必要なものは揃うはずです。

$ sudo add-apt-repository ppa:zfs-native/stable
$ sudo apt-get update
$ sudo apt-get install spl spl-dkms ubuntu-zfs zfs-dkms
$ sudo dpkg-reconfigure spl-dkms
$ sudo dpkg-reconfigure zfs-dkmsdkms status
$ sudo dkms status

※sudo dkms statusでzfsのバージョン情報が表示されれば成功です。

Flynnのインストール

Flynnのインストールは以下のコマンドを入力するだけでよく非常に簡単です。

$ sudo bash < <(curl -fsSL https://dl.flynn.io/install-flynn)

Flynnの起動

インストールが完了したら次にFlynnの起動を行いました。以下の順番でコマンドを入力します。

$ sudo flynn-host init --init-discovery
https://discovery.flynn.io/clusters/53e8402e-030f-4861-95ba-d5b5a91b5902
$ sudo flynn-host init --discovery https://discovery.flynn.io/clusters/53e8402e-030f-4861-95ba-d5b5a91b5902
$ sudo start flynn-host

最後のstart flynn-hostのコマンドがFlynnの起動になります。起動後は以下のコマンドを打てば起動していることを確認できます

$ sudo status flynn-host
flynn-host start/running, process 4090

クラスターの登録

Flynnの起動が済んだら次にクラスターの登録を行います。これも以下のコマンドを入力することで行えます。

sudo CLUSTER_DOMAIN=<自分で用意したサーバーのドメイン> flynn-host bootstrap /etc/flynn/bootstrap-manifest.json

※サーバーのドメインについてですが、FlynnではGitリポジトリやダッシュボードなどにサブドメインを利用しています。
そのため、取得したドメインについて、サブドメインの設定をする必要があります。例えば、「demo.localflynn.com」というドメインであれば以下のような設定です。この設定についてはドメイン管理業者ごとに違いますので検索して調べてみてください。

*.demo.localflynn.com.  CNAME  demo.localflynn.com.

クラスターの登録が完了したら以下のコマンドが出力されていると思いますのでコピペして入力します。これにより~/.flynnrcという設定ファイルにクラスターの情報が登録されます。

flynn cluster add -p xxxxxxxxxxxxxx= default demo.localflynn.com xxxxxxxx

デプロイ

いよいよアプリのデプロイになります。まずは、Flynnのクライアントツールをインストールします。これも以下のコマンドを入力するだけで完了します。

L=/usr/local/bin/flynn && curl -sSL -A "`uname -sp`" https://dl.flynn.io/cli | zcat >$L && chmod +x $L

続いて先ほどのクラスター登録をクライアント側でも行います。以下のコマンドを入力し~/.flynnrcにクラスター情報を設定します

flynn cluster add -p xxxxxxxxxxxxxx= default demo.localflynn.com xxxxxxxx

Flynnのクライアントツールをインストールし、クラスターの登録も済みましたのでいよいよアプリのデプロイになります。デプロイしたいアプリの場所まで移動し以下のコマンドを入力します。途中、ユーザーIDとパスワードを求められたら、~/.flynnrcに設定されているNameとKeyの値を入力します。

$ flynn create example

このコマンドにより、gitのリモートブランチにflynnが追加されます。git remoteコマンドを打てば追加されたリモートブランチの情報を確認できます。

あとは、git pushでアプリをFlynnにデプロイします。ここの使用感はHerokuと全く一緒ですね。もしも途中で、ユーザーIDとパスワードを求められたら、~/.flynnrcに設定されているNameとKeyの値を入力します。

$ git push flynn master

pushが完了してしばらく経てば、WEBサイトが起動します。ブラウザ等で以下のURLにアクセスすれば動いているサイトを見ることができます。
http://example.<自分で用意したサーバーのドメイン>

※もしも、デプロイしたいアプリがなければ公式が用意しているサンプルアプリを使うといいと思います。[https://flynn.io/docs]

終わり

以上が、Flynnをインストールしてアプリをデプロイするまでの私が行った手順になります。
印象としてはかなり簡単に自前のPaas環境を構築できました。私の場合は、サーバー側の環境を気にすることなく、Railsアプリのデプロイを行えました。

ただし、その後以下の問題が出て結局使用を断念してしまいました。

二回目以降git push flynn masterに失敗する

二回目以降のデプロイ時になぜか失敗します。エラーの内容は以下になります。ググったりしてなんとか解決しようとしたんですが、正直お手上げ状態です。

-----> Creating release...
remote: Error deploying app release: Timed out waiting for deployment completion!
To ssh://[email protected]:xxxx/example.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'ssh://[email protected]:xxxxxxx/example.git'

一回サーバーの再起動を行うとFlynnが立ち上がらなくなった

こちらも一回サーバーの再起動させたらsudo start flynn-hostを行った時に失敗するようになりました。結局flynnをクリーンインストールすることになりました。

色々調べたんですが、私には上記の問題を解決できず結局Flynnを使用しないことにしました。ただ、それを抜けば、こんなに簡単に自前のPaas環境を構築できるのは大変魅力的でした。場合によっては、サーバー側の環境(Rubyのバージョンとか)を全く意識しなくてもFlynnさえインストールすればスケールするインフラ・デプロイ環境を構築できるようになるかもしれません。そうすることでWEBアプリの開発により専念できるようになるかもしれませんね。

参考にしたサイト

私がFlynnをインストールした時に参考にしたサイトです。

・公式
https://flynn.io/docs/installation/manual
→Flynnご本家のマニュアルインストールページです。間違いなくこのページより詳しいです。

・DockerによるマルチホストのPaaS flynnの概要とそのアーキテクチャー
http://deeeet.com/writing/2014/07/07/flynn/
→Flynnの概要がわかりやすく載っています。ここを見ればFlynnがどういうものなのかわかるとおもいます。

・flynnを使ったオートスケーリングシステム
http://ameblo.jp/principia-ca/entry-12001479656.html
→自分はオートスケーリングを使用してみてはいないんですが、公式の「Bootstrap Flynn」に載っているクラスターの登録の方法では動かなかったためこのページに手順を参考にインストールしました。

・ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
http://www.slideshare.net/jacopen/openpaas-paas
→Flynn以外のOSSのPaasについて比較を行っているスライドです。私はここでFlynnを知りました。