LoginSignup
80
78

More than 5 years have passed since last update.

Deployerを使ってデプロイしてみたら想像以上に楽だった

Posted at

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より楽な印象です。

80
78
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
78