Skip to content
虚位以待
赞助商
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

SSH

配置

Laravel 提供了一种简单的方法来 SSH 进入远程服务器并运行命令,使您能够轻松构建在远程服务器上工作的 Artisan 任务。SSH facade 提供了连接到远程服务器并运行命令的访问点。

配置文件位于 app/config/remote.php,包含您需要配置远程连接的所有选项。connections 数组包含按名称键入的服务器列表。只需在 connections 数组中填充凭据,您就可以开始运行远程任务。请注意,SSH 可以使用密码或 SSH 密钥进行身份验证。

NOTE

需要轻松运行多种任务在您的远程服务器上?查看 Envoy 任务运行器

基本用法

在默认服务器上运行命令

要在您的 default 远程连接上运行命令,请使用 SSH::run 方法:

php
SSH::run(array(
	'cd /var/www',
	'git pull origin master',
));

在特定连接上运行命令

或者,您可以使用 into 方法在特定连接上运行命令:

php
SSH::into('staging')->run(array(
	'cd /var/www',
	'git pull origin master',
));

捕获命令的输出

您可以通过将 Closure 传递给 run 方法来捕获远程命令的“实时”输出:

php
SSH::run($commands, function($line)
{
	echo $line.PHP_EOL;
});

任务

如果您需要定义一组应该始终一起运行的命令,可以使用 define 方法定义一个 task

php
SSH::into('staging')->define('deploy', array(
	'cd /var/www',
	'git pull origin master',
	'php artisan migrate',
));

一旦任务被定义,您可以使用 task 方法来运行它:

php
SSH::into('staging')->task('deploy', function($line)
{
	echo $line.PHP_EOL;
});

SFTP 下载

SSH 类包含了一种简单的方法来使用 getgetString 方法下载文件:

php
SSH::into('staging')->get($remotePath, $localPath);

$contents = SSH::into('staging')->getString($remotePath);

SFTP 上传

SSH 类还包含了一种简单的方法来将文件或字符串上传到服务器,使用 putputString 方法:

php
SSH::into('staging')->put($localFile, $remotePath);

SSH::into('staging')->putString($remotePath, 'Foo');

尾随远程日志

Laravel 包含一个有用的命令,用于尾随任何远程连接上的 laravel.log 文件。只需使用 tail Artisan 命令并指定您想要尾随的远程连接的名称:

php
php artisan tail staging

php artisan tail staging --path=/path/to/log.file

Envoy 任务运行器

Laravel Envoy 提供了一种干净、简约的语法,用于定义您在远程服务器上运行的常见任务。使用 Blade 风格的语法,您可以轻松设置部署、Artisan 命令等任务。

NOTE

Envoy 需要 PHP 版本 5.4 或更高,并且仅在 Mac / Linux 操作系统上运行。

安装

首先,使用 Composer global 命令安装 Envoy:

php
composer global require "laravel/envoy=~1.0"

确保将 ~/.composer/vendor/bin 目录放入您的 PATH 中,以便在您在终端中运行 envoy 命令时找到 envoy 可执行文件。

接下来,在项目的根目录中创建一个 Envoy.blade.php 文件。以下是一个入门示例:

php
@servers(['web' => '192.168.1.1'])

@task('foo', ['on' => 'web'])
	ls -la
@endtask

如您所见,在文件顶部定义了一个 @servers 数组。您可以在任务声明的 on 选项中引用这些服务器。在您的 @task 声明中,您应该放置将在任务执行时在服务器上运行的 Bash 代码。

init 命令可用于轻松创建一个 Envoy 文件的存根:

php
envoy init user@192.168.1.1

运行任务

要运行任务,请使用您的 Envoy 安装的 run 命令:

php
envoy run foo

如果需要,您可以使用命令行开关将变量传递到 Envoy 文件中:

php
envoy run deploy --branch=master

您可以通过您熟悉的 Blade 语法使用选项:

php
@servers(['web' => '192.168.1.1'])

@task('deploy', ['on' => 'web'])
	cd site
	git pull origin {{ $branch }}
	php artisan migrate
@endtask

引导

您可以使用 @setup 指令在 Envoy 文件中声明变量并进行一般 PHP 工作:

php
@setup
	$now = new DateTime();

	$environment = isset($env) ? $env : "testing";
@endsetup

您还可以使用 @include 来包含任何 PHP 文件:

php
@include('vendor/autoload.php');

多个服务器

您可以轻松地在多个服务器上运行任务。只需在任务声明中列出服务器:

php
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])

@task('deploy', ['on' => ['web-1', 'web-2']])
	cd site
	git pull origin {{ $branch }}
	php artisan migrate
@endtask

默认情况下,任务将在每个服务器上串行执行。这意味着,任务将在第一个服务器上完成运行后,才会继续在下一个服务器上执行。

并行执行

如果您希望在多个服务器上并行运行任务,只需在任务声明中添加 parallel 选项:

php
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])

@task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true])
	cd site
	git pull origin {{ $branch }}
	php artisan migrate
@endtask

任务宏

宏允许您使用单个命令定义一组按顺序运行的任务。例如:

php
@servers(['web' => '192.168.1.1'])

@macro('deploy')
	foo
	bar
@endmacro

@task('foo')
	echo "HELLO"
@endtask

@task('bar')
	echo "WORLD"
@endtask

现在可以通过一个简单的命令运行 deploy 宏:

php
envoy run deploy

通知

HipChat

在运行任务后,您可以使用简单的 @hipchat 指令向团队的 HipChat 房间发送通知:

php
@servers(['web' => '192.168.1.1'])

@task('foo', ['on' => 'web'])
	ls -la
@endtask

@after
	@hipchat('token', 'room', 'Envoy')
@endafter

您还可以指定自定义消息发送到 HipChat 房间。任何在 @setup 中声明的变量或通过 @include 包含的变量都将可用于消息中:

php
@after
	@hipchat('token', 'room', 'Envoy', "$task ran on [$environment]")
@endafter

这是一种非常简单的方法,可以让您的团队及时了解在服务器上运行的任务。

Slack

可以使用以下语法向 Slack 发送通知:

php
@after
	@slack('team', 'token', 'channel')
@endafter

更新 Envoy

要更新 Envoy,只需运行 self-update 命令:

php
envoy self-update

如果您的 Envoy 安装在 /usr/local/bin,您可能需要使用 sudo

php
composer global update