innmind / tower
Requires
- php: ~7.4|~8.0
- innmind/cli-framework: ^1.2
- innmind/genome: ^3.0
- innmind/immutable: ~3.5
- innmind/json: ^1.1
- innmind/url: ~3.3
- symfony/config: ~5.0
- symfony/yaml: ~5.0
Requires (Dev)
- innmind/black-box: ^4.9
- innmind/coding-standard: ^1.1
- phpunit/phpunit: ~9.0
- vimeo/psalm: ~4.4
Provides
- innmind/genome-genes: 3.0
This package is auto-updated.
Last update: 2024-09-20 19:24:58 UTC
README
这是一个使用新方法部署代码库的命令行工具。不同于构建另一个工具,通过ssh发送一系列shell命令,Tower采用服务器作为树节点的方法,从一个节点触发子节点中的tower。
配置
- 每台服务器安装一个Tower
- 部署服务器的配置位于本地
- 节点只知道其邻居服务器的位置
优势
- 只知道可以在服务器上部署什么(而不是如何部署)
- 保留服务器上的部署方法
- 如果操作更新,不会影响任何人
- 易于级联部署(如果节点从父节点检索源代码)
- 同一级别的节点可以并行部署(通过后台作业,松散的直接输出)
- 命令在本地运行,所有操作都记录下来,因此您可以跟踪何时部署了环境
缺点
- 节点需要知道如何连接到其邻居(如果节点被黑,子树将受到影响)(特定于
ssh
传输,tcp
不受影响) - 节点需要知道如何连接到父节点以检索源代码(降低主存储库的负载)(只有您决定这样的策略)
- 父节点和邻居之间的交叉关系
示例
A (you)
/ \
/ \
/ \
(prod) B C (staging)
/ \ \
/ \ \
/ \ \
D E F
| |
| |
G H
假设以下树中的B
也是用于生产的,使用此工具可以轻松地在五台服务器上放置相同的Tower配置。要部署所有这些服务器,您只需运行命令tower ping B
即可!或者,如果您只想部署H
,以确保一切部署正常,连接到机器并在本地运行tower trigger
或将此作为邻居添加到本地机器(A
)并运行tower ping H
。再次强调,这是一个树,您可以从任何地方开始。
但在正常情况下,您的机器的邻居将是B
和C
。
为了真正高效(即不过载VCS服务器),将邻居设置为从父节点检索代码。例如,将B
和C
配置为您的VCS服务器作为git remote
;D
和E
有B
作为git remote
,依此类推...
注意:我在这里讨论git,但您不必使用它
注意:在级联时,如果邻居部署失败,其子树将不会部署
另一个用例是您有一个用于应用程序的单个服务器,以及其他服务器用于支持第一个服务器所需的相关服务。您可以推断,使用这种树的概念,每次部署应用程序都会触发相关服务的部署(因此一切始终保持最新)。
安装
composer global require innmind/tower
配置
neighbours: _name_: url: ssh://example.com:80/path/to/config/on/neighbour/server.yml # scheme can be tcp or ssh, path only used via ssh tags: [foo, bar] # optional exports: # optional - 'echo "ENV=value"' # contains list of env variables that will be available to each action actions: - 'some bash command'
当配置所在的服务器被ping时,将运行actions
集合中的命令。每个操作都将作为环境变量具有通过exports
部分构建的变量,此数组必须是产生形式为ENV=value
的输出的命令。
最后,neighbours
部分是当配置所在的机器被ping时将被ping的服务器列表。您可以决定通过ssh
(使服务器容易受到外部世界的影响,但这是最简单的方法)或通过tcp
套接字(允许关闭所有直接访问机器,但容易受到DOS攻击)来ping服务器。
用法
通过ssh
在您的机器上配置一个包含以下内容的tower.yml
文件
neighbours: gateway: url: ssh://gateway.com:22/path/to/configuration/on/gateway
完成后,您可以在该文件夹中运行tower ping gateway
。这将通过端口22
连接到gateway.com
,移动到/path/to/configuration/on/gateway
文件夹,并运行tower trigger
命令;您需要在文件夹中创建一个tower.yml
文件,该文件将描述要执行的操作或要ping的邻居。
通过tcp
在您的机器上配置一个包含以下内容的tower.yml
文件
neighbours: gateway: url: tcp://gateway.com:1337
在服务器上,您需要创建一个类似名为tower.yml
的文件,其中包含要运行的操作或要ping的邻居;然后在文件夹中运行tower listen 1337 -d
。最后一个命令在端口1337
上打开一个tcp连接并等待接收到的ping。
现在您可以在您的机器上运行tower ping gateway
。