$ whoami
境川 章一郎
(さかいがわ しょういちろう)
twitter: l_s_s_l
Qiita: @ssakaigawa
時々インフラ屋。時々開発。
おしごと
Pumpkin Heads株式会社
コミュニティ活動
- Blumix User Group (ibmcloudユーザー会)
- 2018 IBM Cloud Champion
(MS MVPとか、AWS Blackbeltのような制度のIBM版です)
著書
Docker+Kubernetesの本
コンテナ・オーケストレーション(黄色いコンテナ本)の7章でIBM Cloud Kubernetes Serviceの章を担当しました。
Laravel と私
- 時々開発で利用します。
- (ほしいと思ったら自分で作ってみるタイプ
Call for Code ハッカソン参加中
自然災害へ技術で立ち向かおう
Laravelでアプ鋭意開発中
IBM Cloud PaaS on PHP
IBM Cloudで動くPaaS環境でPHPが動きます。
Cloud Foundryベース。
DevOps ToolChainと組み合わせることでCI/CDが可能
なぜ、PaaSなの?
- PHP環境のメンテナンス、いつまで続けますか?
VPSなどのインスタンスを複数毎回インストール・アップデートをおこなっていた。
PaaS運用後
- 高負荷サービスなどで、サーバーを増やしたいときにすばやくリソースが投入できる
- PHPなどのミドルウェアの導入コストがほぼゼロ
- OSの運用保守も不要
- CI/CD環境を設計・運用せずに既製の環境が利用可能
今日やること
LaravelアプリをIBM Cloud PaaSで動かしたい。
- laravelプロジェクトの作成
- IBM Cloud用に設定を修正
- IBM Cloudの設定
- デプロイ
必要なもの
- ローカルでLaravelアプリが開発できる環境
-> laradockはじめました。
- IBM Cloud ライトアカウント(無料)
((MySQLなどDBはPay-As-You-Goアカウントが必要))
[TIPS] Pay-As-You-Goアカウント
- クレジットカード登録が必要だが、無料枠の利用できるプラン。
- アプリを1ヶ月試す程度の枠は無料でついてくる。
laradockの準備
mkdir laravel-test0908 && cd laravel-test0908
git clone https://github.com/laradock/laradock.git
cd laradock
cp env-example .env
laradockを使ってworkspaceを作成
dockerイメージの取得(初回)と起動
docker-compose up -d nginx mysql workspace phpmyadmin
workspace(Laravel実行環境のCLI部分のイメージ)の実行
docker-compose exec workspace bash
Laravelのインストール
(workspace)内で実施。
w$ composer create-project laravel/laravel {PJ名}
w$
は便宜上workspaceコンテナでの作業を示します。作業完了後、exitで抜ける。
w$ exit
laradock .envの修正
laradockを必ず停止
docker-compose stop
APPLICATION=../
APPLICATION=../{PJ名}
laradock動作確認
docker-compose up -d nginx mysql phpmyadmin
http://localhost:8080
へアクセスしておなじみの画面が出ることを確認する
IBM Cloud PaaSへのデプロイ
- laravelプロジェクトの作成
- IBM Cloud用に設定を修正
- IBM Cloudの設定
- デプロイ
必要なファイル
path | filename | description |
---|---|---|
PJ/ | manifest.yml | CFアプリのデプロイ設定 |
PJ/ | .cfignore | .gitignoreと同じ |
PJ/.bp-config/ | options.json | PHP導入パラメータ |
デプロイ時に変更したほうが良いもの
path | filename | description |
---|---|---|
PJ/ | composer.json | post-instまわり |
PJ/config | database.php | DBまわり |
実際のファイル
manifest.yml
IBM Cloud PaaSのデプロイに必要な情報、domainとnameはセットアップ時のアプリURLをベースに都度変更しておく
applications:
- path: .
name: laravel-test123
memory: 128M
domain: mybluemix.net
buildpack: https://github.com/cloudfoundry/php-buildpack
env:
APP_DEBUG: false
CF_STAGING_TIMEOUT: 30
CF_STARTUP_TIMEOUT: 30
.cfignore
.gitignoreと同じ内容を入れる。
IBM Cloud側でcomposer installが自動で行われるので、vendor含め他は不要。
composer.lock
vendor
node_modules
public/hot
public/storage
storage/*.key
.idea
.vscode
.vagrant
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.env
composer.json
説明は後ほど。
"post-install-cmd": [
"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::postInstall",
"@php artisan key:generate",
"@php artisan migrate"
],
"post-update-cmd": [
"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",
"@php artisan migrate"
],
IBM Cloud PaaSへのデプロイ
- laravelプロジェクトの作成
- IBM Cloud用に設定を修正
- IBM Cloudの設定
- デプロイ
IBM Cloud PaaS PHP + Laravelでこんな事に困った・こうして解決したを紹介します。
あるある その1
デプロイ後、HTTP500 エラーでアクセスできない
AH01071: Got error 'PHP message: PHP Fatal error: Uncaught InvalidArgumentException: Please provide a valid cache path.
-> cacheなどのフォルダが作成されていない
composer.jsonを書き換えてpost-install-cmd / post-update-cmdなどで対応する
解決編
"post-install-cmd": [
"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::postInstall",
"@php artisan key:generate",
"@php artisan migrate"
],
"post-update-cmd": [
"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",
"@php artisan migrate"
],
あるある その2
DB認証情報を書き込まず渡したいけど・・・
VCAP_SERVICES内にjson形式で他サービスへの接続情報が入っている。
MySQLサービスをはじめとした、Compose for〜で始まるDBサービスの接続情報はURI形式で提供される。
["uri"]=>
string(80) "mysql://{user}:{pass}@{hostname}:{port}/compose"
解決編
環境変数からjsonデコードして配列として取得、
envではなく毎回情報を取得
$services = json_decode($_ENV['VCAP_SERVICES'], true);
$uri = $services['compose-for-mysql'][0]['credentials']['uri'];
$db_creds = parse_url($uri);
'connections' => [
〜(略)〜
'mysql' => [
'driver' => 'mysql',
'host' => $db_creds['host'],
'port' => $db_creds['port'],
'database' => 'compose',
'username' => $db_creds['user'],
'password' => $db_creds['pass'],
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
〜(略)〜
IBM Cloud PaaSへのデプロイ
- laravelプロジェクトの作成
- IBM Cloud用に設定を修正
- IBM Cloudの設定
- デプロイ
IBM Cloudの設定
PaaSのセットアップ
- IBM Cloudコンソールへログイン
- Catalog

- PHPを選択

PaaSのデプロイ
App Name: アプリ名
Host Name: ホスト名
Domain: mybluemix.net (※デフォルト、他独自ドメインも設定可能)
Plan: 128G
DB(Compose for MySQL)のデプロイ
ライトプラン上ではカタログ表示がなかった
-> Pay-As-You-Goアカウント以上で利用可能
DB容量 1GBバイトの無料枠が付属し、1GB以上単位でスケールし料金が発生します。
DB(Compose for MySQL)のデプロイ
デフォルトのままで可能。
データーベースのバージョンが現在5.7.20と5.7.22から選べる

DBとPaaS(PHP)との接続
PaaSダッシュボードから、connect
をクリックし、
Compose for MySQLを選択し、connect
service-bindという機能でIBM CloudのさまざまなサービスをPaaSから利用する事ができるように接続が可能となる。
※日本語UIの場合は接続
となります。
ibmcloudへのログイン
ibmcloudコマンドでデプロイを実施
ibmcloud login
CloudFoundryのアプリ配置先情報の読み込み
ibmcloud target --cf
ibmcloudへのデプロイ
cd ~/work/laravel-test0908/{PJ名}
ibmcloud app push {App名}

アプリURLにアクセスをクリックして開く
できなかったこと
- vue.jsを入門したいのでlaravel mixのnpm installしたい
cloudfoundryのbuildpackでは、nodejsがセットアップされていない。composer経由でnodejsをインストールするものがあるが現時点でPaaS側にnodejs導入できずうまくいかない
今日やったこと
- macbook上にコンテナのlaravel開発環境 "laradock"を初めて使う
- IBM cloud のPaaS Service Cloud Foundry PHPへプロジェクトを公開してみる
参考にしたところ( ありがとうございます。)
-
Qiita @akokubu さん Laradockを使ったlaravel開発環境
-
Qiita @rock619 さん Laradockを使ってLaravel 5.5環境を構築する
-
Qiita @fruitriin さん LaravelからVue.jsを使う最短レシピ
-
Qiita @motuo さん IBM CloudにLaravelをデプロイする方法