phpのデプロイツールdeployerでcakephp3のデプロイを試してみる

phpのデプロイツールdeployerを試してみる。
今回はcakephp3をデプロイしてみるイメージ。
リポジトリはsvnで。

vagrant で、3台のゲストサーバを用意する。

踏み台用 192.168.33.10
デプロイ先用1台目 192.168.33.11
デプロイ先用2台目 192.168.33.12
踏み台にログインして任意の場所にディレクトリを作成する
$ mkdir deploy
$ cd deploy
最新のdeployer.pharファイルをダウンロードしコマンド化する
$ wget https://deployer.org/releases/v4.0.2/deployer.phar
$ sudo mv deployer.phar /usr/local/bin/dep
$ sudo chmod +x /usr/local/bin/dep
設定ファイルを用意する
$ vi deploy.php

----
user('vagrant')
    ->password('vagrant');

// サーバログイン設定2
server('web2', '192.168.33.12', 22)
    ->user('vagrant')
    ->password('vagrant');

// 変数にデプロイ時刻を保存
set('dateYmdHis', date('Ymd_His'));

// httpd.confの環境変数からシンボリックリンクのパスを決定する
switch (getenv('CAKEPHP_ENV')) {
    case 'prod':
        set('linkPath', '/var/www/html/prod');
        break;
    case 'stg':
        set('linkPath', '/var/www/html/stg');
        break;
    default:
        set('linkPath', '/var/www/html/dev');
}

// デプロイ($ dep deploy)
task('deploy', function() {
        writeln('deploy: start');

        $svn_path = '';
        $dir_create_date = get('dateYmdHis');
        $dep_path = '/var/www/release/' . $dir_create_date;
        $link_path = get('linkPath');
        $result = run("sudo svn export {$svn_path} {$dep_path}");
        $result = run("sudo chmod -R 777 {$dep_path}/tmp");
        $result = run("sudo chmod -R 777 {$dep_path}/logs");
        run('sudo systemctl stop httpd.service');
        $result = run("sudo ln -nfs {$dep_path} {$link_path}");
        run('sudo systemctl start httpd.service');

        writeln('deploy: finish');
});

// ロールバック($dep rollback)
task('rollback', function() {
        writeln('rollback: start');
        $old_dir_create_date = run("sudo ls /var/www/release | tail -2 | head -1");
        $dep_path = '/var/www/release/' . $old_dir_create_date;
        $link_path = get('linkPath');
        run('sudo systemctl stop httpd.service');
        $result = run("sudo ln -nfs {$dep_path} {$link_path}");
        run('sudo systemctl start httpd.service');
        writeln('rollback: finish');
});
----

デプロイを実行
$ dep deploy

ロールバックを実行
$ dep rollback

なお、デプロイ先のサーバで svn(とかgit) コマンドがインストール済みで、かつ一度svnコマンドを実行して(p)とかを押している必要あり。

参考
https://deployer.org/