本文目录导读:

在 PHP 中使用 Envoy 主要有两种方式:
Laravel Envoy(任务部署工具)
这是最常用的方式,用于远程服务器部署和任务执行。
安装
composer global require laravel/envoy
基础使用
创建 Envoy.blade.php 文件:
@servers(['web' => 'user@192.168.1.1', 'db' => 'root@192.168.1.2'])
@task('deploy', ['on' => 'web'])
cd /var/www/html
git pull origin master
composer install --no-dev
php artisan migrate --force
@endtask
@task('restart-nginx', ['on' => 'web'])
sudo service nginx restart
@endtask
@task('backup-db', ['on' => 'db'])
mysqldump -u root mydatabase > /tmp/backup.sql
@endtask
执行任务
# 执行单个任务 envoy run deploy # 执行多个任务 envoy run deploy && envoy run restart-nginx # 执行带参数的任务 envoy run deploy --branch=main
高级功能
@servers(['web' => ['user@host1', 'user@host2']])
@setup
$branch = isset($branch) ? $branch : 'main';
$path = '/var/www/html';
@endsetup
@task('deploy', ['on' => 'web'])
cd {{ $path }}
git fetch origin
git checkout {{ $branch }}
git pull origin {{ $branch }}
@endtask
@story('deploy-all')
deploy
restart-nginx
clear-cache
@endstory
@task('clear-cache')
php artisan cache:clear
php artisan view:clear
@endtask
@finished
echo "部署完成!";
@endfinished
Envoy Proxy(服务代理)
如果你的意思是使用 Envoy Proxy(Lyft 的服务代理),那么需要通过 PHP 调用管理 API 或使用控制平面。
使用 PHP 管理 Envoy
<?php
class EnvoyManager {
private $apiUrl;
private $username;
private $password;
public function __construct($apiUrl, $username, $password) {
$this->apiUrl = $apiUrl;
$this->username = $username;
$this->password = $password;
}
public function getConfig() {
$ch = curl_init($this->apiUrl . '/config');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "{$this->username}:{$this->password}");
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
实际部署示例
这是一个完整的部署脚本示例:
// Envoy.blade.php
@servers(['production' => 'deployer@server.com'])
@setup
$app = 'my-application';
$repo = 'https://github.com/yourname/'.$app.'.git';
$releases_dir = '/var/www/'.$app.'/releases';
$current_dir = '/var/www/'.$app.'/current';
$release = date('YmdHis');
$new_release_dir = $releases_dir.'/'.$release;
@endsetup
@task('deploy', ['on' => 'production'])
echo "开始部署 {{ $app }}..."
# 创建新的 release 目录
mkdir -p {{ $new_release_dir }}
# 克隆代码
git clone --depth 1 {{ $repo }} {{ $new_release_dir }}
# 安装依赖
cd {{ $new_release_dir }}
composer install --no-dev --prefer-dist
# 创建 .env 文件
cp {{ $current_dir }}/.env {{ $new_release_dir }}/.env
# 运行数据库迁移
php artisan migrate --force
# 创建符号链接
ln -nfs {{ $new_release_dir }} {{ $current_dir }}
# 清理旧的 releases(保留最近 5 个)
ls -dt {{ $releases_dir }}/* | tail -n +6 | xargs rm -rf
echo "部署完成!"
@endtask
@story('deploy-all')
deploy
@endstory
执行部署
# 执行部署 envoy run deploy # 带参数执行 envoy run deploy --branch=main --env=production # 查看所有可用任务 envoy list
注意事项
- 权限问题:确保 SSH 密钥配置正确
- 环境变量:使用
@setup块定义变量 - 多环境:可以通过参数区分不同环境
- 错误处理:使用
@error指令处理错误
@task('deploy', ['on' => 'production'])
@error
echo "部署失败,正在回滚...";
ln -nfs {{ $old_release_dir }} {{ $current_dir }}
@enderror
// 部署代码
@endtask
根据你的具体需求选择相应的使用方式,如果是做部署自动化,推荐使用 Laravel Envoy;如果是服务网格/代理场景,则需要集成 Envoy Proxy 的 API。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播