Upgrade to Pro — share decks privately, control downloads, hide ads and more …

俺のBuildpackで幸せになる。(IBM Cloud loves Laravel)

俺のBuildpackで幸せになる。(IBM Cloud loves Laravel)

php-buildpackを使ってLaravelプロジェクトを簡単にIBM Cloud(PaaS)上で使えるようにしました。

Yosuke Enomoto

December 08, 2018
Tweet

More Decks by Yosuke Enomoto

Other Decks in Programming

Transcript

  1. bmxug.tokyo bmxug.tokyo - IBM Cloud PaaSをもっと使いこなしたい、分からないことを解決したいという目 的で始まったコミュニティ - 主要メンバがLaravel使いだったのでLaravelの話題多め -

    自分の課題を発表してみんなでワイワイ話している PaaS相談会として発足(大体毎月第一水曜日付近で開催) - 7/4 これから始めるPaaS開発相談会 - 8/1 PaaS相談会#2 : Laravel On IBM Cloud - 9/5 PaaS相談会#3 : IBM Cloud What's New! - 10/3 開発相談会#4 : IBM CloudFunction/Laravel - 11/7 開発相談会#5 : DevOps(CI/CD,Test)
  2. bmxug.tokyo IBM Cloud PaaS コンピュートリソース CPUとかメモリとかディスクとかの物理か ら仮想的なものまで。抽象化したレイヤと してはみんなが好きな Kubernetesとか 下位のリソースの管理、マルチテナント、パーミッ

    ション、監視、ログ管理、ミドルウェアの利用の管理 などが抽象化されスケーラビリティ・セキュリティ・ア プリケーションデプロイメントを管理される On-demandで利用できる機能やアプリ ケーション。カタログやマーケットプレイスを 経由して利用。多くは「サーバレス」なサー ビス API API
  3. bmxug.tokyo 今時はKubernetesじゃないの? Management Monitoring Logging Security Load Barancer Tools CI/CD

    IaaS k8sでは出来ない部分はエコシステ ムから必要なものを選択して構築 + k8sとか、全部コードでできる とか言ってもまだまだ開発者 に取っては難しい インフラのことは最小限にし て開発に集中したい YAML地獄からの脱出 やりたいことを最小の学習コ ストで実現したい
  4. bmxug.tokyo IBM Cloud の PaaS “ Cloud Foundry” • もっともメジャーなOpenSource

    PaaS • CFの最大の特徴は、ディベロッパーが細かいことは何も 知らなくても cf push のワン・アクションでアプリケー ションが起動することが出来ること • 実行環境にはコンテナを利用 • 従来のApplication RuntimeだけでなくKubernets ベースのContainer Runtimeも利用可能 • またCF自体をKubernets上で動かす試みもIBM, SUSE主導で始まっている
  5. bmxug.tokyo 導入済み BuildPack buildpack 位置 有効 ロック済み ファイル名 liberty-for-java 1

    true false buildpack_liberty-for-java_v3.23-20180628-1052.zip sdk-for-nodejs 2 true false buildpack_sdk-for-nodejs_v3.20.2-20180524-2057.zip dotnet-core 3 true false buildpack_dotnet-core_v1.0.26-20170913-1346.zip swift_buildpack 4 true false buildpack_swift_v2.0.12-20180510-1828.zip noop-buildpack 5 true false noop-buildpack-20140311-1519.zip java_buildpack 6 true false java-buildpack-v3.19.zip ruby_buildpack 7 true false ruby-buildpack-v1.6.46.zip nodejs_buildpack 8 true false nodejs-buildpack-v1.6.4.zip go_buildpack 9 true false go-buildpack-v1.8.6.zip python_buildpack 10 true false python-buildpack-v1.5.22.zip xpages_buildpack 11 true false xpages_buildpack_v1.2.2-20170112-1328.zip php_buildpack 12 true false php-buildpack-v4.3.39.zip staticfile_buildpack 13 true false staticfile-buildpack-v1.4.12.zip binary_buildpack 14 true false binary-buildpack-v1.0.14.zip dotnet-core_v1_0_22-20170724-0813 15 false false buildpack_dotnet-core_v1.0.22-20170724-0813.zip liberty-for-java_v3_17_1-20180131-1532 16 true false buildpack_liberty-for-java_v3.17.1-20180131-1532.zip liberty_v3_14-20171013-1023 17 true false buildpack_liberty_v3.14-20171013-1023.zip swift_buildpack_v2_0_11-20180402-2018 18 true false buildpack_swift_v2.0.11-20180402-2018.zip sdk-for-nodejs_v3_20_1-20180509-1706 19 true false buildpack_sdk-for-nodejs_v3.20.1-20180509-1706.zip liberty-for-java_v3_22-20180601-1200 20 true false buildpack_liberty-for-java_v3.22-20180601-1200.zip
  6. bmxug.tokyo BuildPackはどのように活用されているか Detect - PHP Buildpackの選択 PHP Code PHP Code

    Compile - 環境構築 Composerなど実行 Release - Dropletの実行 Droplet Process Cell Blob Store
  7. bmxug.tokyo BuildPackをベースとした開発 • ユーザの「コード」としてアプリケーションのフレームワークな どをコードも合わせて用意して push する。 ただしこのとき に言語毎にパッケージマネージャなどは利用可能である ケースがある。

    • Nodejsなどは npm 、 PHPは Composerなどがそれぞ れ必要なファイルが存在しているときには Compile フェー ズで実行される。(つまりそれ以外はすべて手元に用意して おく) BuildPack Package Module Code
  8. bmxug.tokyo Custom BuildPackの利点 • 実行環境のバージョンを固定 ( IBM Cloudの場合最新版から2個前までバージョ ンが利用可能) •

    ミドルウェアの設定を好きに設定可能 (PHPのモジュールなど) • cf push の際のデプロイまでの時間の短縮(多くはパケージマネージャが最新の 状態を構築する作業で時間がかかっている) • 開発時における環境構築の手間の削減、開発チーム内での差異を小さくする • 機能の拡張(例えばIBM製の Nodejs Buildpackなどではデバックなどが行え るオプションが追加されている)
  9. bmxug.tokyo いきなりコケる file_get_contents(/tmp/app/htdocs/.env): failed to open stream: No such file

    or directory .envファイルが無いって・・・ でも、Githubに.envファイル(DBへの接続情報とか)なんて置けない・・・ でも、key:generateはしたい composer.jsonにスクリプトを書くしかないのかな …
  10. bmxug.tokyo composer.jsonいじるなら、こんな感じでもいける "post-update-cmd": [ "echo post-update-cmd", "@php -r \"file_exists('.env') ||

    copy('.env.example','.env');\"", "mkdir -p /tmp/app/bootstrap/cache", "mkdir -p /tmp/app/storage/framework/sessions", "mkdir -p /tmp/app/storage/framework/views", "mkdir -p /tmp/app/storage/framework/cache", "Illuminate\\Foundation\\ComposerScripts::postUpdate", "php artisan key:generate" ],
  11. bmxug.tokyo composer.jsonいじるなら、こんな感じでもいける "post-update-cmd": [ "echo post-update-cmd", "@php -r \"file_exists('.env') ||

    copy('.env.example','.env');\"", "mkdir -p /tmp/app/bootstrap/cache", "mkdir -p /tmp/app/storage/framework/sessions", "mkdir -p /tmp/app/storage/framework/views", "mkdir -p /tmp/app/storage/framework/cache", "Illuminate\\Foundation\\ComposerScripts::postUpdate", "php artisan key:generate" ], これだけの為に、 毎回、composer.jsonを変更するの?
  12. bmxug.tokyo ちなみに、Detectの中身 Detect - PHP Buildpackの選択 php_buildpack は、以下のいずれかの条件下で 使用されます。 ・アプリケーションに

    composer.json ファイルが  含まれている。 ・アプリケーションに *.php ファイルが  含まれている。 ・アプリケーションの options.json ファイルで   ${WEBDIR} 変数が定義され、その変数が  アプリケーション内の既存ディレクトリー  に設定されている。
  13. bmxug.tokyo (中身の紹介1) .bp-configの内容 { "PHP_VERSION": "{PHP_70_LATEST}", "COMPOSER_VENDOR_DIR": "htdocs/vendor", "WEBDIR": "htdocs/public",

    "PHP_EXTENSIONS": ["bz2", "pdo", "zlib", "curl", "mcrypt", "mbstring", "mysqli", "gd", "zip", "pdo_mysql", "pdo_sqlite" ] }
  14. bmxug.tokyo 次回の予告 * 2019年1月16日(水) - 19:00 - 19:40 DockerイメージをPaaSで利用してみる (@tokida)

    - 19:40 - 20:10 TBD(募集中) - 20:10 - 20:40 PaaS 相談会 (相談会ネタ募集中) - https://bmxug.connpass.com/event/112451/ ×