はじめてのCF Buildpack UDCP Kazuto Kusama @jacopen
May 28, 2015
はじめてのCF Buildpack
UDCP Kazuto Kusama @jacopen
自己紹介
•草間 一人(くさま かずと)
• UDCPメンバー
!• Twitter: @jacopen • Facebook: jacopen
呉鎮守府
UDCP
• Blog (U1TB) !!!!!
• 自転車イベント参加 !!
• おいしいものを食べる
今日のお題
‣ CF v2のBuildpackを触ってみよう!
‣ 経験豊富な人には既知の話が多いかも。
‣ v1ばっかりでv2あんまり経験無いよ、という人向け
Buildpackとは
• Herokuが作った、任意の言語/フレームワークを利用できるようになる仕組み
• HerokuのCeder Stackで対応している言語(Ruby, Java,
Clojure, Node.js, Scala)は、Buildpackで実装されている
$ heroku create myapp --buildpack https://github.com/heroku/heroku-buildpack-ruby
Third-Party buildpacks
ということで
• とても便利なのでCloud FoundryもBuildpack使えるようにしたよ! ・・・というのが、v2 CFの大きな特徴。
v2でbuildpackを使ってみよう!
CF PHP & Apache Buildpack
• mod_phpかphp_fpmかを選べる
• Apache 2.2か2.4かを選べる
CF PHP Example WordPress
• CF PHP Buildpackで上手く動くように作られたWordPressのサンプル。
• といっても大したことはしていなくて、以下のようなディレクトリ分けをしただけ
• Buildpackのコンフィグをオーバーライドするconfig
ディレクトリ • PHPやHTMLが入るhtdocs
ディレクトリ
$ git clone [email protected]:dmikusa-pivotal/cf-ex-worpress.git
$ cd cf-ex-worpress/
$ cf push --buildpack=https://github.com/dmikusa-pivotal/cf-php-apache-buildpack.git
_人人人人人人_ > 動かない < ‾Y^Y^Y^Y^Y‾
$ cf logs wpjacopen
VCAP_SERVICES={“mysql-5.5”:[{“name”:”mysql-wpjacopen”,”label”:”mysql-5.5”,”tags":["relational"],"plan":"default","credentials":{"name":"dc75750d21df148fc9942cd9b4e996229","hostname":"xxx.xxx.xxx.xxx","host":"xxx.xxx.xxx.xxx","port":3307,"user":"xxxxxxxxxxx","username":"xxxxxxxxxxx","password":"xxxxxxxxxxxxxxxxx","uri":"mysql://xxxxxxxxxxxxx:[email protected]:3307/dc75750d21df148fc9942cd9b4e996229"}}]}
その他のCF向けBuildpack
• java buildpack • https://github.com/cloudfoundry/java-buildpack
• cloudfoundry-buildpack-java • https://github.com/cloudfoundry/cloudfoundry-buildpack-java • もうメンテされてない?
• ruby buildpack • https://github.com/cloudfoundry/heroku-buildpack-ruby
• nodejs buildpack • https://github.com/cloudfoundry/heroku-buildpack-nodejs
• ibm-websphere-liberty-buildpack • https://github.com/cloudfoundry/ibm-websphere-liberty-buildpack • 良く分からない\(^o^)/
Community Buildpack
• https://github.com/glyn/virgo-buildpack • https://github.com/jmcc0nn3ll/jetty-buildpack • https://github.com/dmikusa-pivotal/cf-php-apache-buildpack • https://github.com/mstine/heroku-buildpack-clojure • https://github.com/BrianMMcClain/heroku-buildpack-haskell • https://github.com/michaljemala/cloudfoundry-buildpack-go • https://github.com/hmalphettes/heroku-buildpack-go • https://github.com/Orange-OpenSource/java-buildpack/blob/jonas/docs/
container-jonas.md • https://github.com/dmikusa-pivotal/cf-test-buildpack • https://github.com/cloudfoundry-community/nginx-buildpack • https://github.com/cloudfoundry-community/.net-buildpack • https://github.com/ephoning/heroku-buildpack-python • https://github.com/joshuamckenty/heroku-buildpack-python • https://github.com/cloudfoundry-community/strongloop-suite-buildpack
HerokuのBuildpackは使えるの?
• 使えるものは使える!
動くことが確認されているHeroku buildpack
• https://github.com/heroku/heroku-buildpack-php • https://github.com/iphoting/heroku-buildpack-php-tyler • https://github.com/heroku/heroku-buildpack-python • https://github.com/heroku/heroku-buildpack-scala
• with https://github.com/jbayer/hello-scala
自分でBuildpackを作る!
• ほんとはここでこんなBuildpack作ったぜ(ドヤッ)って言いたかったんだけど・・・
• 時間がありませんでした/(^o^)\
• というか欲しいBuildpack既にあるんだもん・・・
Buildpackの簡単な仕組み解説
• Buildpackの実体は3つのスクリプト
• compile • detect • release
compile
• 言語の実行環境をセットアップするためのスクリプト • バイナリをダウンロードしてきて配置するスクリプトが多い • PHP buildpackではpythonを使っているが、シェルスクリプト等でもOK
detect
• buildpackの実行条件を指定するスクリプト。
• PHP buildpackの場合、.phpスクリプトがあればOK。
• OKならばexit 0、NGならばexit 1を返すという決まり。
release
• なんかメタデータとか入れるらしい
Buildpackを自作するための資料
• Heroku reference • https://devcenter.heroku.com/articles/buildpack-api
• heroku-buildpack-ffmpeg • https://github.com/shunjikonishi/heroku-buildpack-ffmpeg 構造がシンプルなので、動作の把握にちょうど良いかも
質問とかあれば