deployer 一键部署php代码,还可以保留历史版本.
官网:https://deployer.org
我安装的deployer版本 7.x
注意,7.x版本和6.x 部署命令不一致, 请注意看文档,
网上很多教程都是6.x的.
安装deployer composer require --dev deployer/deployer
引入官方的laravel的配置文件
文档: https://deployer.org/docs/7.x/recipe/laravel
laravel菜谱配置文件里面配置了一些目录,例如共享目录,日志目录,.env等文件路径
然后定义了一些任务.
定义了deploy任务, 里面是调用一些子任务.
deployer 脚本会到远程服务器 执行 git clone 拉取代码
执行composer install
把.env 和上传文件的目录, 配置软连接到新目录.
执行php artisan migrate等
# 调用部署任务 deploy , 第二个参数是选择部署到哪个环境
vendor/bin/dep deploy production -vvv
# 也可以调用其他自定义的任务
vendor/bin/dep test myhost
# 或者执行ssh连接服务器命令
vendor/bin/dep ssh
服务器的nginx配置到部署目录的 current 目录上.
新发布的版本会自动软链接到current目录.
这样部署完不用修改nginx
php禁用函数: putenv 要取消禁用
fileinfo扩展 需要自行安装
在本地配置好免密登录配置文件 ~/用户名/.ssh/config 文件
command-line line 0: unsupported option “accept-new”.
不支持的选项accept-new
网上说的升级openssh 和 git 不好使
加上 set('git_ssh_command', 'ssh');
<?php
namespace Deployer;
require 'recipe/laravel.php';
// Config
set('application', 'csdn多才多多的项目');
set('repository', 'git@xxx.com:csdn-duocaiduoduo/project_name.git');
set('git_tty', true);
add('shared_files', []);
add('shared_dirs', []);
add('writable_dirs', []);
set('git_ssh_command', 'ssh');
task('test', function () {
writeln('type:' . get('labels')['type'] . ' env:' . get('labels')['env'] . ',hostname:' . get('hostname'));
});
// Hosts列表
//测试机
host('192.168.56.101')
->setLabels([
'type' => 'web',
'env' => 'test',
])->setRemoteUser('root')
->set('branch', 'master')
->setDeployPath('/www/wwwroot/project');
//线上机器
host('123.22.22.22')
->setLabels([
'type' => 'web',
'env' => 'prod',
])->setRemoteUser('root')
->set('branch', 'master')
->setDeployPath('/www/wwwroot/project');
//->setIdentityFile('~/.ssh/id_ed25519');连接远程主机的私钥,免密登录
//->setSshArguments(['-o UserKnownHostsFile=/dev/null']);
// Hooks
after('deploy:failed', 'deploy:unlock');
# 部署到标签env=prod的机器
vendor/bin/dep deploy env=prod
# 部署到标签env=test 的机器
vendor/bin/dep deploy env=test
# 执行test任务,标签env=prod的机器
vendor/bin/dep test env=prod
# 查看部署的版本列表
vendor/bin/dep releases env=test -vvv
# 回滚
vendor/bin/dep rollback env=prod
# -vvv 表示部署时显示详细信
# ssh root@123.22.22.22 -i ~/.ssh/id_ed25519