Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
俺のBuildpackで幸せになる。(IBM Cloud loves Laravel)
Search
Yosuke Enomoto
December 08, 2018
Programming
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
俺のBuildpackで幸せになる。(IBM Cloud loves Laravel)
php-buildpackを使ってLaravelプロジェクトを簡単にIBM Cloud(PaaS)上で使えるようにしました。
Yosuke Enomoto
December 08, 2018
More Decks by Yosuke Enomoto
See All by Yosuke Enomoto
Lapras正夢グランプリLT資料.pdf
motuo1201
0
25
Devinと探るBigQueryを使ったデータ分析入門
motuo1201
1
78
Shisho_Cloudを使った自動セキュリティ診断環境を作る.pdf
motuo1201
0
79
ドクターメイトエンジニアカルチャーブック
motuo1201
0
150
もう話すことに困らない! カジュアル面談の “型” 全部見せ
motuo1201
0
580
CROSS Party online 2022 ~自重トレ~
motuo1201
0
460
IoT LT Vol7 LT
motuo1201
0
260
IBM Cloud Fest Online 2020
motuo1201
0
860
IBM Championが考えるアプリケーション基盤の勘所
motuo1201
0
280
Other Decks in Programming
See All in Programming
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
Next.js: The final boss of Web Performance
guaca
0
280
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
0
1.5k
残高管理から台帳サービスへの進化
artoy
1
200
Agents on Rails - Rails at Scale 2026
irinanazarova
0
570
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
3.8k
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
160
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
Event is what happens
moro
2
850
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Embracing the Ebb and Flow
colly
88
5.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
830
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
940
Between Models and Reality
mayunak
4
500
Design in an AI World
tapps
1
350
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Designing for Performance
lara
612
70k
Transcript
bmxug.tokyo 俺のLaravel Buildpackで幸せになる IBM Cloud for Laravel User bmxug.tokyo -
PaaS相談会チーム @motuo @tokida
bmxug.tokyo Speaker mutuo 千葉県某所の物流系企業で社内 SEしています。汎用機開発・ PHP果ては Windowsのキッティングまでも全部やる雑食系。 PaaSを行き当たりばったりに使い過ぎて行き詰っていた所を、 BMXUGの皆 様に拾って頂きました。
↓はじまりはここから
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)
bmxug.tokyo IBM Cloud PaaS コンピュートリソース CPUとかメモリとかディスクとかの物理か ら仮想的なものまで。抽象化したレイヤと してはみんなが好きな Kubernetesとか 下位のリソースの管理、マルチテナント、パーミッ
ション、監視、ログ管理、ミドルウェアの利用の管理 などが抽象化されスケーラビリティ・セキュリティ・ア プリケーションデプロイメントを管理される On-demandで利用できる機能やアプリ ケーション。カタログやマーケットプレイスを 経由して利用。多くは「サーバレス」なサー ビス API API
bmxug.tokyo IBM Cloud PaaSでは、PaaSとSaaSでアプリを作る ロジック部分をPaaSですばやく 開発 PaaSで実装できない機能は用 意されているSaaSを徹底的に 利用 どうしても使えなければ
IaaS上 で実装することも API IBM Cloud以外の外部の SaaSも使えるよ
bmxug.tokyo 今時はKubernetesじゃないの? Management Monitoring Logging Security Load Barancer Tools CI/CD
IaaS k8sでは出来ない部分はエコシステ ムから必要なものを選択して構築 + k8sとか、全部コードでできる とか言ってもまだまだ開発者 に取っては難しい インフラのことは最小限にし て開発に集中したい YAML地獄からの脱出 やりたいことを最小の学習コ ストで実現したい
bmxug.tokyo IBM Cloud の PaaS “ Cloud Foundry” • もっともメジャーなOpenSource
PaaS • CFの最大の特徴は、ディベロッパーが細かいことは何も 知らなくても cf push のワン・アクションでアプリケー ションが起動することが出来ること • 実行環境にはコンテナを利用 • 従来のApplication RuntimeだけでなくKubernets ベースのContainer Runtimeも利用可能 • またCF自体をKubernets上で動かす試みもIBM, SUSE主導で始まっている
bmxug.tokyo PaaSでは様々な言語を利用して開発が出来る
bmxug.tokyo Runtimeで様々な言語が利用出来るわけ 最低限のアプリケーションライブラリ (Dockerでいうところのベース) 言語実行環境セットアップ済みファイルセット (nodejsやPython自体) ユーザの作成したプログラムやライブラリ (xxx.jsやxxx.py自体)
bmxug.tokyo Runtimeで様々な言語が利用出来るわけ 最低限のアプリケーションライブラリ (Dockerでいうところのベース) 言語実行環境セットアップ済みファイルセット (nodejsやPython自体) ユーザの作成したプログラムやライブラリ (xxx.jsやxxx.py自体) BuildPack
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
bmxug.tokyo BuildPackはどのように活用されているか Detect - PHP Buildpackの選択 PHP Code PHP Code
Compile - 環境構築 Composerなど実行 Release - Dropletの実行 Droplet Process Cell Blob Store
bmxug.tokyo BuildPackをベースとした開発 • ユーザの「コード」としてアプリケーションのフレームワークな どをコードも合わせて用意して push する。 ただしこのとき に言語毎にパッケージマネージャなどは利用可能である ケースがある。
• Nodejsなどは npm 、 PHPは Composerなどがそれぞ れ必要なファイルが存在しているときには Compile フェー ズで実行される。(つまりそれ以外はすべて手元に用意して おく) BuildPack Package Module Code
bmxug.tokyo おれのBuildPack BuildPack Package Module BuildPack
bmxug.tokyo Custom BuildPackの利点 • 実行環境のバージョンを固定 ( IBM Cloudの場合最新版から2個前までバージョ ンが利用可能) •
ミドルウェアの設定を好きに設定可能 (PHPのモジュールなど) • cf push の際のデプロイまでの時間の短縮(多くはパケージマネージャが最新の 状態を構築する作業で時間がかかっている) • 開発時における環境構築の手間の削減、開発チーム内での差異を小さくする • 機能の拡張(例えばIBM製の Nodejs Buildpackなどではデバックなどが行え るオプションが追加されている)
bmxug.tokyo ここからは実際にBuildPackを触ってみる BuildPack
bmxug.tokyo 今回のテーマ LaravelのソースをGithubから読込んで、PaaSに自動デプロイしてみましょう! 無料で使えるCI/CD ツールを通じて… 自分のLaravel リポジトリから… 簡単Deploy! 標準 PHP
Buildpack
bmxug.tokyo この構成を実現するにあたって(CI/CD) PaaSには「継続的デリバリー」という機能が含 まれています。 CI/CDを実現するための様々なツールを組合せて繋ぐことができます。(ToolChain) 例えば、、、 • Githubがコミットされたら自動的にテスト • テストをパスしたらPaaSへ自動的にデプロイ
• デプロイ結果をSlackへ通知 なんてことも、PaaS上で簡単に実現できます。 とっても、便利。
bmxug.tokyo 今回のToolChainはこんな感じです Githubとの連携だけですが、数分でこれが出来るPaaSはやっぱりすごい!
bmxug.tokyo さぁ、早速デプロイしてみよう!
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にスクリプトを書くしかないのかな …
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" ],
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を変更するの?
bmxug.tokyo というわけで、俺のBuildPackを作ろう!
bmxug.tokyo 材料はGithubにある! URL: https://github.com/cloudfoundry?
bmxug.tokyo Forkして修正しましょう。 PaaSのBuildPackはこのソースを直接、動かしてくれます。
bmxug.tokyo ちなみに、Detectの中身 Detect - PHP Buildpackの選択 php_buildpack は、以下のいずれかの条件下で 使用されます。 ・アプリケーションに
composer.json ファイルが 含まれている。 ・アプリケーションに *.php ファイルが 含まれている。 ・アプリケーションの options.json ファイルで ${WEBDIR} 変数が定義され、その変数が アプリケーション内の既存ディレクトリー に設定されている。
bmxug.tokyo 正直、あんまりいじるところは無い。
bmxug.tokyo 俺のBuildPackはCompileで唸りをあげる! と言いながらも、やる事は単純で ソースコード内にある (.env) が存在すればそのまま採用。 無ければプロジェクト内の(.env.sample)をコピー これだけ。
bmxug.tokyo 実際に修正したところ extensions/composer/extension.py
bmxug.tokyo 実際に修正したところ
bmxug.tokyo Github上にCommitしたら俺のBuildPackは準備OK PaaSで使うだけであれば、ソースが Github上にあればOK create-buildpack(BuildPackのBuildすること)すら不要。
bmxug.tokyo 俺のBuildPack、どうやって使うの? まずは、Github上にPaaS用のLaravelプロジェクトを作成します。 PaaSの環境変数/コンテナ名/BulildPackを指定するファイル indexの場所や拡張機能の定義 Laravelアプリケーションはこの下に入れる
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" ] }
bmxug.tokyo (中身の紹介2) htdocs配下の内容 .envが無かった時に採用する環境変数ファイル
bmxug.tokyo ちなみに、.env.exampleはこんな感じ(一部) APP_NAME=Laravel APP_ENV=local APP_KEY= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=127.0.0.1
DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
bmxug.tokyo 俺のBuildPackを使うする時は… Manifest.ymlを修正しましょう。 さきほど、作成したPHP-BuildPackのURLを指定します。
bmxug.tokyo ついに・・・ BuildPackが俺のBuildPackに変更されました! 無料で使えるCI/CD ツールを通じて… 自分のLaravel リポジトリから… 簡単Deploy! 俺の PHP
Buildpack
bmxug.tokyo 実機で確認 無事にDeployに成功しました。
bmxug.tokyo でも、環境変数はどこに持たせるの? PaaSに持たせましょう。LaravelはPaaS上の環境変数を優先してくれます。
bmxug.tokyo 実に簡単。 ソースはPhysonで書かれていますが、PHPerの私でも修正出来ました
bmxug.tokyo 最後に 相談会に参加する前は機能の言葉の意味すら分からずに、 ただのアプリケーションサーバとしてしか使えていませんでしたが、 色々な方からの情報提供やアドバイスで、IBM Cloudならではの便利さを 享受できるようになってきました! ぜひぜひ、開発相談会に遊びに来てください。
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/ ×
bmxug.tokyo bmxug.tokyo push
bmxug.tokyo bmxug.tokyo push