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)とかを押している必要あり。