Upload
Download free for 30 days
Login
Submit search
Heroku で作る スケーラブルな PHP アプリケーション
15 likes
25,595 views
Masashi Shinbara
2014/06/19 第16回関西PHP勉強会
Internet
Read more
1 of 63
Download now
Downloaded 20 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
More Related Content
PDF
Vagrant体験入門
Masashi Shinbara
PDF
Vagrant で作る PHP 開発環境 [実践編]
Masashi Shinbara
PDF
開発現場で活用するVagrant
Masashi Shinbara
PDF
わかってるフレームワーク Laravel
Masashi Shinbara
PDF
Vagrant で PHP 開発環境を作る ハンズオン
Masashi Shinbara
PDF
Azure Websites で作るスケーラブルな PHP アプリケーション
Masashi Shinbara
PDF
Ansible ではじめるサーバ作業の自動化
Masashi Shinbara
PDF
認証機能で学ぶ Laravel 5 アプリケーション
Masashi Shinbara
Vagrant体験入門
Masashi Shinbara
Vagrant で作る PHP 開発環境 [実践編]
Masashi Shinbara
開発現場で活用するVagrant
Masashi Shinbara
わかってるフレームワーク Laravel
Masashi Shinbara
Vagrant で PHP 開発環境を作る ハンズオン
Masashi Shinbara
Azure Websites で作るスケーラブルな PHP アプリケーション
Masashi Shinbara
Ansible ではじめるサーバ作業の自動化
Masashi Shinbara
認証機能で学ぶ Laravel 5 アプリケーション
Masashi Shinbara
What's hot
(20)
PDF
いまどきのPHP
Masashi Shinbara
PDF
もう XAMPP / MAMP はいらない! Vagrant で作る PHP 開発環境
Masashi Shinbara
PDF
ビルドサーバで使うDocker
Masashi Shinbara
PDF
Laravel ユーザなら知っておくべきAuthオートログイン
Masashi Shinbara
PDF
Twilio API を PHP で触ってみよう
Masashi Shinbara
PDF
Vagrant を Web開発環境に使う
Masashi Shinbara
PDF
VagrantからDockerに開発環境を移行した時の話
Daijiro Abe
PDF
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
PDF
AWSをコードで定義する
Sugawara Genki
PDF
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Masashi Shinbara
PDF
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
PPTX
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
PDF
Elixir Meetup #1 Loggerの構造と拡張
Sugawara Genki
PDF
コンテナ事例 CircleCI, Cucumber-Chef
Yukihiko SAWANOBORI
PPTX
Ansibleを使ってdockerコンテナをプロビジョニングする
Ryo Adachi
PDF
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Naotoshi Seo
PDF
20140930 anything as_code
Sugawara Genki
PDF
フィードフォースと AWS と私
a know
PDF
コンテナ時代だからこそ要注目! Cloud Foundry
Kazuto Kusama
PPTX
microPCFを使ってみよう
Hiroaki_UKAJI
いまどきのPHP
Masashi Shinbara
もう XAMPP / MAMP はいらない! Vagrant で作る PHP 開発環境
Masashi Shinbara
ビルドサーバで使うDocker
Masashi Shinbara
Laravel ユーザなら知っておくべきAuthオートログイン
Masashi Shinbara
Twilio API を PHP で触ってみよう
Masashi Shinbara
Vagrant を Web開発環境に使う
Masashi Shinbara
VagrantからDockerに開発環境を移行した時の話
Daijiro Abe
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
AWSをコードで定義する
Sugawara Genki
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Masashi Shinbara
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
Elixir Meetup #1 Loggerの構造と拡張
Sugawara Genki
コンテナ事例 CircleCI, Cucumber-Chef
Yukihiko SAWANOBORI
Ansibleを使ってdockerコンテナをプロビジョニングする
Ryo Adachi
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Naotoshi Seo
20140930 anything as_code
Sugawara Genki
フィードフォースと AWS と私
a know
コンテナ時代だからこそ要注目! Cloud Foundry
Kazuto Kusama
microPCFを使ってみよう
Hiroaki_UKAJI
Ad
Similar to Heroku で作る スケーラブルな PHP アプリケーション
(20)
PDF
Game BaaS Implemented in Ruby
dena_study
PDF
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
拓将 平林
PDF
先取り!PHP 7 と WordPress
Masashi Shinbara
PDF
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
Yuki Kanazawa
PDF
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
Katsuhiro Miura
PDF
OSC2013@FUKUOKA
Ryuji Egashira
PDF
VagrantユーザのためのDocker入門
Masashi Shinbara
PPTX
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
PDF
クラウドコンピューティングでつくるビッグデータ解析のいまとこれから
Shohei Kobayashi
PDF
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
PDF
PHP カンファレンス福岡 参加報告
y-uti
PDF
RFC: "var" Deprecation
y-uti
PPTX
オフラインファーストの思想と実践
Shumpei Shiraishi
PDF
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rakuten Group, Inc.
PDF
PaaSの作り方 Sqaleの場合
hiboma
PPTX
技術選択とアーキテクトの役割
Toru Yamaguchi
PDF
OSC福岡 20111203
Hiroshi Bunya
PDF
HHVM/Hackを本番投入した話
Kenjiro Kubota
PDF
HBase Meetup Tokyo Summer 2015 #hbasejp
Cloudera Japan
PDF
Ruby開発者のためのHeroku入門
Salesforce Developers Japan
Game BaaS Implemented in Ruby
dena_study
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
拓将 平林
先取り!PHP 7 と WordPress
Masashi Shinbara
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
Yuki Kanazawa
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
Katsuhiro Miura
OSC2013@FUKUOKA
Ryuji Egashira
VagrantユーザのためのDocker入門
Masashi Shinbara
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
クラウドコンピューティングでつくるビッグデータ解析のいまとこれから
Shohei Kobayashi
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
PHP カンファレンス福岡 参加報告
y-uti
RFC: "var" Deprecation
y-uti
オフラインファーストの思想と実践
Shumpei Shiraishi
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rakuten Group, Inc.
PaaSの作り方 Sqaleの場合
hiboma
技術選択とアーキテクトの役割
Toru Yamaguchi
OSC福岡 20111203
Hiroshi Bunya
HHVM/Hackを本番投入した話
Kenjiro Kubota
HBase Meetup Tokyo Summer 2015 #hbasejp
Cloudera Japan
Ruby開発者のためのHeroku入門
Salesforce Developers Japan
Ad
More from Masashi Shinbara
(12)
PDF
日本語消えたスライド
Masashi Shinbara
PDF
Twilio入門 -Web アプリ編-
Masashi Shinbara
PDF
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
PDF
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Masashi Shinbara
PDF
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
Masashi Shinbara
PDF
How to learn Laravel5 application from Authentication
Masashi Shinbara
PDF
キャラ立ちしたエンジニアになる!
Masashi Shinbara
PDF
Composer 再入門
Masashi Shinbara
PDF
PHP 5.5 Zend OPcache
Masashi Shinbara
PDF
サーバの防災訓練
Masashi Shinbara
PDF
Kansai PHP Users Group 2012年活動報告
Masashi Shinbara
KEY
10分で分かる最近のCakePHP
Masashi Shinbara
日本語消えたスライド
Masashi Shinbara
Twilio入門 -Web アプリ編-
Masashi Shinbara
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Masashi Shinbara
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
Masashi Shinbara
How to learn Laravel5 application from Authentication
Masashi Shinbara
キャラ立ちしたエンジニアになる!
Masashi Shinbara
Composer 再入門
Masashi Shinbara
PHP 5.5 Zend OPcache
Masashi Shinbara
サーバの防災訓練
Masashi Shinbara
Kansai PHP Users Group 2012年活動報告
Masashi Shinbara
10分で分かる最近のCakePHP
Masashi Shinbara
Heroku で作る スケーラブルな PHP アプリケーション
1.
2014/06/19 shin1x1 第16回関西PHP勉強会 Heroku で作る スケーラブルな PHP
アプリケーション
2.
Agenda (c) 2014 Masashi
Shinbara @shin1x1 • Heroku とは • PHPアプリケーションのデプロイ • スケーラブルな構成を作る • 大事なこと • まとめ
3.
Herokuとは (c) 2014 Masashi
Shinbara @shin1x1
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.
PHPアプリケーションの デプロイ (c) 2014 Masashi
Shinbara @shin1x1
9.
(c) 2014 Masashi
Shinbara @shin1x1 PHPアプリケーション $ ls! index.php! ! $ cat index.php! <?php phpinfo();! ! $ git init! $ git add .; git commit -m “init”
10.
1. heroku.com でサインアップ(サインアップ) 2.
Heroku Toolbelt インストール 3. Heroku でアプリケーションを作成 4. PHPアプリケーションをデプロイ (c) 2014 Masashi Shinbara @shin1x1 Quick Start
11.
(c) 2014 Masashi
Shinbara @shin1x1 サインアップ https://id.heroku.com/signup
12.
(c) 2014 Masashi
Shinbara @shin1x1 Heroku Toolbelt • Heroku クライアントツールセット • OSX, Windows, Debian / Ubuntsu • Heroku の操作を CLI で行う • Web 画面でも可能だが、あると便利
13.
(c) 2014 Masashi
Shinbara @shin1x1 Heroku Toolbelt https://devcenter.heroku.com/articles/quickstart
14.
(c) 2014 Masashi
Shinbara @shin1x1 Heroku Toolbelt $ heroku login! Enter your Heroku credentials.! Email:
[email protected]
! Password (typing will be hidden):! Two-factor code: xxxxx! Authentication successful.! • ログイン 2要素認証も可能
15.
(c) 2014 Masashi
Shinbara @shin1x1 アプリケーション作成 ! $ heroku create -r heroku! Creating xxx-xxxx-xxxx... done, stack is cedar! http://xxx-xxxx-xxxx.herokuapp.com/ |
[email protected]
:xxx-xxxx-xxxx.git! •アプリ名は、ランダムで自動生成 •̶app NAME で、アプリ名を指定することも可能 •-r heroku で、「git remote add heroku URL」を実行
16.
(c) 2014 Masashi
Shinbara @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.
(c) 2014 Masashi
Shinbara @shin1x1 完了! ! $ heroku open!
18.
(c) 2014 Masashi
Shinbara @shin1x1 管理画面
19.
スケーラブルな構成を作る (c) 2014 Masashi
Shinbara @shin1x1
20.
(c) 2014 Masashi
Shinbara @shin1x1 アプリケーション • 画像アップロードサイト • ログイン認証 • 画像アップロード • Laravel 4.2 https://github.com/shin1x1/laravel-on-heroku
21.
(c) 2014 Masashi
Shinbara @shin1x1 アプリケーション https://github.com/shin1x1/laravel-on-heroku
22.
(c) 2014 Masashi
Shinbara @shin1x1 シンプルな構成 Apache / PHP Log DB Session File
23.
(c) 2014 Masashi
Shinbara @shin1x1 シンプルな構成 • 全てが 1 台のサーバにある • Apache(nginx) / PHP / DB etc • スケールアップしかできない
24.
(c) 2014 Masashi
Shinbara @shin1x1 Apache / PHP Log DB Session File スケーラブルな構成
25.
(c) 2014 Masashi
Shinbara @shin1x1 スケーラブルな構成 DB FileSession Log Apache / PHP
26.
(c) 2014 Masashi
Shinbara @shin1x1 スケーラブルな構成 Apache / PHP DB FileSession Log Apache / PHP
27.
(c) 2014 Masashi
Shinbara @shin1x1 スケーラブルな構成 Apache / PHP DB FileSession Log Apache / PHP Apache / PHP
28.
(c) 2014 Masashi
Shinbara @shin1x1 Herokuでの構成 Apache / PHP DB FileSession Log Apache / PHP Apache / PHP Dyno
29.
(c) 2014 Masashi
Shinbara @shin1x1 Herokuでの構成 Apache / PHP DB FileSession Log Apache / PHP Apache / PHP Dyno Dyno Dyno
30.
(c) 2014 Masashi
Shinbara @shin1x1 Herokuでの構成 Apache / PHP DB FileSession Log Apache / PHP Apache / PHP Dyno Dyno Dyno 3 Dynos
31.
(c) 2014 Masashi
Shinbara @shin1x1 Herokuでの構成 Apache / PHP DB FileSession Log Apache / PHP Apache / PHP Add-ons Add-ons
32.
(c) 2014 Masashi
Shinbara @shin1x1 Herokuでの構成 Apache / PHP DB FileSession Log Apache / PHP Apache / PHP
33.
(c) 2014 Masashi
Shinbara @shin1x1 スケーラブルな構成 • Dyno(PHPサーバ)は、ステートレスにする • Dyno を増やしてスケールさせる • アプリケーションデータは、アドオンに置く
34.
(c) 2014 Masashi
Shinbara @shin1x1 データベース • Heroku Postgres(無料枠あり) • 接続情報を環境変数から取得 DATABASE_URL=postgres://xxxxx:yyyyyy@ec2-nnn-nnn- nnn-nnn.compute-1.amazonaws.com:5432/XXXXXXX • parse_url() でパース • アドオンは、ほぼこのパターン
35.
(c) 2014 Masashi
Shinbara @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 Masashi
Shinbara @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 Masashi
Shinbara @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 Masashi
Shinbara @shin1x1 データベース http://qiita.com/shin1x1/items/68732dcf02a93c0a0fbb
39.
(c) 2014 Masashi
Shinbara @shin1x1 ログイン認証(セッション) • Redis でセッション情報を共有 • Redis To Go(無料枠あり) • 接続情報を環境変数から取得 • composer.json で redis を有効に REDISTOGO_URL=redis:// redistogo:
[email protected]
:PORT/
40.
(c) 2014 Masashi
Shinbara @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 Masashi
Shinbara @shin1x1 ログイン認証(セッション) http://qiita.com/shin1x1/items/43181cd0487c72cb87a3
42.
(c) 2014 Masashi
Shinbara @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 Masashi
Shinbara @shin1x1 ログ • ログは、stdout or stderr に出力 • PaperTail などのアドオンで保存 • 複数 Dyno のログをアドオンに集約 • monolog / file_put_contents()
44.
(c) 2014 Masashi
Shinbara @shin1x1 ログ
45.
(c) 2014 Masashi
Shinbara @shin1x1 デモ アクセスする Dyno が違う
46.
(c) 2014 Masashi
Shinbara @shin1x1 デモ アクセスする Dyno が違う
47.
(c) 2014 Masashi
Shinbara @shin1x1 デモ アクセスする Dyno が違う
48.
(c) 2014 Masashi
Shinbara @shin1x1 デモ アクセスする Dyno が違う
49.
大事なこと (c) 2014 Masashi
Shinbara @shin1x1
50.
(c) 2014 Masashi
Shinbara @shin1x1 大事なこと • ファイルに保存したデータは消える!! • デプロイ、環境変数変更等の操作 • 1日1回の再起動時 • アクセスが無い場合、自動停止 (Dyno が 1 台構成だとアクセスが無い時間は、 自動でスリープする)
51.
(c) 2014 Masashi
Shinbara @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.
(c) 2014 Masashi
Shinbara @shin1x1 ファイルが消える • ブラウザでアクセス
53.
(c) 2014 Masashi
Shinbara @shin1x1 ファイルが消える • 何度かリロード
54.
(c) 2014 Masashi
Shinbara @shin1x1 ファイルが消える $ echo “//foo” >> file.php! $ git add file.php; git commit -m “add comment”! $ git push heroku master • 変更して、再デプロイ • ブラウザでアクセスすると、消えている
55.
(c) 2014 Masashi
Shinbara @shin1x1 Herokuとは Heroku では、データファイルは消える
56.
(c) 2014 Masashi
Shinbara @shin1x1 Herokuとは Heroku では、データファイルは消える データは全て外部に逃す
57.
(c) 2014 Masashi
Shinbara @shin1x1 Herokuとは Heroku では、データファイルは消える データは全て外部に逃す スケーラブルなアプリケーションに!!
58.
(c) 2014 Masashi
Shinbara @shin1x1 Heroku では、データファイルは消える データは全て外部に逃す スケーラブルなアプリケーションに!! Herokuは スケーラブルな アプリケーション 矯正ギプス Herokuとは
59.
まとめ (c) 2014 Masashi
Shinbara @shin1x1
60.
(c) 2014 Masashi
Shinbara @shin1x1 まとめ • Heroku は、無料から使える • アドオンの活用が肝 • スケーラブルアプリケーション矯正ギプス
61.
(c) 2014 Masashi
Shinbara @shin1x1 参考 https://devcenter.heroku.com/categories/php
62.
(c) 2014 Masashi
Shinbara @shin1x1 参考 http://tatsu-zine.com/books/heropro
63.
@shin1x1 (c) 2014 Masashi
Shinbara @shin1x1
Download