1. Deployerのインストール
公式を見ると書いてありますが、インストールは3種類用意されてます。
- ダウンロード
- compoer
- ソースからビルド
今回は直接DLしてきて使ってみます。
$ wget http://deployer.org/deployer.phar
$ mv deployer.phar /usr/local/bin/dep
$ chmod +x /usr/local/bin/dep
2. タスクを書いてみる
Tasksに書いてあるとおり、
Deployerで行うタスクは、deploy.php
に記載出来ます。
試しに1つ作ってみます。
<?php
task('my_task', function() {
});
タスクを実行するには、dep [task name]
でOKです。
$ dep my_task
✔ Executing task my_task
group
1つのコマンドで、複数のタスクを実行するgroup
というのも使えるみたいです。
task('deploy', [
'deploy:prepare',
'deploy:update_code',
'deploy:vendors',
'deploy:symlink',
'cleanup'
]);
多分これ使う事が多いです。
で、実際のデプロイは、dep deploy production
とか。
beforeとafter
タスクの前後にタスクを実行することも可能です。
<?php
task('deploy', function() {
})->desc('doin my stuff');
// デプロイ前のタスク
task('deploy:before', function() {
write('Deploy start');
});
// デプロイ後のタスク
task('deploy:done', function() {
write('Deploy done!');
});
// deployの前後に実行するタスクを設定しておく
before('deploy', 'deploy:before');
after('deploy', 'deploy:done');
$ dep deploy
➤ Executing task deploy:before
Deploy start✔ Ok
✔ Executing task deploy
➤ Executing task deploy:done
Deploy done!✔ Ok
Only On
特定の環境だけで行いたいようなタスクがある場合、onlyOnを使うと実現出来るそうです
<?php
task('test', function() {
})->onlyOn('test_server');
// 複数のサーバで実行することも可能
task('test2', function() {
})->onlyOn(['pre1_server', 'pre2_server']);
3. deploy先のサーバ情報を設定する
公式を参考にするとこのような感じになってます。
server('prod_1', 'domain.com')
->user('user')
->password('pass')
->env('deploy_path', '/home/www')
->stage('production');
server('prod_2', 'domain.com')
->user('user')
->password('pass')
->env('deploy_path', '/home/www')
->env('extra_stuff', '...')
->stage('production');
ポイント
- 複数の対象サーバを設定することができる
- 公開鍵認証でもパスワード認証でもどっちでも可
- 実はサーバ用の設定を書いたyamlファイルを書いて、それを読み込むだけでもOK
deploy.php
<?php
serverList('app/config/servers.yml');
app/config/servers.yml
dev:
host: your-host.com
user: release
identity_file:
public_key: "~/.ssh/id_release.pub"
private_key: "~/.ssh/id_release"
password: "key-password"
stage: dev
deploy_path: "/var/www"
branch: dev
こんな感じですね。
デプロイ前に必ずやっとくこと
- デプロイするサーバから、デプロイ先のサーバにsshで接続するようのユーザを作る
- 公開鍵認証にするなら公開鍵を、デプロイ先サーバの
.ssh/authorized_keys
に追加しとく - デプロイ時に必要なコマンドにsudo権限が必要な場合は、デプロイユーザにパスワードナシのsudo権限を与えておく必要があります
- 下記を参照
# visudo
下記を追記
deploy-user ALL=NOPASSWD: ALL
※ ただ、これだとパスワードナシですべてのコマンドが実行可能になるため、乗っ取られた時のリスクが高いです
特定のコマンドだけにsudo権限を与えるには下記のように書きます
`deploy-user ALL=NOPASSWD: [コマンドのパス]`
`deploy-user ALL=NOPASSWD: [コマンドのパス]`
いざデプロイ!
$ dep deploy production
これで完了です。
超カンタンで、capistranoより楽な印象です。