ACLをどうにかしたい話(3)
herokuで公開してみた
Web Frontend を Sinatra アプリとして作ってみました。って話だったんですが、いまこれを VMware Player 上のマシンで作っていたので、試しに使ってみようとすると、
という手間がかかるわけです。そして家の外(会社?)からは使えないし(規則的にもシステム的にも社内からはVPNでけん)。そんなわけで heroku で動かすようにしてみました。
- Cisco ACL Analyzer Web: http://cisco-acl-web.herokuapp.com/
って、ブックマーク代わりにURL貼り付けておこうと思っただけでこのエントリ書いているのですが、これだけだと中身が何も無いので、heroku の使い方も書いてみようかな、と思います。もういろんなところにこの程度の情報は転がってるんだけど、個人的メモとして。
heroku 使ってみる
サインアップ
Heroku | Cloud Application Platform 真っ先に "Sign up" リンクが表示されるので素直にメールアドレスを登録します。入れたメールアドレスに、confirm link のはいったメールが届くのでそっちをクリックするとサインアップ完了。パスワードとかを設定します。
Heroku Toolbelt のインストール
ログインするとまずは Heroku Toolbelt をインストールすべし、ってリンクがでてるので、開発機のOSに合わせてインストールします。自分は Debian/Ubuntu です。
stereocat@oftest07:~$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh [略] Setting up libruby1.9.1 (1.9.3.194-8.1ubuntu2.1) ... Setting up ruby1.9.1 (1.9.3.194-8.1ubuntu2.1) ... update-alternatives: using /usr/bin/gem1.9.1 to provide /usr/bin/gem (gem) in auto mode update-alternatives: using /usr/bin/ruby1.9.1 to provide /usr/bin/ruby (ruby) in auto mode Setting up foreman (0.63.0) ... Setting up heroku (3.3.0) ... Setting up heroku-toolbelt (3.3.0) ... Processing triggers for libc-bin ... stereocat@oftest07:~$
heroku login
してCLI上からログインします。このとき、ssh 公開鍵を持っているかどうかとかがチェックされて、持っていなければ自動的に鍵作成・公開鍵の heroku への登録が行われます。(heroku.com のWeb上からも鍵登録できる。鍵周りの設定ちゃんとやれば heroku login はいちいちやらないでもアプリをデプロイできる。)
stereocat@oftest07:~/cisco_acl_web$ heroku login Enter your Heroku credentials. Email: ********************** Password (typing will be hidden): Could not find an existing public key. Would you like to generate one? [Yn] Generating new SSH public key. Uploading SSH public key /home/stereocat/.ssh/id_rsa.pub... done Authentication successful. stereocat@oftest07:~/cisco_acl_web$ ls ~/.ssh/ id_rsa id_rsa.pub known_hosts stereocat@oftest07:~/cisco_acl_web$
アプリケーション起動用ファイルの作成
今回、既にアプリは要件を満たした状態で作ってあったので、heroku 上で実行するための設定ファイルとチェックだけします。アプリを動かすために必要な要件は bundle でパッケージ依存性解決できることと、git でファイル管理されていることです。
で、起動用ファイル(Procfile
)の作成。Sinatraで実行するように書くとこんな感じ。
stereocat@oftest07:~/cisco_acl_web$ cat Procfile web: bundle exec ruby lib/application.rb -p $PORT stereocat@oftest07:~/cisco_acl_web$
foreman
コマンドでチェックします。(heroku toolbelt インストール時にまとめて入っている)
stereocat@oftest07:~/cisco_acl_web$ foreman check valid procfile detected (web) stereocat@oftest07:~/cisco_acl_web$
OKならそのままWEBrickも起動してみる。
stereocat@oftest07:~/cisco_acl_web$ foreman start 23:53:19 web.1 | started with pid 2087 23:53:21 web.1 | [2014-02-14 23:53:21] INFO WEBrick 1.3.1 23:53:21 web.1 | [2014-02-14 23:53:21] INFO ruby 2.0.0 (2013-06-27) [x86_64-linux] 23:53:21 web.1 | == Sinatra/1.4.4 has taken the stage on 5000 for development with backup from WEBrick 23:53:21 web.1 | [2014-02-14 23:53:21] INFO WEBrick::HTTPServer#start: pid=2090 port=5000
localhost:5000
とかでアクセスして問題なく動いていればOK.
Lockfileとか
このあと heroku 上にデプロイしていくのですが、デプロイするときにいくつか引っかかったところがあったのでそこを先に書いておきます。
Gemfile.lock
をリポジトリに入れておくこと- アプリケーションとして動かす場合 lockfile を追加しておきます。(Bundlerでひな形を作成した場合、
.gitignore
にGemfile.lock
が書いてあったりするので消しちゃいましょう。) - lockfile がないとアップロード(
git push
)したときに reject されるよ。
- アプリケーションとして動かす場合 lockfile を追加しておきます。(Bundlerでひな形を作成した場合、
Gemfile
で ruby version を指定しておく。
stereocat@oftest07:~/cisco_acl_web$ cat Gemfile source 'https://rubygems.org' ruby '2.0.0' # Specify your gem's dependencies in cisco_acl_web.gemspec gemspec stereocat@oftest07:~/cisco_acl_web$
-
- 無くても動くんですが、その場合、デプロイ実行時に使っている ruby のバージョンが指定されます。
アプリケーションのデプロイ
アプリ作成
stereocat@oftest07:~/cisco_acl_web$ heroku create cisco-acl-web Creating cisco-acl-web... done, stack is cedar http://cisco-acl-web.herokuapp.com/ | git@heroku.com:cisco-acl-web.git Git remote heroku added stereocat@oftest07:~/cisco_acl_web$
heroku create
の後にアプリケーション名を指定します。これで http://cisco-acl-web.herokuapp.com/ で使えるようになる。(何も考えずにパッケージ名コピペして名前指定したら "Name must start with a letter and can only contain lowercase letters, numbers, and dashes." っていわれたんで DNS 名としてして名前をつけましょう。) 名前指定が無ければ適当な名前が振られるとのこと。いずれにしろ名前は後で heroku のアプリ管理画面から変更できる。
これをやると手元にリモートリポジトリ(heroku
)が増えているはずです。
stereocat@oftest07:~/cisco_acl_web$ git remote heroku origin stereocat@oftest07:~/cisco_acl_web$
あとはリモートへ手元のソースコードを push するだけで終わり。
stereocat@oftest07:~/cisco_acl_web$ git push heroku master Initializing repository, done. Counting objects: 68, done. Delta compression using up to 4 threads. Compressing objects: 100% (52/52), done. Writing objects: 100% (72/72), 9.63 KiB | 0 bytes/s, done. Total 72 (delta 28), reused 0 (delta 0) -----> Ruby app detected -----> Compiling Ruby/Rack [略] -----> Discovering process types Procfile declares types -> web Default types for Ruby -> console, rake -----> Compressing... done, 13.4MB -----> Launching... done, v3 http://cisco-acl-web.herokuapp.com deployed to Heroku To git@heroku.com:cisco-acl-web.git * [new branch] master -> master stereocat@oftest07:~/cisco_acl_web$
いろいろ出るんでちゃんと読みましょう。あと、トータルどれくらいのサイズをアップロードしているかってのも出ます。無料版は容量制限があるので注意。
で、これでもうできてるので、メッセージに出てきているURL(http://cisco-acl-web.herokuapp.com) にアクセスするともう使える状態。
あとは heroku.com でログインして、 [Apps] から各種設定が可能ですが、無料の範囲内でとりあえず動けばいい、という程度であればコレで終わりです。お手軽。