はじめての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 git@github.com:dmikusa-pivotal/cf-ex-worpress.git
$ cd cf-ex-worpress/
$ cf push --buildpack=https://github.com/dmikusa-pivotal/cf-phpapache-buildpack.git
_人人人人人人_
> 動かない <
 ̄Y^Y^Y^Y^Y ̄
$ cf logs wpjacopen
VCAP_SERVICES={“mysql-5.5”:[{“name”:”mysqlwpjacopen”,”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":"xxxxxxxxxxxxxx
xxx","uri":"mysql://xxxxxxxxxxxxx:xxxxxxxx@xxx.xxx.xxx.xxx: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

構造がシンプルなので、動作の把握にちょうど良いかも
質問とかあれば

はじめてのCF buildpack