More Related Content
PDF
PDF
Vagrant で作る PHP 開発環境 [実践編] PDF
PDF
PDF
Vagrant で PHP 開発環境を作る ハンズオン PDF
Azure Websites で作るスケーラブルな PHP アプリケーション PDF
PDF
認証機能で学ぶ Laravel 5 アプリケーション What's hot
PDF
PDF
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境 PDF
PDF
Laravel ユーザなら知っておくべきAuthオートログイン PDF
PDF
PDF
VagrantからDockerに開発環境を移行した時の話 PDF
PHPコードではなく PHPコードの「書き方」を知る PDF
PDF
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2 PDF
PPTX
PDF
Elixir Meetup #1 Loggerの構造と拡張 PDF
コンテナ事例 CircleCI, Cucumber-Chef PPTX
Ansibleを使ってdockerコンテナをプロビジョニングする PDF
Mobage を支える Ruby の技術 ~ 複数DB編 ~ PDF
20140930 anything as_code PDF
PDF
コンテナ時代だからこそ要注目! Cloud Foundry PPTX
Similar to Heroku で作る
スケーラブルな
PHP アプリケーション
PDF
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜 PDF
PPTX
PPTX
PDF
Heroku に ChiliProject を入れてみた PPTX
PDF
PDF
PDF
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 PDF
PPTX
PPTX
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture... PPT
PDF
PPTX
PDF
PDF
PDF
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya PPTX
More from Masashi Shinbara
PDF
PDF
PDF
PDF
PDF
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携 PDF
レイヤードアーキテクチャを意識したPHPアプリケーションの構築 PDF
How to learn Laravel5 application from Authentication PDF
PDF
PDF
PDF
PDF
PDF
Kansai PHP Users Group 2012年活動報告 KEY
Heroku で作る
スケーラブルな
PHP アプリケーション
- 1.
- 2.
- 3.
- 4.
• Salesforce 社が運営するPaaS
• 2007年サービスイン
• 3,000,000以上のアプリケーションが稼働
• Ruby をはじめとして、複数言語の実行環境
• PHPが 2014/04 に正式対応
(c) 2014 Masashi Shinbara @shin1x1
Herokuとは
- 5.
• git pushだけで、デプロイ完了
• ミドルウェアのインストールや設定などが不要
• 無料枠があり、かなり試すことができる
• 豊富な動作実績があり、ノウハウも多数ある
(c) 2014 Masashi Shinbara @shin1x1
Herokuのうれしいところ
- 6.
• PHP 5.5.12/ 5.5.13
• HHVM 3.1.0
• 拡張も追加可能(mbstring, memcached等)
• Composer が使える
(c) 2014 Masashi Shinbara @shin1x1
HerokuでのPHP
- 7.
• PostgreSQL /MySQL / KVS
• メール送受信
• ログ転送
• 監視
• キュー
• etc
(c) 2014 Masashi Shinbara @shin1x1
豊富なアドオン
- 8.
- 9.
(c) 2014 MasashiShinbara @shin1x1
PHPアプリケーション
$ ls!
index.php!
!
$ cat index.php!
<?php phpinfo();!
!
$ git init!
$ git add .; git commit -m “init”
- 10.
- 11.
- 12.
(c) 2014 MasashiShinbara @shin1x1
Heroku Toolbelt
• Heroku クライアントツールセット
• OSX, Windows, Debian / Ubuntsu
• Heroku の操作を CLI で行う
• Web 画面でも可能だが、あると便利
- 13.
(c) 2014 MasashiShinbara @shin1x1
Heroku Toolbelt
https://devcenter.heroku.com/articles/quickstart
- 14.
(c) 2014 MasashiShinbara @shin1x1
Heroku Toolbelt
$ heroku login!
Enter your Heroku credentials.!
Email: shin1x1@gmail.com!
Password (typing will be hidden):!
Two-factor code: xxxxx!
Authentication successful.!
• ログイン
2要素認証も可能
- 15.
(c) 2014 MasashiShinbara @shin1x1
アプリケーション作成
!
$ heroku create -r heroku!
Creating xxx-xxxx-xxxx... done, stack is cedar!
http://xxx-xxxx-xxxx.herokuapp.com/ |
git@heroku.com:xxx-xxxx-xxxx.git!
•アプリ名は、ランダムで自動生成
•̶app NAME で、アプリ名を指定することも可能
•-r heroku で、「git remote add heroku URL」を実行
- 16.
(c) 2014 MasashiShinbara @shin1x1
デプロイ
!
$ git push heroku master!
Initializing repository, done.!
Counting objects: 3, done.!
Writing objects: 100% (3/3), 218 bytes | 0 bytes/s, done.!
Total 3 (delta 0), reused 0 (delta 0)
!
(snip)!
-----> Setting up runtime environment...!
- PHP 5.5.12!
- Apache 2.4.9!
- Nginx 1.4.6!
- 17.
- 18.
- 19.
- 20.
(c) 2014 MasashiShinbara @shin1x1
アプリケーション
• 画像アップロードサイト
• ログイン認証
• 画像アップロード
• Laravel 4.2
https://github.com/shin1x1/laravel-on-heroku
- 21.
(c) 2014 MasashiShinbara @shin1x1
アプリケーション
https://github.com/shin1x1/laravel-on-heroku
- 22.
- 23.
(c) 2014 MasashiShinbara @shin1x1
シンプルな構成
• 全てが 1 台のサーバにある
• Apache(nginx) / PHP / DB etc
• スケールアップしかできない
- 24.
- 25.
- 26.
(c) 2014 MasashiShinbara @shin1x1
スケーラブルな構成
Apache / PHP
DB
FileSession
Log Apache / PHP
- 27.
(c) 2014 MasashiShinbara @shin1x1
スケーラブルな構成
Apache / PHP
DB
FileSession
Log Apache / PHP
Apache / PHP
- 28.
(c) 2014 MasashiShinbara @shin1x1
Herokuでの構成
Apache / PHP
DB
FileSession
Log Apache / PHP
Apache / PHP
Dyno
- 29.
(c) 2014 MasashiShinbara @shin1x1
Herokuでの構成
Apache / PHP
DB
FileSession
Log Apache / PHP
Apache / PHP
Dyno
Dyno
Dyno
- 30.
(c) 2014 MasashiShinbara @shin1x1
Herokuでの構成
Apache / PHP
DB
FileSession
Log Apache / PHP
Apache / PHP
Dyno
Dyno
Dyno
3 Dynos
- 31.
(c) 2014 MasashiShinbara @shin1x1
Herokuでの構成
Apache / PHP
DB
FileSession
Log Apache / PHP
Apache / PHP
Add-ons Add-ons
- 32.
(c) 2014 MasashiShinbara @shin1x1
Herokuでの構成
Apache / PHP
DB
FileSession
Log Apache / PHP
Apache / PHP
- 33.
(c) 2014 MasashiShinbara @shin1x1
スケーラブルな構成
• Dyno(PHPサーバ)は、ステートレスにする
• Dyno を増やしてスケールさせる
• アプリケーションデータは、アドオンに置く
- 34.
(c) 2014 MasashiShinbara @shin1x1
データベース
• Heroku Postgres(無料枠あり)
• 接続情報を環境変数から取得
DATABASE_URL=postgres://xxxxx:yyyyyy@ec2-nnn-nnn-
nnn-nnn.compute-1.amazonaws.com:5432/XXXXXXX
• parse_url() でパース
• アドオンは、ほぼこのパターン
- 35.
(c) 2014 MasashiShinbara @shin1x1
データベース
<?php!
$url = parse_url(getenv('DATABASE_URL'));
array(6) {!
'scheme' =>!
string(8) "postgres"!
'host' =>!
string(43) "ec2-nnn-nnn-nnn-nnn.compute-1.amazonaws.com"!
'port' =>!
int(5432)!
'user' =>!
string(4) "user"!
'pass' =>!
string(4) "pass"!
'path' =>!
string(7) "/dbname"!
}
- 36.
(c) 2014 MasashiShinbara @shin1x1
データベース
<?php!
$url = parse_url(getenv('DATABASE_URL'));!
!
$dsn = sprintf(‘pgsql:host=%s;dbname=%s',!
$url['host'], substr($url['path'], 1));!
!
$pdo = new PDO($dsn, $url['user'], $url['pass']);
• PDO の例
- 37.
(c) 2014 MasashiShinbara @shin1x1
データベース
<?php!
$postgresqlUrl = parse_url(getenv('DATABASE_URL'));!
!
return [!
'default' => 'pgsql',!
'connections' => [!
'pgsql' => [!
'driver' => 'pgsql',!
'host' => $postgresqlUrl['host'],!
'database' => substr($postgresqlUrl['path'], 1),!
'username' => $postgresqlUrl['user'],!
'password' => $postgresqlUrl['pass'],!
'charset' => 'utf8',!
'prefix' => '',!
'schema' => 'public',!
],!
],!
];
• Laravel の例
- 38.
(c) 2014 MasashiShinbara @shin1x1
データベース
http://qiita.com/shin1x1/items/68732dcf02a93c0a0fbb
- 39.
(c) 2014 MasashiShinbara @shin1x1
ログイン認証(セッション)
• Redis でセッション情報を共有
• Redis To Go(無料枠あり)
• 接続情報を環境変数から取得
• composer.json で redis を有効に
REDISTOGO_URL=redis://
redistogo:xxxxxxxxxxxxxxx@xxxxx.redistogo.com:PORT/
- 40.
(c) 2014 MasashiShinbara @shin1x1
ログイン認証(セッション)
<?php!
$url = parse_url(getenv('REDISTOGO_URL'));!
!
$redisServer = sprintf(‘tcp://%s:%d?auth=%s',!
$url['host'], $url['port'], $url['pass']);!
!
ini_set('session.save_handler', 'redis');!
ini_set('session.save_path', $redisServer);!
• redis セッションハンドラの例
- 41.
(c) 2014 MasashiShinbara @shin1x1
ログイン認証(セッション)
http://qiita.com/shin1x1/items/43181cd0487c72cb87a3
- 42.
(c) 2014 MasashiShinbara @shin1x1
画像ファイル
• S3 に保存(アドオンではない)
• AWS SDK for PHP で実装
• 接続情報は、環境変数にセットしておくと良い
• heroku config:set で環境変数をセット
$ heroku config:set AWS_ACCESS_ID=xxxx!
$ heroku config:set AWS_ACCESS_SECRET_KEY=xxxx
- 43.
(c) 2014 MasashiShinbara @shin1x1
ログ
• ログは、stdout or stderr に出力
• PaperTail などのアドオンで保存
• 複数 Dyno のログをアドオンに集約
• monolog / file_put_contents()
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
(c) 2014 MasashiShinbara @shin1x1
大事なこと
• ファイルに保存したデータは消える!!
• デプロイ、環境変数変更等の操作
• 1日1回の再起動時
• アクセスが無い場合、自動停止
(Dyno が 1 台構成だとアクセスが無い時間は、
自動でスリープする)
- 51.
(c) 2014 MasashiShinbara @shin1x1
ファイルが消える
<?php!
const FILE_PATH = '/tmp/file';!
!
file_put_contents(FILE_PATH, !
date('Y/m/d H:i:s') . '<br>', FILE_APPEND);!
!
echo file_get_contents(FILE_PATH);
• file.php として、デプロイ
- 52.
- 53.
- 54.
(c) 2014 MasashiShinbara @shin1x1
ファイルが消える
$ echo “//foo” >> file.php!
$ git add file.php; git commit -m “add comment”!
$ git push heroku master
• 変更して、再デプロイ
• ブラウザでアクセスすると、消えている
- 55.
- 56.
- 57.
(c) 2014 MasashiShinbara @shin1x1
Herokuとは
Heroku では、データファイルは消える
データは全て外部に逃す
スケーラブルなアプリケーションに!!
- 58.
(c) 2014 MasashiShinbara @shin1x1
Heroku では、データファイルは消える
データは全て外部に逃す
スケーラブルなアプリケーションに!!
Herokuは
スケーラブルな
アプリケーション
矯正ギプス
Herokuとは
- 59.
- 60.
(c) 2014 MasashiShinbara @shin1x1
まとめ
• Heroku は、無料から使える
• アドオンの活用が肝
• スケーラブルアプリケーション矯正ギプス
- 61.
(c) 2014 MasashiShinbara @shin1x1
参考
https://devcenter.heroku.com/categories/php
- 62.
- 63.