首先,让我们安装 Deployer(https://deployer.org/docs/installation)。在终端中运行以下命令:
curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
现在我们可以通过 dep 命令使用 Deployer。在我们的项目目录下打开一个终端,运行:
dep init
该命令将会在当前目录下,创建一个 deploy.php 文件。它被称为 recipe(配方),包含了部署相关的配置和任务。默认情况下,所有的配方都继承了 common 配方(https://github.com/deployphp/deployer/blob/master/recipe/common.php)。将 deploy.php 文件置于我们项目的根目录下,并键入 dep 或 dep list 命令。可以看到所有可用的任务列表。
我们可以在项目的任何子目录运行 dep 命令。
定义任务非常简单:
task('test', function(){
writeIn('Hello world');
});
要运行上面定义的任务,运行:
dep test
它将输出:
➤ Executing task test
Hello world
✔️Ok
现在,让我们创建一个任务,该任务将运行远程主机上的命令。为此,我们必须配置 deployer。我们新创建的 deploy.php 文件应该包含一个类似下面的 host 声明:
host('domain.com')
->stage('production')
->set('deploy_path', '/var/www/domain.com')
也可以在单独的 yaml 文件中声明 hosts。查看更多关于 inventory 的信息(https://deployer.org/docs/hosts#inventory-file)。
我们可以在这里,查看更多关于 host 配置的信息(https://deployer.org/docs/hosts)。现在,让我们定义一个任务,该任务将从远程主机上输出一个 pwd 命令:
task('pwd', function(){
$result = run('pwd');
writeIn("Current dir: $result");
});
运行 dep pwd,将输出:
➤ Executing task pwd
Current dir: /var/www/domain.com
✔️Ok
现在让我们为第一次部署做准备。我们需要配置,诸如 repository、shared_files 以及其它参数:
set('repository', 'git@domain.com:username/repository.git');
set('shared_files', [...]);
我们可以使用 get 函数,返回每个任务中参数值。此外,我们可以覆盖每个 host 的每个配置:
host('domain.com')
...
->set('shared_files', [...]);
查看更多关于 'configuring' 部署的信息(https://deployer.org/docs/configuration)
现在让我们来部署我们的应用:
dep deploy
要在输出中包含额外的详细信息,我们可以使用 --verbose 选项来增加详细信息:
-v - 普通输出
-vv - 更详细输出
-vvv - 调试
Deployer 会在主机上创建以下目录:
releases - 包含发布版本的目录
shared - 包含共享的文件和目录
current - 当前发布版本的符号链接
配置主机来服务 current 的 public 目录
注意,deployer 默认使用 ACL(https://en.wikipedia.org/wiki/Access_control_list) 来设置权限。我们可以使用 writable_mode 配置来改变该默认行为。
默认情况下,deployer 保持最新的 5 个发布版本,但是我们可以通过修改相关的参数,来增加该数值:
set('keep_releases', 10);
如果在部署过程中发生错误,或新发布版本出错,可以简单地运行以下命令来回滚到之前的工作发布版本:
dep rollback
我们可能希望在某些任务,之前/之后 运行一些任务。配置非常简单!
让我们在 deploy 完成后,重载 php-fpm:
task('reload:php-fpm', function(){
run('sudo /usr/sbin/service php7-fpm reload');
});
after('deploy', 'reload:php-fpm');
如果我们需要连接到主机,Deployer 有一个快捷访问方式:
dep ssh
该命令将连接到指定的主机,并切换到 current_path。
查看更多关于 '配置部署' 的信息(https://deployer.org/docs/configuration)