介绍
Deployer 是一个基于 SSH 协议的无侵入 web 项目部署工具,因为它不需要你在目标 服务器 上装什么服务之类的东西即可使用,它只需要在你的开发机,或者你的笔记本,就是发起部署动作的一方安装即可。
它的原理就是通过 SSH 到你的机器去创建目录,移动文件,执行指定的动作来完成项目的部署。
Deployer 不但可以部署php项目,也可以部署其他语言醒目
deployer 的优势
真正解放双手,一条命令完成部署。
进行部署的过程中,项目仍然能够正常访问。部署成功完成后才切到新的版本。
能十分方便地进行回滚。
丰富任务钩子和预置任务可灵活的组合完成各种任务,比如执行前端依赖的安装、构建等。
使用 deployer 的前提条件
本地机器(也就是你执行 dep 命令时所在的机器)能够 SSH 连接到目标机器
指定用户有登录目标机器并调整一些设置的权限
目标主机有拉取项目仓库的权限
使用说明
1、安装
curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
2、生成部署脚本代码
切换到要部署的项目目录下,执行以下命令
dep init
此时会在改目录下生成 deploy.php文件
3、使用说明
未便于管理最好再创建文件deploy.config.php文件,提出公共配置,便于维护部署脚本。
实例:
以deploy部署go语言项目为例:
deploy.config.php
<?php
return [
'application' => 'miner-proxy', # 进程名称
'git' => 'git@bitbucket.org:miner/miner-proxy.git',
'branch' => 'master',
'deploy_path' => '/alidata/deploy/miner-proxy',
'servers' => [
'proxy0' => '192.134.45.45',
'proxy1' => '192.45.67.8',
'proxy2' => '193.168.45.67',
],
'rsync' => [
'rsync -avz /alidata/deploy/miner-proxy/current/build/bin/* public@{ip}:/alidata/service/miner-proxy/',
'rsync -avz /alidata/deploy/miner-proxy/current/build/supervisord.conf public@{ip}:/alidata/service/miner-proxy/'
]
];
deploy.php
<?php
namespace Deployer;
require 'recipe/common.php';
$config = require 'deploy.config.php';
// 项目名
set('application', $config['application']);
// 项目仓库地址
set('repository', $config['git']);
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);
// Shared files/dirs between deploys
set('shared_files', []);
set('shared_dirs', []);
// Writable dirs by web server
set('writable_dirs', []);
set('keep_releases', 5);
$stage = $_SERVER['argv'][2];
if(!array_key_exists($stage, $config['servers'])){
exit('stage ' . $stage . ' 不存在');
}
# 目标主机配置
# 192.168.45.67 机器作为程序构建机器
# 不要用root用户,新创建一个普通用户用作部署,在部署之前设置好改账号的各个目录权限
host('192.168.45.67')
->user('test')
->set('branch', $config['branch']);
->stage($stage)
->set('deploy_path', $config['deploy_path']);
// Tasks
desc('Deploy super-miner-proxy project');
task('deploy', [
'deploy:info',
'deploy:prepare',
'deploy:lock',
'deploy:release',
'deploy:update_code',
'deploy:shared',
'deploy:writable',
'deploy:clear_paths',
'deploy:symlink',
'deploy:unlock',
'cleanup',
'success'
]);
# 自定义任务
# 构建任务
task('make', function () use ($config, $stage) {
run('cd ' . $config['deploy_path'] . '/current && (export PATH=$PATH:/usr/local/go/bin;make)');
});
# 打包同步任务,最好先压缩再同步
task('rsync', function () use ($config, $stage){
foreach ($config['rsync'] as $val){
$val = str_replace('{ip}', $config['servers'][$stage], $val);
run($val);
}
});
# 可执行程序同步完成后重启进程
# 对于需要sudo操作的命令,可以在指定机器上设置该命令免密
task('restart', function () use ($config, $stage) {
run('ssh test@' . $config['servers'][$stage] . ' "sudo /usr/bin/supervisorctl restart ' . $config['application'] . '"');
});
# 如果部署失败,自动解除部署锁定状态,以免影响下次执行
after('deploy:failed', 'deploy:unlock');
# 部署
after('deploy', 'make');
# 回退
after('rollback', 'make');
# 同步
after('make', 'rsync');
# 重启
after('rsync', 'restart');
注意
对于 deploy:update_code 使用Git下载新版本的代码。如果您使用的是Git 2.0版,并且git_cache config已打开,则此任务将使用先前发行版中的文件,因此仅下载更改的文件。否则重新clone 代码。
执行部署命令
部署:
dep deploy {stage} -vvv
回退:
dep rollback {stage} -vvv
当你第一次成功部署的时候, Deployer 会自动帮你在服务器上生成一下文件:
releases 包含你部署项目的版本(默认保留 5 个版本)
shared 包含你部署项目的共享文件或目录(如:Laravel 的 Storage 目录、.env 文件等 )
current 软连接到你当前发布的版本
官方文档地址
其他设置点可以通过以下网址查看