# Deployer 部署工具
# 介绍
Deployer 是一个使用 PHP 开发的轻量级项目部署工具,Deployer 不需要在目标服务器上安装任何客户端即可使用,它的原理是通过 SSH 登录到目标服务器,然后执行脚本中定义好的 Shell 命令。
同时 Deployer 内置了一批常见项目、框架的部署脚本,例如 Laravel、WordPress 等等,当我们需要部署相关项目时,只需要调整一些参数就可以直接使用。
# 安装
安装部署器有三种方法:
- 下载 phar 存档
- Composer 安装
- 局部 Composer 安装
# 下载 phar 存档
要将部署器安装为 phar 存档,运行以下命令:
curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
如果您需要另一个版本的 Deployer,您可以在下载页面上找到它。稍后,要升级 Deployer,运行命令:
dep self-update
要升级到下一个主要版本(如果可用),请使用该选项:--upgrade (-u)
dep self-update --upgrade
# composer 安装
要将 Deployer 源版本与 composer 一起安装,运行命令:
composer require deployer/deployer --dev
您也可以在全局范围内安装它:
composer global require deployer/deployer
如果之前已经安装过 deployer,请再次执行这个命令以更新到最新版。
更多信息: https://getcomposer.org/doc/03-cli.md#global
然后要使用 Deployer,请运行以下命令:
php vendor/bin/dep
如果您使用这两种方法安装了Deployer,则运行命令将更喜欢 composer 安装的版本。
dep
如果您有依赖冲突,您可以使用"分布 Composer 安装"
# 分布 Composer 安装
要用 Composer 安装 Deployer 分布 版本,运行命令:
composer require deployer/dist --dev
然后要使用 Deployer,请运行以下命令:
php vendor/bin/dep
# Laradock 安装
打开
.env
文件搜索
WORKSPACE_INSTALL_DEPLOYER
将其设置为true
WORKSPACE_INSTALL_DEPLOYER=true
重新构建这个容器
docker-compose build workspace
# 打包 phar
如果您想从源代码构建部署程序,则从 GitHub 克隆项目:
git clone https://github.com/deployphp/deployer.git
然后在项目目录中运行以下命令:
php bin/build
这将构建 phar 存档。deployer.phar
# 自动完成
部署器附带了 bash/zsh/fish 的自动完成脚本,因此您不需要记住所有任务和选项。要安装,运行以下命令:
dep autocomplete
并按照说明操作。
# 安装完成
dep
可以看到有正常的输出,说明安装成功。
# 配置脚本
# 创建部署脚本
现在我们需要创建一个目录用于放置部署脚本:
$ mkdir -p ~/code/deploy
$ cd ~/code/deploy-laravel
$ dep init
dep init
命令用来创建一个部署脚本,会询问我们项目类型,我们是 Laravel 项目所以输入 1
然后回车;接下来询问 Repository
也就是我们代码仓库的地址,大家填入自己的 github 仓库地址即可:
注意:这里要填 Https 形式的 Github 仓库地址,因为 SSH 格式的地址需要服务器有 Deploy Key 才可以正常访问。
接下来会询问是否允许 Deployer 收集匿名的部署数据以改善项目,大家根据自己的情况填入 yes
或者 no
:
可以看到 Deployer 在当前目录下创建了一个名为 deploy.php
的文件。
我们现在来看看这个文件里有哪些东西:
<?php
namespace Deployer;
// 引入官方的 Laravel 部署脚本
require 'recipe/laravel.php';
// 设置一个名为 application 的环境变量,值为 my_project
set('application', 'my_project');
// 设置一个名为 repository,值为初始化脚本时输入的 github 仓库地址
set('repository', 'https://github.com/leo108/laravel-shop-advanced-57.git');
// 设置环境变量,不需要关心
set('git_tty', true);
// shared_files / shared_dirs 这两个环境变量是数组格式,add 函数可以往数组里添加值
add('shared_files', []);
add('shared_dirs', []);
// Deployer 会把这个变量下的目录加上写权限
add('writable_dirs', []);
// 添加一台服务器,服务器 IP/域名 是 project.com
host('project.com')
// 设置一个这台服务器独享的环境变量,名为 deploy_path,值为 ~/my_project
// Deployer 会把花括号包裹起来的字符串替换成对应的环境变量
->set('deploy_path', '~/{{application}}');
// 定义一个名为 build 的任务
task('build', function () {
// 这个任务的内容是执行 cd ~/my_project && build 命令
run('cd {{release_path}} && build');
});
// 定义一个后置钩子,当 deploy:failed 任务被执行之后,Deployer 会执行 deploy:unlock 任务
after('deploy:failed', 'deploy:unlock');
// 定义一个前置钩子,在执行 deploy:symlink 任务之前先执行 artisan:migrate
before('deploy:symlink', 'artisan:migrate');
可以看到在这个部署文件里并没有太多涉及到部署逻辑的地方,这是因为大部分的部署逻辑都在 recipe/laravel.php
这个 Deployer 自带的脚本中写好了,我们来看看这个文件的内容,这个文件在本地的路径是 ~/.composer/vendor/deployer/deployer/recipe/laravel.php
,我们也可以在 github 上直接查看 github.com/deployphp/deployer/blob... 。
这里面大部分内容都比较浅显易懂,这里就不一一解释了。
我们查看一下这个文件的最底部,可以看到定义了一个名为 deploy
任务,这个是 Deployer 中的默认任务,当我们使用 Deployer 部署而又没有指定具体的任务时,Deployer 就会默认执行 deploy
任务。
这个 deploy
任务的内容是一个数组,这代表 deploy
是一个任务组,Deployer 会按照数组中的顺序依次执行任务。
# 开始使用
# 部署
阅读有关配置部署的有关内容。
现在,让我们部署我们的应用程序:
dep deploy
若要在输出中包含额外的详细信息,可以使用以下选项增加详细程度:--verbose
-v
对于正常输出,-vv
要进行更详细的输出,-vvv
用于调试。
部署器将在主机上创建以下目录:
releases
包含发布 dirs,shared
包含共享文件和 dirs,current
符号链接到当前版本- 配置主机以从
current
中为公共目录服务。
默认情况下,部署程序保留最后 5 个版本,但您可以通过修改关联的参数来增加此数量:
set('keep_releases', 10);
# 回滚代码
如果部署过程中出现错误或新版本出现问题,只需运行以下命令即可回滚到以前的工作版本:
dep rollback
← Dockerfile Docker →