42
PHPデプロイツールの世界 2015/10/03 PHPカンファンレンス2015 yuuki takezawa / istyle inc

PHPデプロイツールの世界

Embed Size (px)

Citation preview

Page 1: PHPデプロイツールの世界

PHPデプロイツールの世界2015/10/03 PHPカンファンレンス2015

yuuki takezawa / istyle inc

Page 2: PHPデプロイツールの世界

Deploy?

Page 3: PHPデプロイツールの世界

• ソースコードを本番環境などに設置

• ディレクトリなどに実行権限を与える

• キャッシュの削除

• 業務ルールに則った手順など

デプロイ作業

Page 4: PHPデプロイツールの世界

• FTPによる手動アップロード

• リモートサーバ内のファイルを手動で削除

• rsyncなどによるアップロード

デプロイ方法

Page 5: PHPデプロイツールの世界

PEAR -> Composer

Page 6: PHPデプロイツールの世界

ライブラリなどは プロジェクト毎の管理へ変化

Page 7: PHPデプロイツールの世界

進化するフロントエンド Grunt, Gulp

Page 8: PHPデプロイツールの世界

etc…

Page 9: PHPデプロイツールの世界

様々な手順が自動化

Page 10: PHPデプロイツールの世界

• Composer、npm、bowerなどによる依存ライブラリ管理

• フロントエンドタスクツール

• 継続的インテグレーションによる自動テスト

• 自動化によるヒューマンエラー防止

変わったもの

Page 11: PHPデプロイツールの世界

デプロイも自動化

Page 12: PHPデプロイツールの世界

Develop

Testing

Push

Testing PHPUnit phpspec

Behat Codeception

Deploy Server

staging

productionetc

auto

Page 13: PHPデプロイツールの世界

• ライブラリのインストール

• フロントエンドタスク実行

• 複数のリモートサーバへ接続

• ローカルタスクの実行(rsyncなど)

デプロイツール

Page 14: PHPデプロイツールの世界

Capistrano (Ruby)

Fabric (Python)

Page 15: PHPデプロイツールの世界

PHPに統一したい 難しい etc…

Page 16: PHPデプロイツールの世界

PHP Deploy Tool

Page 17: PHPデプロイツールの世界

• CapistranoのようなデプロイツールMagallanes、Altax、Rocketeer、Deployer

• リモートサーバタスクツールRobo、Envoy

PHP Deploy Tool / Task Tool

Page 18: PHPデプロイツールの世界

• 良質なコンポーネントSymfony Component、The League of Extraordinary Packages etc…

• 自由に組み合わせてツール、ライブラリ開発

• PHP-FIG

Background

Page 19: PHPデプロイツールの世界

これらを元に作られる デプロイツールの世界

Page 20: PHPデプロイツールの世界

• コマンドを実行して構築される世界

• 対話型

• 処理の並列化

• 非同期処理

コンソールアプリケーション

Page 21: PHPデプロイツールの世界

3つのツール

• Envoy (http://laravel.com/docs/5.1/envoy)

• Deployer (http://deployer.org/)

• Rocketeer (http://rocketeer.autopergamene.eu/)

Page 22: PHPデプロイツールの世界

Envoy

• リモートサーバタスクツール

• リモートサーバで実行するコマンドを記述

• Laravelのマニュアルに記述されていますが、親和性はありません

• デフォルトで利用できるタスクは用意されていないため、利用するタスクを記述します

• 並列実行をサポート

Page 23: PHPデプロイツールの世界

Deployer

• リモートサーバタスクツール

• リモートサーバで実行するコマンドを記述

• PHPの主なフレームワークに対応したタスクがあらかじめ用意されています

• PHPに親しんでいる方であれば簡単に利用できます

• 足りないタスクは自由に追加できます

Page 24: PHPデプロイツールの世界

Rocketeer

• Capistranoスタイルで高機能

• デプロイタスクが用意されています

• composerやnpmコマンドなどデフォルトで対応

• Laravelのパッケージとしても利用されるため サービスロケータを多用しているため、少し複雑

• Capistranoのようにある程度学習する必要が有ります

Page 25: PHPデプロイツールの世界

Task実行までのアプローチ

Page 26: PHPデプロイツールの世界

• タスクを記述したファイルを

コンパイル(通常のPHPコードへ変換)

• タスク毎にリモートサーバへ

• symfony/processによる接続

• コマンドを実行

Envoyのアプローチ

Page 27: PHPデプロイツールの世界

Console boot

Envoy.blade.php

Compile

Envoy.php (array) connectTask

Page 28: PHPデプロイツールの世界

• タスクを記述したファイルを読み込む

• タスク毎にリモートサーバへ接続

• phpseclib/phpseclibによる接続

• コールバックでコマンドを実行

Deployerのアプローチ

Page 29: PHPデプロイツールの世界

Console boot

deploy.php(default)

collection

connectTask

Page 30: PHPデプロイツールの世界

• サービスをコンテナへ登録し、タスクを記述したファイルを読み込む

• サービスロケータを介して、タスク毎にリモートサーバへ接続

• phpseclib/phpseclibによる接続

• コマンドを実行

• 複雑

Rocketeerのアプローチ

Page 31: PHPデプロイツールの世界

Console boot

Service Register

connect

Task Queue

Tasks

Configure

Task

Page 32: PHPデプロイツールの世界

Parallel / 並列のアプローチ

Page 33: PHPデプロイツールの世界

• symfony/processによるproc_open

• それぞれのプロセスがタスク実行

• それ以外は通常の実行と全く同じ

• シンプルな並列処理

Envoyの並列アプローチ

Page 34: PHPデプロイツールの世界

Command

process

connectTask

process

connectTask

Page 35: PHPデプロイツールの世界

• ReactPHPを利用した非同期

• proc_openを利用し、各プロセスがタスクを実行

• socketsエクステンションが必須

• elfet/pure(PHP製Key Value Storage)

Deployerの並列アプローチ

Page 36: PHPデプロイツールの世界

Command

process

connectTask

process

connectTask

ReactPHP

Task

Page 37: PHPデプロイツールの世界

• pcntl_forkによるプロセスのフォーク

• 各プロセスがタスクを実行

• pcntlエクステンションが必須

Rocketeerの並列アプローチ

Page 38: PHPデプロイツールの世界

Taskのアプローチ

Page 39: PHPデプロイツールの世界

• 記述したタスクのみを実行

• タスクの前後に処理を行うなどの仕組みはない

• ローカルタスクはタスクごとに記述

Envoyのタスク

Page 40: PHPデプロイツールの世界

• タスク前後の処理は簡単に記述

• Rocketeerはローカルタスクはタスクごとに

• Deployerはローカルタスクをリモートタスク内で実行可能

Deployer,Rocketeerのタスク

Page 41: PHPデプロイツールの世界

同じコンポーネントを 利用しながらも、 アプローチはそれぞれ

異なります

Page 42: PHPデプロイツールの世界

• プロジェクトや運用ルールに合致するものを利用する

• 並列で利用する場合は、依存ライブラリや、エクステンションを調べる

• 独自タスクの追加方法や、メンテナンスなど

• オリジナルのデプロイツールを開発しても良い

ツールを知ること