同じLaravelのプログラムを複数のサイトにインストールしていると、いちいちそれらのサイトにsshしてプログラムの変更のインストール(デプロイ)が面倒になってきます。こんなときに、とっても助けとなるのがDeployer。今回はそのツールの紹介です。
Deployerのインストール
まず、Laravelのプロジェクトにdeployerをインストール。$ composer require deployer/deployer --dev
インストール後に、vendor/bin/depが作成されます。 このコマンドは頻繁に使用されるので、bashの初期設定のファイルに~/.bashrcに以下のようにエイリアスを入れて、
...
alias dep='vendor/bin/dep'
...
以下を実行します。
. ~/.bashrc
これで、コマンドラインでdepだけで実行できます。
Deployerの初期化
Deployerは、先のdepのコマンドを使用してタスクを実行するために、プロジェクトのルートディレクトリにdeployer.phpのファイルが必要です。 そのファイルの作成には以下を実行します。
$ dep init
以下のように選択肢が表示され順に答えていきます。最後のHosts以外はデフォルト(括弧の中に表示されている)を選択しています。
Select recipe language [php]:
[0] php
[1] yaml
>
Select project template [common]:
[0 ] cakephp
[1 ] codeigniter
[2 ] codeigniter4
[3 ] common
[4 ] composer
[5 ] contao
[6 ] craftcms
[7 ] drupal7
[8 ] drupal8
[9 ] flow_framework
[10] fuelphp
[11] joomla
[12] laravel
[13] magento
[14] magento2
[15] pimcore
[16] prestashop
[17] provision
[18] shopware
[19] silverstripe
[20] spiral
[21] statamic
[22] sulu
[23] symfony
[24] typo3
[25] wordpress
[26] yii
[27] zend_framework
>
Repository [git@github.com:larajapan/example.git]:
>
Project name [example]:
>
Hosts (comma separated) []:
> www.larajapan.com,staging.larajapan.com
Successfully created deploy.php
作成されたdeployer.phpは、
namespace Deployer;
require 'recipe/common.php';
// Config
set('repository', 'git@github.com:larajapan/example.git');
add('shared_files', []);
add('shared_dirs', []);
add('writable_dirs', []);
// Hosts
host('www.larajapan.com')
->set('remote_user', 'deployer')
->set('deploy_path', '~/example');
host('staging.larajapan.com')
->set('remote_user', 'deployer')
->set('deploy_path', '~/example');
// Hooks
after('deploy:failed', 'deploy:unlock');
上での設定は、 ・ depでsshでdeployerのユーザーとしてアクセス可能なホストが2つある。www.larajapan.comとstaging.larajapan.com ・ どちらのホストもLaravelのアプリは、~/exampleのディレクトリにある です。
deployer.phpは、もちろん手動で編集可能なので上の設定ではいくらでも変更が可能です。
複数のサイトにいっぺんにアクセス
準備ができたところ、早速以下を実行してみてください。
$ dep run date
ホストの選択肢が表示されます。1番目つまり0を選択するとそのホストへsshしてdateコマンドを実行します。
Select hosts: (comma separated)
[0] www.larajapan.com
[1] staging.larajapan.com
> 0
[www.larajapan.com] Thu Mar 26 08:07:54 JST 2026
選択が面倒なら、コマンドラインでもホストを指定できます。
$ dep run date www.larajapan.com
さらに、長いホスト名のタイプが面倒なら、deployer.phpを編集して、ホストのエイリアスを指定できます。
// Hosts
host('production')
->setHostname('www.larajapan.com')
->set('remote_user', 'deployer')
->set('deploy_path', '~/example');
host('staging')
->setHostname('staging.larajapan.com')
->set('remote_user', 'deployer')
->set('deploy_path', '~/example');
とすれば、
$ dep run date production
と実行できます。
最後に、定義されている全部のサイトで実行したいなら、allを渡します。
$ dep run date all
[production] Thu Mar 26 08:12:02 JST 2026
[live] Thu Mar 26 08:12:04 JST 2026
便利ですね。
ホスト情報をYAMLファイルにする
ホストが2つくらいなら、deploy.php内でのホストの定義で十分ですが、これが10個もなると読みづらくなります。 そのような場合は、ホストの定義をYAMLのファイルに抽出して分けることが可能です。
hosts:
production:
hostname: www.larajapan.com
remote_user: deployer
deploy_path: ~/example
staging:
hostname: staging.larajapan.com
remote_user: deployer
deploy_path: ~/example
定義があった元の部分では、以下のようにimportに置き換えます。
// Hosts
import('hosts.yml');
整理されてすっきりしました。