heroku meets php

39
Heroku meets PHP 株株株株 chatbox 株株株株 @mkkn_info PHPer Loves Heroku #0 http://heroku-pug.connpass.com/event/20197/ 2015.10.15

Upload: mikakane

Post on 24-Jan-2017

537 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Heroku meets php

Heroku meets PHP株式会社 chatboxみかかね @mkkn_info

PHPer Loves Heroku #0http://heroku-pug.connpass.com/event/20197/2015.10.15

Page 2: Heroku meets php

about meみかかね @mkkn_info#PHPer, フロントエンド# 株式会社 chatbox 代表# 関西フロントエンド UG 代表

PHP やフロントエンド、コミュニティ運営に興味のあるメンバー募集中 !! 詳細は Wantedly にてhttps://www.wantedly.com/projects/30531

facebook: 後藤知宏

twitter: @mkkn_info

Page 3: Heroku meets php

Heroku

Page 4: Heroku meets php

PHP 対応の PaaS

Page 5: Heroku meets php

PaaS

Page 6: Heroku meets php

PaaS とは、インターネットを利用したコンピュータの新しい利用形態の 1 つである。PaaS では、ソフトウェアを構築および稼動させるための土台となるプラットフォームを、インターネット経由のサービスとして提供する。開発者は、プラットフォーム上で構築したサービスを自分の顧客に提供することができる。 具体的には、インフラ、 DBMS 、ユーザインタフェースなどのシステム開発手段となるツールや、開発したシステムを運用するための環境をインターネットを通じて「サービス」として提供し、月額使用料などの形で収入を得る事業モデルである。Wikipedia Platform as a Service より

Page 7: Heroku meets php

             /)           ///)          / ,.= ゙ ''" /   /     i f   ,.r='"-‐' つ___ _    こまけぇこたぁいいんだよ!!   /       /     _,.-‐'~ /⌒  ⌒\    /    ,i     , 二ニ⊃( ●) .  (●)\    /     ノ    il ゙フ ::::::⌒ ( __ 人 __ )⌒ ::::: \       , イ「ト、   ,!,!|       |r┬-|       |      /   i トヾヽ _/ ィ " \      ` ー '´     /

Page 8: Heroku meets php

つまり、インフラ構築が楽になる。

Page 9: Heroku meets php

どれくらい楽になるか。

Page 10: Heroku meets php

it’s demo

Page 11: Heroku meets php

Herokuインフラ構築が楽になる。

Git 管理の push して即デプロイサーバの構築に係る作業はほぼゼロ

サーバの設定確認や調整は Web 画面のほか、Heroku toolbelt と呼ばれる CLI ツールで行える。

https://toolbelt.heroku.com/

Page 12: Heroku meets php

Heroku おいしいところ# addon 等を使用して色々なミドルウェアを 簡単に用意できる。# サーバの調整も手軽に行える。# 無料から利用できるのでテストサーバに最適。# git 連携でデプロイがより楽になる。# 自然とスケーラブルな PHP の書き方が身につく。

Page 13: Heroku meets php

Heroku AddonsHeroku 上で利用可能な

様々なミドルウェアを提供するサービス

データベースや Redis, ログ監視 ,Storage や Mail などのサービスが簡単に利用可能に

Heroku の SaaS 的な側面

https://addons.heroku.com/

Page 14: Heroku meets php

Heroku Storage# MySQL ( ClearDB , JawsDB)# Postgres ( Heroku Postgres )# Redis (OpenRedis, Redis To Go, Redis Cloud)# Memcached # FileStorage (FilePicker, Cloudinary) もちろん構築はボタン一つでインフラの知識は不要バックアップもスケールもお金で解決 !!

Page 15: Heroku meets php

Heroku TuningPaaS といえども多様なサーバ構成を選択可能

Addon を利用した構成から PHP の細かい調整まで。

そもそも heroku では、PHP に限らず多様な言語 & Docker をサポートする

Buildpack や Docker デプロイを利用すれば無限の可能性

Page 16: Heroku meets php

Addons# cron -> Heroku Scheduler# Monitoring -> New Relic# Logging -> papertrail# Mail -> sendgrid# SSL -> SSLSSH で yum を使って…という構成は取れないが、Addon を使ってかなり多様な事はできるようになっている。

Page 17: Heroku meets php

PHP の構成composer.json を利用して PHP の構成もセットアップ可能composer.json の require に記載した項目はデプロイの際に自動的にセットアップされる。# php version# php extention# dependency libraries

Page 18: Heroku meets php

力技Buildpack を使用して、ビルドフェーズの構成はむりくり調整可能な模様…?PHP 環境のセットアップには公式の PHP 用 Buildpack が用いられている。https://github.com/heroku/heroku-buildpack-phpその他各種言語の公式 Buildpack や AWS CLI などの各種ライブラリをサポートする野良 Buildpack など様々なものを利用可能。

Page 19: Heroku meets php

デプロイの仕組みheroku 上では composer.json を検出して PHP 用の Buildpack が自動的に採用される。同様の理由で package.json があると node 用のBuildpack が自動的に採用される。( 優先順位は PHP よりも上 !!)自動での認識がされない場合には以下のコマンドを叩くと良い。$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-php

Page 20: Heroku meets php

Multi Buildpack の利用MultiBuildpack を利用して、複数の Buildpack を利用する事が可能。

Git のルートに `.buildpacks` というファイルを置いて利用する Buildpack の URL を複数記述していく。

$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-multi

https://github.com/heroku/heroku-buildpack-nodejshttps://github.com/heroku/heroku-buildpack-php

npm でフロントビルド系の処理をしながら PHP アプリケーションを起動したい場合など。

Page 21: Heroku meets php

Heroku Pricingつい最近料金体系の変更がありました。

料金に関する古いブログ記事の内容には注意

無料プランでは、6時間のスリープが強制にそれでも月 $7 支払えば

スケール可能な PaaS クラウドが運用可能になるのは十分魅力的?

https://www.heroku.com/pricing

Page 22: Heroku meets php

Heroku Pricing # 課金の基準は dyno 基準で# Worker インスタンスは Postgres ( Heroku Postgres )# Redis (OpenRedis, Redis To Go, Redis Cloud)# Memcached # FileStorage (FilePicker, Cloudinary) もちろん構築はボタン一つでインフラの知識は不要バックアップもスケールもお金で解決 !!

Page 23: Heroku meets php

dyno# heroku におけるインスタンスの数え方#Web アプリケーション用に立てる Web Dyno# バックグラウンド処理などで用いる Worker Dyno#Scheduler や ssh などで使用する One Off Dyno

新料金体制で One Off Dyno については無料になったらしい ( もう SSH 接続で時間を気にしなくていい !!)

使用する Dyno の性能、数で料金が変わる。

Page 24: Heroku meets php

Heroku Free Dyno# 30 分アクセスが無いと SLEEP に入る# 24 時間で 6 時間 は必ず SLEEP するようになった。#Web dyno x 1#Worker dyno も一つ無料でついてくる。

新料金体制で ssh で入る dyno や scheduler から起動される one off dyno については無料になったらしい。

Page 25: Heroku meets php

Heroku with GithubGithub 連携で Heroku のデプロイはより便利に

Heroku の権限管理周りを Github で一元管理できるので便利Github と Heroku にわざわざ二回 push する手間が省ける。

指定したブランチへの push をキーに、heroku のデプロイを自動的に行なってくれる。

Page 26: Heroku meets php

Heroku Deploy Hooks

# HipChat へのメッセージ送信#Email の送信#IRC へのメッセージ送信#HTTP Post へのリクエスト送信# その他 Basecamp,Campfire といったサービス連携も

Heroku の無料 addonDeploy に対応して複数の Hook 処理を指定できる。

Page 27: Heroku meets php

Heroku with PHPPHP is not Legacy.

最近ではフレームワークでもスケールを意識した機能をサポートしているのが当たり前に

PHP の今風な書き方、の機能をインフラ構築に関する学習コストゼロでフル活用する。

PHP アプリケーションの今風で柔軟な構築手法を知る。クラウドを見据えたアプリケーション構築

Page 28: Heroku meets php

What’s Scalable# 設定をアプリケーション外部から注入可能# 実装をアプリケーション内部で切り替え可能

ローカル環境、テスト環境、商用環境などサーバの厚生に応じて、それぞれに最適な異なる処理を一つのソースで実現する。

環境に応じて、異なる値を設定値として利用できる。設定値を利用して、ログや DB などの処理を自動的に切り替えることが可能。

Page 29: Heroku meets php

実装の切り替え# Database 関連# Session , Cache 関連# Upload 系のデータ、 Dump 関連のデータ# ログデータの出力先他にも外部サービスに依存するメール送信などの処理も環境に応じて切り替え可能だとかなり便利。

ストレージ周りの切り替えはかなり重要になってくる。

Page 30: Heroku meets php

dotenvPHP における「環境による設定値の切り替え」

.env という dot ファイルを利用してシステム環境変数を上書きする仕組み主にローカル開発環境で利用する。

Laravel 系列のフレームワークでは標準的に用いられている。https://github.com/vlucas/phpdotenv

Page 31: Heroku meets php

dotenv の運用

ローカル開発環境での構築時に環境変数をアプリケーションに合わせて触るのは辛いので、 .env ファイルに値を書いて、 dotenv で実行時のみ `$_SERVER` 変数を上書きする。 → 本番サーバ等では .env は白紙の状態で運用。

環境ごとに異なる値を環境変数から参照するようにシステムを構築していく。 → heroku の環境変数は `heroku config:set` で設定 → 環境変数は `$_SERVER` から取得可能

Page 32: Heroku meets php

実装の切り替えPHP にはインターフェイスがある。

必要な機能の振る舞いをインターフェイスで書いて、処理をサーバ毎に振り分けていくログ系の集積やメールの送信など

http://tanakahisateru.hatenablog.jp/entry/20120228/1330431278

Page 33: Heroku meets php

実装の切り替え環境変数に応じて if 文で処理のブロックを切り替えていくのは、シンプルだがコードが見づらい。$env = env(“APP_ENV”);If($env === “local”){ // // ローカル環境での処理 //}elseif( $env=== “stage”){ // // テスト環境での処理 //….

Page 34: Heroku meets php

実装の切り替え環境変数の値をキーに処理クラスを生成するようなサービスを定義し、インターフェイスで共通化されたメソドを呼び出す。$mailSender = MailSender::create(env(“APP_MAILSENDER”));$mailSender->send();

あとから環境を追加したり、環境ごとに異なる処理を入れたくなった時などに変更がスムーズ。

Page 35: Heroku meets php

Heroku Trouble ShootingPaaS に慣れていないと色々詰みポイントは多い。

作ったファイルが消えるなどインスタンス周りのトラブルはやっぱり多い。

普通に SSH で入れる VPS 環境と違い、Heroku の Web Dyno には ssh で入ることすら不可。

あと、リージョン外からのアクセスはやはり遅い( ローカルから DB への接続など )

Page 36: Heroku meets php

Let’s Begin!!# 少ない学習コストでクラウドに触れてみたい。# 煩わしいインフラ管理の手間から開放されたい。# 俺はインフラの人じゃない !! PHP エンジニアだ !!

とりあえず無料から利用可能なので、デモサイトやSlack Bot などのテストアプリに。

こんな人にオススメ。

Page 37: Heroku meets php

わからないこと、困ったことは、Heroku PUG(Heroku PHP User Group)

に相談してみよう !!

Page 38: Heroku meets php

新しく知ったこと、気づいたことはHeroku PUG(Heroku PHP User Group)

で発表してみよう !!

Page 39: Heroku meets php

是非、よろしくお願いします。