PHP Deployerとは
PHP で作られたデプロイツール
公式URL: https://deployer.org/
ドキュメント: https://deployer.org/docs
ソースコード:https://github.com/deployphp/deployer
(英語ですがChromeの日本語翻訳を使えばほとんど読めると思います。)
むかしむかし
Gitもまだ使っていない頃、たくさんのPHPやhtml,cssを手動(SFTP)でサーバへアップロードしているのを見てあまりに大変そうなのでサポートするツールを作り便利に使ってもらっていた。
そして数年後
とあるプログラムの改修サポートをしていたらなんだかんだ私がサーバへファイルをアップロードする必要が出てきたので従来の手順通りにやってみたが、やはり手間なのでコマンド一発で終わりにしたいのでデプロイヤーを使おうと思い始める。
なぜ Deployer
いろんなツールを検討したわけじゃないですが普段、PHPに慣れているのとやってみたら必要十分な機能を持っていたので
なぜ? ローカルホストへデプロイ
触りながら
- サーバを持っていない人
- サーバ接続がうまくいかなくて詰まった
- サーバにSSHログインしたあと簡単にデプロイしたい
などDeployerでどんなことができるかはローカルで誰でもさくっとテストできるのではないかということでlocalhostデプロイにしました。
さて導入から (OS Xでやってます)
一応、自分のPHPのバージョン
$ php -v
PHP 7.1.23 (cli) (built: Feb 22 2019 22:19:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
Deployerのダウンロード
公式には
curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
とありますが、 /usr/local/bin へは諸事情あって配置できなかったので
curl -LO https://deployer.org/deployer.phar
mv deployer.phar dep
chmod +x dep
./dep list
でやっても問題なく動きます。 (以下同じフォルダへインストールした状態で進めます)
ちなみに
php dep list
だと+xのパーミッションいりません
curl のオプション -LO ってなに?
- -L, --location
Follow redirects (H)
リダイレクトを追いかける。 - -O, --remote-name
Write output to a file named as the remote file
リモートファイルを書き出す。
何気なしに入力してたけどhelpからおさらいしてみた
curlってなんじゃい?って人も大丈夫
https://deployer.org/download/
の Downloads の一覧からクリックしてダウンロードもできます。(ハッシュ値は念の為、確認しましょう)
何らかの理由で古いバージョンが必要な場合もこのアドレスからどうぞ
(今回は6.6.0を使ってます。)
では使う前に初期化
$ ./dep init
を実行して全ての問になにも入力せずEnterを押してすべてデフォルト設定でテストするには完了です。
(あとから修正、やりなおしもできます)
もし入力を間違えても大丈夫
同じフォルダにdeploy.phpができている時は削除してもう一度initのコマンドを同じようにやり直せば大丈夫です。
deploy.php ができていれば成功です。
テスト用のローカルデプロイにしてみたのを貼っちゃいます。
<?php
// ./dep init で作ってくれたもの
namespace Deployer;
// ./dep init で作ってくれたもの
require 'recipe/common.php';
// プロジェクト名。自分でわかりやすいのを付けましょう。
// set('xxx') はあとの処理で get('xxx') で取得できます。
set('application', 'local-deploy');
// プロジェクトのgitリポジトリを書く(ここにはサンプルにDeployerのリポジトリを書いてます)
set('repository', 'https://github.com/deployphp/deployer.git');
// [Optional] Allocate tty for git clone. Default value is false.
// ここはデフォルトのままにしてますが、git cloneの仕方でtrue or falseを切り替える
set('git_tty', true);
// Shared files/dirs between deploys
// デプロイしても共有するディレクトリ、ログやキャッシュなど必要であれば
set('shared_files', []);
set('shared_dirs', []);
// Webサーバが書き込み可能にするディレクトリ
set('writable_dirs', []);
// 環境を指定しない場合のデフォルトのステージ(環境)
set('default_stage', 'develop');
// 現在のディレクトリ位置を保存する(追加した)
// このようにPHPの関数が使えます。
set('current_dir', realpath(''));
// ロールバックできる世代数
// スペルを間違えると反映されません(sを最後につけ忘れた経験あり)
set('keep_releases', 3);
// ローカルホストに開発環境をデプロイする想定
// 環境は開発、ブランチはnext、デプロイ先は実行しているフォルダにあるdevへ
localhost('local-dev')
->stage('develop')
->set('branch', 'next')
->set('deploy_path', get('current_dir').'/dev')
;
// ローカルホストに本番環境をデプロイする想定
// 環境は開発、ブランチはnext、デプロイ先は実行しているフォルダにあるdevへ
localhost('local-pro')
->stage('production')
->set('branch', 'master')
->set('deploy_path', get('current_dir').'/pro')
;
// Tasks
// 実際のデプロイのフローと説明
desc('Deploy your project to localhost');
task('deploy', [
'deploy:info',
'deploy:prepare',
'deploy:lock',
'deploy:release',
'deploy:update_code',
'deploy:shared',
'deploy:writable',
// 'deploy:vendors', // composerを使っていないのでコメントアウト。他のタスクも自由に入れ替えができます。
'deploy:clear_paths',
'deploy:symlink',
'deploy:unlock',
'cleanup',
'success'
]);
// [Optional] If deploy fails automatically unlock.
// deployが失敗した場合にはunlockを呼び出してね。という設定
after('deploy:failed', 'deploy:unlock');
// 自分で足したHelloWorld
// ./dep hello
// で実行できます
desc('Hello world');
task('hello', function() {
// Hello Worldと出して終わり
writeln('Hello world');
});
デプロイテストをする前にデプロイ先となるフォルダを作成する
デプロイ先のフォルダを作成する。
$ mkdir dev pro
$ ls
dep deploy.php dev pro
こんな配置になります。
開発想定へデプロイ
$ ./dep deploy develop
defaultをdevelopにしてるので最後のdevelopは省略可能です。
本番想定へデプロイ
$ ./dep deploy production
以下のように必要ないコマンドを削除、コメントアウトしたり、足したり、名前を変えたりできます。
task('depuroi', [
'deploy:info',
'hello', // 追加
'deploy:prepare',
'deploy:lock',
'deploy:release',
'deploy:update_code',
// 'deploy:shared', // 外してみた
// 'deploy:writable',// 外してみた
// 'deploy:vendors', // composerを使っていないのでコメントアウト。他のタスクも自由に入れ替えができます。
'deploy:clear_paths',
'deploy:symlink',
'deploy:unlock',
'cleanup',
'success'
]);
タスクの名前を変更しているので、この場合の実行はこのように実行します。
$ ./dep depuroi
デプロイ完了
作業しているところのdev,proにそれぞれGitHubのDeployerのブランチ違いがデプロイされてると思います。
順調にできたら
Stage環境の追加をやってみる
stgフォルダとstage環境の設定を追加してデプロイしてみてください。
もし分からなくなったら
作ってたフォルダを削除して最初からやり直せば大丈夫です。
次はドキュメントへ
一度、動けばイメージが湧くと思うのでドキュメントを見てみてください。
あとはこの処理どうなってるんだろうというのはGitHubの検索で入力すると処理が閲覧できてドキュメントと一緒に見ると分かりやすいです。
なお、社内のぜんぜん違うプロジェクトのdeploy.phpでは全く記述内容が違ったので人それぞれですので正解はありません!
ちゃんと思ったとおりデプロイできることが正解です!
サーバがある人は
サーバへの接続はネットにいろいろ情報があるので挑戦してみてください。