league/shunt

此包已被废弃且不再维护。未建议替代包。

PHP 库,用于通过 SSH 在多台远程机器上并行执行命令

v2.1.1 2013-10-28 06:10 UTC

This package is not auto-updated.

Last update: 2020-01-19 17:39:56 UTC


README

#Shunt

Teaser

Build Status Dependencies Status Coverage Status Latest Stable Version Total Downloads

受 Ruby 的 Capistrano 启发,Shunt 是一个 PHP 库,用于通过 SSH 在多台远程机器上执行命令。具体来说,这个库是为了简化并自动化将 PHP 应用部署到分布式环境而编写的。

安装

通过 Composer

{
    "require": {
        "league/shunt": "~2.0"
    }
}

要求

  • PHP >= 5.3.3
  • libssh2
  • ssh2.so

附加功能

  • 支持安全复制(SCP)
  • 支持安全文件传输(SFTP)

假设

Shunt 对如何做事有着非常坚定的看法,并试图将那些看法强加给你。这些观点背后的某些假设是

  • 你正在使用 SSH 访问远程服务器。
  • 你要么在所有目标机器上拥有相同的密码,要么已经设置了公钥以允许无密码访问。

不要期望这些假设会改变。

用法

通常,你将按照以下方式使用 Shunt

  • 创建一个配方文件(Shuntfile)。
  • 使用 shunt 脚本来执行你的配方。

从基于 composer 的项目的根目录中,使用 Shunt 脚本如下

vendor/bin/shunt some_task some_host,other_host

默认情况下,脚本将查找一个名为 Shuntfile 的文件,其中包含主机信息、凭证和你的任务。这里 Shuntfile 的结构如下

<?php

return array(

	'hosts' => array(
		'staging' => 'staging.domain.com',
		'repro' => 'backup.domain.com',
		'production' => 'production.domain.com',
	),

	'auth' => array(
		'username' => 'shunt',
		'password' => 'hearmyroar',
		'pubkeyfile' => NULL,
		'privkeyfile' => NULL,
		'passphrase' => NULL,
	),

	'tasks' => array(
		'read_home_dir' => function($s) {
			$s->run('ls');
		},
		'print_php_info' => function($s) {
			$s->run('php -i');
		},
		'upload_foo_source' => function($s) {
			$s->sftp()->mkdir('source');
			$s->scp()->put('foo', 'source/foo');
		}
	),
);

tasks 集合表示哪些任务可供执行。你可以执行 list 命令来查看所有可用的任务和主机。基于上述配方,你可以运行

vendor/bin/shunt read_home_dir .

上述命令将在 hosts 参数中定义的所有远程机器上执行 ls 命令。你可以通过在任务后追加主机昵称来告诉 Shunt 在特定主机(s)上运行任务

vendor/bin/shunt read_home_dir staging
vendor/bin/shunt print_php_info staging,production

如你所见,你可以在任务中通过调用 scp()sftp() 方法轻松访问 SCPSFTP 实例。以下表格显示了 SCPSFTP 实例的可用 API

类型 方法签名 描述
SCP put($localFile = '', $remoteFile = '') 将文件从本地发送到远程路径
SCP get($remoteFile = '', $localFile = '') 从远程到本地路径获取文件
SFTP chmod($filename = '', $mode = 0644) 尝试将指定文件的权限更改为在模式中给出的权限。
SFTP lstat($path = '') 在远程文件系统中统计符号链接,而不跟随链接。
SFTP stat($path = '') 在远程文件系统中统计文件,跟随任何符号链接。
SFTP mkdir($dirname = '', $mode = 0777, $recursive = false) 在远程文件服务器上创建一个目录,权限设置为模式。
SFTP rmdir($dirname = '') 从远程文件服务器中删除目录。
SFTP symlink($target = '',$link = '') 在远程文件系统中创建一个名为 link 的符号链接,指向目标。
SFTP readlink($link = '') 返回符号链接的目标。
SFTP realpath($filename = '') 将文件名转换为远程文件系统上的有效真实路径。
SFTP rename($from = '', $to = '') 在远程文件系统中重命名文件。
SFTP unlink($filename = '') 在远程文件系统中删除文件。

变更日志

请参阅变更日志文件

贡献

请参阅CONTRIBUTING以获取详细信息。

支持

错误和功能请求在GitHub上跟踪

许可证

Shunt 以 MIT 许可证发布。有关详细信息,请参阅捆绑的LICENSE文件。