当要管理远程机器或者要布署应用时,虽然你有多种命令行工具可以选择,但是其中很多工具都缺少详细的使用文档。
在这篇教程中,我们将会一步一步地向你介绍如何使用 fabric 来帮助你更好得管理多台服务器。
使用 Fabric 来自动化地管理 Linux 任务
Fabric 是一个用 Python 编写的命令行工具库,它可以帮助系统管理员高效地执行某些任务,比如通过 SSH 到多台机器上执行某些命令,远程布署应用等。
在使用之前,如果你拥有使用 Python 的经验能帮你更好的使用 Fabric。当然,如果没有那也不影响使用 Fabric。
我们为什么要选择 Fabric:
简单完备的文档如果你会 Python,不用增加学习其他语言的成本易于安装使用使用便捷支持多台机器并行操作Fabric 有一个特点就是要远程操作的机器只需要支持标准的 OpenSSH 服务即可。只要保证在机器上安装并开启了这个服务就能使用 Fabric 来管理机器。
我们推荐使用 pip 安装 Fabric,但是你也可以使用系统自带的包管理器如 yum, dnf 或 apt-get 来安装,包名一般是 fabric 或 python-fabric。
如果是基于 RHEL/CentOS 的发行版本的系统,你可以使用系统自带的 EPEL 源 来安装 fabric。
# yum install fabric [适用于基于 RedHat 系统]# dnf install fabric [适用于 Fedora 22+ 版本]如果你是 Debian 或者其派生的系统如 Ubuntu 和 Mint 的用户,你可以使用 apt-get 来安装,如下所示:
# apt-get install fabric如果你要安装开发版的 Fabric,你需要安装 pip 来安装 master 分支上最新版本。
# yum install python-pip [适用于基于 RedHat 系统]# dnf install python-pip [适用于Fedora 22+ 版本]# apt-get install python-pip [适用于基于 Debian 系统]安装好 pip 后,你可以使用 pip 获取最新版本的 Fabric。
# pip install fabric现在我们来开始使用 Fabric,在之前的安装的过程中,Fabric Python 脚本已经被放到我们的系统目录,当我们要运行 Fabric 时输入 fab 命令即可。
按照惯例,先用你喜欢的编辑器创建一个名为 fabfile.py 的 Python 脚本。你可以使用其他名字来命名脚本,但是就需要指定这个脚本的路径,如下所示:
# fabric --fabfile /path/to/the/file.pyFabric 使用 fabfile.py 来执行任务,这个文件应该放在你执行 Fabric 命令的目录里面。
例子 1:创建入门的 Hello World 任务:
# vi fabfile.py在文件内输入如下内容:
def hello(): print('Hello world, Tecmint community')保存文件并执行以下命令:
# fab helloFabric 工具使用说明
例子 2:新建一个名为 fabfile.py 的文件并打开:
粘贴以下代码至文件:
#! /usr/bin/env pythonfrom fabric.api import localdef uptime(): local('uptime')保存文件并执行以下命令:
# fab uptimeFabric: 检查系统运行时间
让我们看看这个例子,fabfile.py 文件在本机执行了 uptime 这个命令。
Fabric API 使用了一个名为 env 的关联数组(Python 中的词典)作为配置目录,来储存 Fabric 要控制的机器的相关信息。
env.hosts 是一个用来存储你要执行 Fabric 任务的机器的列表,如果你的 IP 地址是 192.168.0.0,想要用 Fabric 来管理地址为 192.168.0.2 和 192.168.0.6 的机器,需要的配置如下所示:
#!/usr/bin/env pythonfrom fabric.api import env env.hosts = [ '192.168.0.2', '192.168.0.6' ]上面这几行代码只是声明了你要执行 Fabric 任务的主机地址,但是实际上并没有执行任何任务,下面我们就来定义一些任务。Fabric 提供了一系列可以与远程服务器交互的方法。
Fabric 提供了众多的方法,这里列出几个经常会用到的:
run - 可以在远程机器上运行的 shell 命令local - 可以在本机上运行的 shell 命令sudo - 使用 root 权限在远程机器上运行的 shell 命令get - 从远程机器上下载一个或多个文件put - 上传一个或多个文件到远程机器例子 3:在多台机子上输出信息,新建新的 fabfile.py 文件如下所示
#!/usr/bin/env pythonfrom fabric.api import env, runenv.hosts = ['192.168.0.2','192.168.0.6']def echo(): run("echo -n 'Hello, you are tuned to Tecmint ' ")运行以下命令执行 Fabric 任务
# fab echofabric: 自动在远程 Linux 机器上执行任务
例子 4:你可以继续改进之前创建的执行 uptime 任务的 fabfile.py 文件,让它可以在多台服务器上运行 uptime 命令,也可以检查其磁盘使用情况,如下所示:
#!/usr/bin/env pythonfrom fabric.api import env, runenv.hosts = ['192.168.0.2','192.168.0.6']def uptime(): run('uptime')def disk_space(): run('df -h')保存并执行以下命令
# fab uptime# fab disk_spaceFabric:自动在多台服务器上执行任务
例子 5:我们来尝试一下在远程服务器上布署 LAMP(Linux, Apache, MySQL/MariaDB and PHP)
我们要写个函数在远程使用 root 权限安装 LAMP。
保存并执行以下命令:
# fab deploy_lamp注:由于安装时会输出大量信息,这个例子我们就不提供屏幕 gif 图了
现在你可以使用 Fabric 和上文例子所示的功能来自动化的管理 Linux 服务器上的任务了。
原文发布时间为:2016-08-22
本文来自云栖社区合作伙伴“Linux中国”