Deployer-5-主机-Hosts

在 Deployer 中定义一个主机,对于部署我们的应用程序来说是必须的。主机可以是一个远程主机、一个本地主机或 Amazon EC2 实例。每个主机包含一个主机名,一个应用环境,一个或多个角色,以及配置变量。

我们可以在 deploy.php 文件中使用 host 函数来定义主机。下面是主机定义的一个示例:
	host('domain.com')
		->stage('production')
		->roles('app')
		->set('deploy_path', '~/app');

主机 domain.com 具有 production 应用环境,一个 app 角色,以及一个配置变量 deploy_path = ~/app。

也可以通过使用 yaml 语法来描述主机。将其写入到一个 hosts.yml 文件:
	domain.com:
		stage: production
		roles: app
		deploy_path: ~/app

之后引入到 deploy.php:
	inventory('hosts.yml');

确保我们的 ~/.ssh/config 文件包含,有关域名以及如何连接的相关信息。或者我们可以在 deploy.php 中指定这些相关信息。
	host('domain.com')
	    ->user('name')
	    ->port(22)
	    ->configFile('~/.ssh/config')
	    ->identityFile('~/.ssh/id_rsa')
	    ->forwardAgent(true)
	    ->multiplexing(true)
	    ->addSshOption('UserKnownHostsFile', '/dev/null')
	    ->addSshOption('StrictHostKeyChecking', 'no');

	最佳实践是:在 ~/.ssh/config 配置主机的连接信息。这种方式允许不同用户以不同方式来连接。

按主机覆盖配置
	例如,如果有一些全局配置,我们可以按主机覆盖它:
		set('branch', 'master');
		host('prod')
			...
			->set('branch', 'production');

	现在,在 prod 主机上,branch 被设置为 production,而其他主机的 branch 扔为 master。

收集主机信息
	在任意任务内,我们可以使用 get 函数来获取主机配置,以及使用 host 函数来获取主机对象。
		task('...', function () {
		    $deployPath = get('deploy_path');

		    $host = host('domain.com');
		    $port = $host->getPort();
		});

多主机
	我们可以给 host 函数传递多个主机:
		host('110.164.16.59', '110.164.16.34', '110.164.16.50', ...)
			->stage('production')
			...

	如果我们的清单 hosts.yml 文件包含多个主机,我们可以以同样的方式来更改所有主机的配置。
		inventory('hosts.yml')
			->roles('app')
			...

主机范围
	如果我们有很多遵循相似模式的主机,可以像下面这样描述它们,而不是列出每个主机名:
		host('www[01:50].domain.com');

	对于数字模式,可以根据个人需要包含或删除前导零。范围是内包含。

	我们也可以定义字母范围:
		host('db[a:f].domain.com');

本地主机
	如果我们需要在部署到远程主机之前构建发布版本,或者部署到 localhost 而非远程主机,我们需要定义 localhost:
		localhost()
			->stage('production')
			->roles('test', 'build')
			...

主机别名
	如果想要部署应用程序到一台主机上,但是例如在不同目录下,我们可以描述 2 个主机别名:
		host('domain.com/green', 'domain.com/blue')	
			->set('deploy_path', '~/{{ hostname }}')
			...

	对于 Deployer,这些主机是不同的主机,在部署到 2 台主机后,我们可以看到如下的目录结构:
		~
			domain.com
				green
					...
				blue
					...

一台主机多个应用环境
	通常,对于 prod 和 beta 应用环境,我们只有一台服务器。我们可以轻松配置它们:
		host('production')
		    ->hostname('domain.com')
		    ->set('deploy_path', '~/domain.com');

		host('beta')
		    ->hostname('domain.com')
		    ->set('deploy_path', '~/beta.domain.com');  

	现在我们可以使用如下命令来部署:
		dep deploy production
		dep deploy beta

清单文件(inventory file - 机器列表配置,配置清单)
	通过 inventory 函数,包含定义在清单文件 hosts.yml 中的主机:
		inventory('hosts.yml');

	下面是一个带有完整配置设置的清单文件 hosts.yml 示例:
		domain.com:
			hostname: domain.com
			user: name
			port: 22
			configFile: ~/.ssh/config
			identityFile: ~/.ssh/id_rsa
			forwardAgent: true
			multiplexing: true
			sshOptions:
			UserKnownHostsFile: /dev/null
			StrictHostKeyChecking: no
			stage: production
			roles:
			- app
			- db
			deploy_path: ~/app
			extra_param: "foo {{hostname}}"

	注意,与 deploy.php 文件中的 host 函数一样,最好省略 user、port、identityFile、forwordAgent等信息,而在 ~/.ssh/config 文件中使用它。

	如果我们的清单文件包含许多相似的主机定义,我们可以使用 YAML 扩展语法:
		.base: &base
		  	roles: app
		  	deploy_path: ~/app
		  	...

		www1.domain.com:
		  	<<: *base
		  	stage: production

		beta1.domain.com:
		  	<<: *base
		  	stage: beta

		...

	以 '.' 开头的主机,称为隐藏主机,并且在该文件外部不可见。

	为了在清单文件中定义 localhost,添加一个 local 键:
		localhost:
			local: true
			roles: build
			...

成为(become)
	Deployer 允许我们成为,与登录主机的用户不同的另外一个用户(远程用户)。
		host('domain.com')
			->become('deployer')
			...

	Deployer 默认使用 sudo 权限升级方法。

	注意:become 不能与 tty 运行选项一起使用。

接下来:部署流(https://deployer.org/docs/flow)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值