設定
Laravelはリモートサーバーへ接続し、コマンドを実行するシンプルな方法をサポートしています。これによりリモートサーバーで動作するArtisanタスクを簡単に作成することができます。SSH
ファサードはリモートサーバーへの接続とコマンドの実行を提供します。
設定ファイルはapp/config/remote.php
です。すべてのオプションはリモート接続の設定として必要です。connections
配列は、名前をキーとしたサーバーの接続リストです。connections
配列に、ただ接続情報を指定すれば、リモートタスクを実行する準備が整います。SSH
は認証にパスワードかSSHキーが使用できることに注意して下さい。
注目:簡単に、いろいろなタスクをリモートサーバーで走らせたいのですか? なら、Envoyタスクランナーを試してください!
基本的な使用法
デフォルトサーバーでコマンドを実行する
default
リモート接続は、SSH::run
メソッドで使用されます。
SSH::run(array(
'cd /var/www',
'git pull origin master',
));
指定した接続でコマンドを実行する
別の方法として、into
メソッドを使用し、特定の接続でコマンドを実行することができます。
SSH::into('staging')->run(array(
'cd /var/www',
'git pull origin master',
));
コマンドからの出力をキャッシュする
run
メソッドに渡したクロージャーで、リモートコマンドの出力をキャッシュすることができます。
SSH::run($commands, function($line)
{
echo $line.PHP_EOL;
});
タスク
いつも一緒に実行するコマンドのグループを定義したい場合は、define
メソッドでtask
を定義できます。
SSH::into('staging')->define('deploy', array(
'cd /var/www',
'git pull origin master',
'php artisan migrate',
));
タスクが一度定義されると、task
メソッドを使用し実行できます。
SSH::into('staging')->task('deploy', function($line)
{
echo $line.PHP_EOL;
});
SFTPダウンロード
SSH
クラスは、get
とgetString
メソッドを使用し、ファイルをダウンロードするシンプルな方法を、持っています。
SSH::into('staging')->get($remotePath, $localPath);
$contents = SSH::into('staging')->getString($remotePath);
SFTPアップロード
SSH
クラスはファイルか文字列をサーバーにアップロードする簡単な方法を用意しています。put
、putString
メソッドを使用して下さい。
SSH::into('staging')->put($localFile, $remotePath);
SSH::into('staging')->putString($remotePath, 'Foo');
リモートのログ表示
Laravelはリモート接続先にある、laravel.log
ファイルの最新部分を表示する便利なコマンドを用意しています。tail
Artisanコマンドを使用し、最新行を表示したいリモート接続の名前を指定して下さい。
php artisan tail staging
php artisan tail staging --path=/path/to/log.file
Envoyタスクランナー
Laravel Envoy(使節)は、リモートサーバーで定義済みの共通タスクを実行するための、クリーンで最低限の記法を提供します。Bladeスタイルの記述法を使用し、デプロイやArtisanコマンドなどのタスクを簡単にセットアップできます。
注目: Envoyは、PHPバージョン5.4以上で、MacかLinuxのオペレーティングシステム上で動作します。
インストール
最初に、EnvoyをComposerのglobal
コマンドでインストールします。
composer global require "laravel/envoy=~1.0"
envoy
コマンドを端末で実行するときには、envoy
の実行ファイルが起動できるように、~/.composer/vendor/bin
ディレクトリーに、実行パスを通しておくのを忘れないでください。
次に、Envoy.blade.php
ファイルをプロジェクトのルートに作成します。最初のサンプル設定をどうぞ。
@servers(['web' => '192.168.1.1'])
@task('foo', ['on' => 'web'])
ls -la
@endtask
見ての通り、最初に@servers
で、配列を定義しています。これらのサーバーへは、タスク宣言のon
オプションの中で、参照できます。@task
宣言の中に、タスクを実行するサーバーで走らせる、Bashコードを記述します。
init
コマンドを使用し、Envoyファイルのスタブを簡単に作成できます。
envoy init user@192.168.1.1
タスク実行
タスクを実行するには、インストールしたEnvoyで、run
コマンドを実行してください。
envoy run foo
必要であれば、コマンドラインスイッチを使用し、Envoyファイルへ変数を渡すことができます。
envoy run deploy --branch=master
指定したオプションをBlade記法で使用できます。
@servers(['web' => '192.168.1.1'])
@task('deploy', ['on' => 'web'])
cd site
git pull origin {{ $branch }}
php artisan migrate
@endtask
準備コード
@setup
ディレクティブを使えば、Envoyファイルの中で変数宣言をしたり、一般的なPHPコードを動作させたりできます。
@setup
$now = new DateTime();
$environment = isset($env) ? $env : "testing";
@endsetup
また、@include
を使用し、PHPファイルを読み込むことも可能です。
@include('vendor/autoload.php');
複数サーバー
複数のサーバーに渡り、簡単にタスクを実行できます。タスク宣言で、サーバーのリストを指定するだけです。
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])
@task('deploy', ['on' => ['web-1', 'web-2']])
cd site
git pull origin {{ $branch }}
php artisan migrate
@endtask
デフォルトでは、タスクは各サーバーで、順番に実行します。つまり、最初のサーバーで実行が終わったら、次のサーバーの実行へと進みます。
並列実行
複数のサーバー間で、同時にタスクを実行したい場合は、ただparallel
オプションをタスク宣言で指定してください。
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])
@task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true])
cd site
git pull origin {{ $branch }}
php artisan migrate
@endtask
タスクマクロ
マクロでは、一つのコマンドで順番に実行する、一連のタスクを定義します。例えば:
@servers(['web' => '192.168.1.1'])
@macro('deploy')
foo
bar
@endmacro
@task('foo')
echo "HELLO"
@endtask
@task('bar')
echo "WORLD"
@endtask
これで、deploy
マクロは、ひとつのシンプルなコマンドにより、実行されます。
envoy run deploy
通知
HipChat
タスクを実行後、あなたのチームのHipChatルームへ、シンプルな@hipchat
ディレクティブを使用し、通知を送ることができます。
@servers(['web' => '192.168.1.1'])
@task('foo', ['on' => 'web'])
ls -la
@endtask
@after
@hipchat('token', 'room', 'Envoy')
@endafter
また、カスタムメッセージをHipChatルームに指定することもできます。@setup
で変数を直接宣言できますし、@include
でファイルを読み込むこともできます。そうして宣言した変数をメッセージの中で使用できます。
@after
@hipchat('token', 'room', 'Envoy', "$task ran on [$environment]")
@endafter
これは、サーバーでタスクが実行されたことをチームへ必ず通知できる、とてもシンプルな方法です。
Slack
Slackへ通知を送るには、以下の記述法が使用できます。
@after
@slack('team', 'token', 'channel')
@endafter
Envoyのアップデート
Envoyを更新するには、ただ、self-update
コマンドを実行してください。
envoy self-update
/usr/local/bin
にEnvoyをインストールしている場合、sudo
を使用する必要があるでしょう。
composer global update