Fabric - 通过 SSH 来自动化管理 Linux 任务和布署应用
创始人
2024-03-01 17:53:26
0

当要管理远程机器或者要布署应用时,虽然你有多种命令行工具可以选择,但是其中很多工具都缺少详细的使用文档。

在这篇教程中,我们将会一步一步地向你介绍如何使用 fabric 来帮助你更好得管理多台服务器。

使用 Fabric 来自动化地管理 Linux 任务

Fabric 是一个用 Python 编写的命令行工具库,它可以帮助系统管理员高效地执行某些任务,比如通过 SSH 到多台机器上执行某些命令,远程布署应用等。

在使用之前,如果你拥有使用 Python 的经验能帮你更好的使用 Fabric。当然,如果没有那也不影响使用 Fabric。

我们为什么要选择 Fabric:

  • 简单
  • 完备的文档
  • 如果你会 Python,不用增加学习其他语言的成本
  • 易于安装使用
  • 使用便捷
  • 支持多台机器并行操作

在 Linux 上如何安装 Fabric

Fabric 有一个特点就是要远程操作的机器只需要支持标准的 OpenSSH 服务即可。只要保证在机器上安装并开启了这个服务就能使用 Fabric 来管理机器。

依赖

  • Python 2.5 或更新版本,以及对应的开发组件
  • Python-setuptools 和 pip(可选,但是非常推荐)gcc

我们推荐使用 pip 安装 Fabric,但是你也可以使用系统自带的包管理器如 yum, dnfapt-get 来安装,包名一般是 fabricpython-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 来自动化管理 Linux 任务

现在我们来开始使用 Fabric,在之前的安装的过程中,Fabric Python 脚本已经被放到我们的系统目录,当我们要运行 Fabric 时输入 fab 命令即可。

在本地 Linux 机器上运行命令行

按照惯例,先用你喜欢的编辑器创建一个名为 fabfile.py 的 Python 脚本。你可以使用其他名字来命名脚本,但是就需要指定这个脚本的路径,如下所示:

# fabric --fabfile /path/to/the/file.py

Fabric 使用 fabfile.py 来执行任务,这个文件应该放在你执行 Fabric 命令的目录里面。

例子 1:创建入门的 Hello World 任务:

# vi fabfile.py

在文件内输入如下内容:

def hello():
    print('Hello world, Tecmint community')

保存文件并执行以下命令:

# fab hello

Fabric 工具使用说明

例子 2:新建一个名为 fabfile.py 的文件并打开:

粘贴以下代码至文件:

#!  /usr/bin/env python
from fabric.api import local
def uptime():
    local('uptime')

保存文件并执行以下命令:

# fab uptime

Fabric: 检查系统运行时间

让我们看看这个例子,fabfile.py 文件在本机执行了 uptime 这个命令。

在远程 Linux 机器上运行命令来执行自动化任务

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 python
from 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 python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def echo():
    run("echo -n 'Hello, you are tuned to Tecmint ' ")

运行以下命令执行 Fabric 任务

# fab echo

fabric: 自动在远程 Linux 机器上执行任务

例子 4:你可以继续改进之前创建的执行 uptime 任务的 fabfile.py 文件,让它可以在多台服务器上运行 uptime 命令,也可以检查其磁盘使用情况,如下所示:

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def uptime():
    run('uptime')
def disk_space():
    run('df -h')

保存并执行以下命令

# fab uptime
# fab disk_space

Fabric:自动在多台服务器上执行任务

在远程服务器上自动化布署 LAMP

例子 5:我们来尝试一下在远程服务器上布署 LAMP(Linux, Apache, MySQL/MariaDB and PHP)

我们要写个函数在远程使用 root 权限安装 LAMP。

在 RHEL/CentOS 或 Fedora 上
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
    run ("yum install -y httpd mariadb-server php php-mysql")
在 Debian/Ubuntu 或 Linux Mint 上
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
    sudo("apt-get install -q apache2 mysql-server libapache2-mod-php5 php5-mysql")

保存并执行以下命令:

# fab deploy_lamp

注:由于安装时会输出大量信息,这个例子我们就不提供屏幕 gif 图了

现在你可以使用 Fabric 和上文例子所示的功能来自动化的管理 Linux 服务器上的任务了。

一些 Fabric 有用的选项

  • 你可以运行 fab -help 输出帮助信息,里面列出了所有可以使用的命令行信息
  • –fabfile=PATH 选项可以让你定义除了名为 fabfile.py 之外的模块
  • 如果你想用指定的用户名登录远程主机,请使用 -user=USER 选项
  • 如果你需要密码进行验证或者 sudo 提权,请使用 –password=PASSWORD 选项
  • 如果需要输出某个命令的详细信息,请使用 –display=命令名 选项
  • 使用 --list 输出所有可用的任务
  • 使用 --list-format=FORMAT 选项能格式化 -list 选项输出的信息,可选的有 short、normal、 nested
  • --config=PATH 选项可以指定读取配置文件的地址
  • -–colorize-errors 能显示彩色的错误输出信息
  • --version 输出当前版本

总结

Fabric 是一个强大并且文档完备的工具,对于新手来说也能很快上手,阅读提供的文档能帮助你更好的了解它。如果你在安装和使用 Fabric 时发现什么问题可以在评论区留言,我们会及时回复。

参考:Fabric 文档


via: http://www.tecmint.com/automating-linux-system-administration-tasks/

作者:Aaron Kili 译者:NearTan 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

AI正在改写 经济学底层“...
[ 人工智能对长期经济增长与社会阶层结构的最终影响,并非一条由技术...
2026-07-03 06:51:36
美专家文章:伊朗打破美军“...
参考消息网4月12日报道美国《纽约时报》网站4月5日刊发文章,题为...
2026-04-13 02:56:25
从用户心智到AI心智 灵狐...
摘要:AI营销专家灵狐强调品牌需在全域AI中保持统一清晰认知。其A...
2026-04-08 19:21:06
Codex vs Clau...
AIPress.com.cn报道 最近关于Claude Code和...
2026-03-29 21:53:01
武汉市三联自动化取得燃烧平...
国家知识产权局信息显示,武汉市三联自动化有限责任公司取得一项名为“...
2026-03-28 14:48:50
普华永道美国公司要求员工拥...
普华永道的合伙人必须拥抱人工智能,否则将面临被淘汰的风险。 这家咨...
2026-03-26 01:37:41

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...