Upload
yuuki-takezawa
View
25.128
Download
3
Embed Size (px)
Citation preview
PHPデプロイツールの世界2015/10/03 PHPカンファンレンス2015
yuuki takezawa / istyle inc
Deploy?
• ソースコードを本番環境などに設置
• ディレクトリなどに実行権限を与える
• キャッシュの削除
• 業務ルールに則った手順など
デプロイ作業
• FTPによる手動アップロード
• リモートサーバ内のファイルを手動で削除
• rsyncなどによるアップロード
デプロイ方法
PEAR -> Composer
ライブラリなどは プロジェクト毎の管理へ変化
進化するフロントエンド Grunt, Gulp
etc…
様々な手順が自動化
• Composer、npm、bowerなどによる依存ライブラリ管理
• フロントエンドタスクツール
• 継続的インテグレーションによる自動テスト
• 自動化によるヒューマンエラー防止
変わったもの
デプロイも自動化
Develop
Testing
Push
Testing PHPUnit phpspec
Behat Codeception
Deploy Server
staging
productionetc
auto
• ライブラリのインストール
• フロントエンドタスク実行
• 複数のリモートサーバへ接続
• ローカルタスクの実行(rsyncなど)
デプロイツール
Capistrano (Ruby)
Fabric (Python)
PHPに統一したい 難しい etc…
PHP Deploy Tool
• CapistranoのようなデプロイツールMagallanes、Altax、Rocketeer、Deployer
• リモートサーバタスクツールRobo、Envoy
PHP Deploy Tool / Task Tool
• 良質なコンポーネントSymfony Component、The League of Extraordinary Packages etc…
• 自由に組み合わせてツール、ライブラリ開発
• PHP-FIG
Background
これらを元に作られる デプロイツールの世界
• コマンドを実行して構築される世界
• 対話型
• 処理の並列化
• 非同期処理
コンソールアプリケーション
3つのツール
• Envoy (http://laravel.com/docs/5.1/envoy)
• Deployer (http://deployer.org/)
• Rocketeer (http://rocketeer.autopergamene.eu/)
Envoy
• リモートサーバタスクツール
• リモートサーバで実行するコマンドを記述
• Laravelのマニュアルに記述されていますが、親和性はありません
• デフォルトで利用できるタスクは用意されていないため、利用するタスクを記述します
• 並列実行をサポート
Deployer
• リモートサーバタスクツール
• リモートサーバで実行するコマンドを記述
• PHPの主なフレームワークに対応したタスクがあらかじめ用意されています
• PHPに親しんでいる方であれば簡単に利用できます
• 足りないタスクは自由に追加できます
Rocketeer
• Capistranoスタイルで高機能
• デプロイタスクが用意されています
• composerやnpmコマンドなどデフォルトで対応
• Laravelのパッケージとしても利用されるため サービスロケータを多用しているため、少し複雑
• Capistranoのようにある程度学習する必要が有ります
Task実行までのアプローチ
• タスクを記述したファイルを
コンパイル(通常のPHPコードへ変換)
• タスク毎にリモートサーバへ
• symfony/processによる接続
• コマンドを実行
Envoyのアプローチ
Console boot
Envoy.blade.php
Compile
Envoy.php (array) connectTask
• タスクを記述したファイルを読み込む
• タスク毎にリモートサーバへ接続
• phpseclib/phpseclibによる接続
• コールバックでコマンドを実行
Deployerのアプローチ
Console boot
deploy.php(default)
collection
connectTask
• サービスをコンテナへ登録し、タスクを記述したファイルを読み込む
• サービスロケータを介して、タスク毎にリモートサーバへ接続
• phpseclib/phpseclibによる接続
• コマンドを実行
• 複雑
Rocketeerのアプローチ
Console boot
Service Register
connect
Task Queue
Tasks
Configure
Task
Parallel / 並列のアプローチ
• symfony/processによるproc_open
• それぞれのプロセスがタスク実行
• それ以外は通常の実行と全く同じ
• シンプルな並列処理
Envoyの並列アプローチ
Command
process
connectTask
process
connectTask
• ReactPHPを利用した非同期
• proc_openを利用し、各プロセスがタスクを実行
• socketsエクステンションが必須
• elfet/pure(PHP製Key Value Storage)
Deployerの並列アプローチ
Command
process
connectTask
process
connectTask
ReactPHP
Task
• pcntl_forkによるプロセスのフォーク
• 各プロセスがタスクを実行
• pcntlエクステンションが必須
Rocketeerの並列アプローチ
Taskのアプローチ
• 記述したタスクのみを実行
• タスクの前後に処理を行うなどの仕組みはない
• ローカルタスクはタスクごとに記述
Envoyのタスク
• タスク前後の処理は簡単に記述
• Rocketeerはローカルタスクはタスクごとに
• Deployerはローカルタスクをリモートタスク内で実行可能
Deployer,Rocketeerのタスク
同じコンポーネントを 利用しながらも、 アプローチはそれぞれ
異なります
• プロジェクトや運用ルールに合致するものを利用する
• 並列で利用する場合は、依存ライブラリや、エクステンションを調べる
• 独自タスクの追加方法や、メンテナンスなど
• オリジナルのデプロイツールを開発しても良い
ツールを知ること