Fabric:通过SSH来自动化管理Linux任务和布署应用

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

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

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

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

我们为什么要选择 Fabric:

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

在 Linux 上如何安装 Fabric

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

依赖

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

我们推荐使用 pip 安装 Fabric,但是你也可以使用系统自带的包管理器如 yum, dnf 或 apt-get 来安装,包名一般是fabric 或 python-fabric。

如果是基于 RHEL/CentOS 的发行版本的系统,你可以使用系统自带的 EPEL 源 来安装 fabric。


  1. # yum install fabric   [适用于基于 RedHat 系统] 
  2. # dnf install fabric   [适用于 Fedora 22+ 版本] 

如果你是 Debian 或者其派生的系统如 Ubuntu 和 Mint 的用户,你可以使用 apt-get 来安装,如下所示:


  1. # apt-get install fabric 

如果你要安装开发版的 Fabric,你需要安装 pip 来安装 master 分支上最新版本。


  1. # yum install python-pip       [适用于基于 RedHat 系统] 
  2. # dnf install python-pip       [适用于Fedora 22+ 版本] 
  3. # apt-get install python-pip   [适用于基于 Debian 系统] 

安装好 pip 后,你可以使用 pip 获取最新版本的 Fabric。


  1. # pip install fabric 

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

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

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

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


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

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

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


  1. # vi fabfile.py 

在文件内输入如下内容:


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

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


  1. # fab hello 

Fabric 工具使用说明

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

粘贴以下代码至文件:


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

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


  1. # 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 的机器,需要的配置如下所示:


  1. #!/usr/bin/env python 
  2. from fabric.api import env 
  3.     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 文件如下所示


  1. #!/usr/bin/env python 
  2. from fabric.api import env, run 
  3. env.hosts = ['192.168.0.2','192.168.0.6'] 
  4. def echo(): 
  5.     run("echo -n 'Hello, you are tuned to Tecmint ' ") 

运行以下命令执行 Fabric 任务


  1. # fab echo 

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

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


  1. #!/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') 

保存并执行以下命令


  1. # fab uptime# fab disk_space 

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

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

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

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

在 RHEL/CentOS 或 Fedora 上


  1. #!/usr/bin/env python 
  2. from fabric.api import env, run 
  3. env.hosts = ['192.168.0.2','192.168.0.6'] 
  4. def deploy_lamp(): 
  5.     run ("yum install -y httpd mariadb-server php php-mysql") 

在 Debian/Ubuntu 或 Linux Mint 上


  1. #!/usr/bin/env python 
  2. from fabric.api import env, run 
  3. env.hosts = ['192.168.0.2','192.168.0.6'] 
  4. def deploy_lamp(): 
  5.     sudo("apt-get install -q apache2 mysql-server libapache2-mod-php5 php5-mysql") 

保存并执行以下命令:


  1. # 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 时发现什么问题可以在评论区留言,我们会及时回复。

作者:Aaron Kili

来源:51CTO

时间: 2017-08-15

Fabric:通过SSH来自动化管理Linux任务和布署应用的相关文章

Fabric - 通过 SSH 来自动化管理 Linux 任务和布署应用

当要管理远程机器或者要布署应用时,虽然你有多种命令行工具可以选择,但是其中很多工具都缺少详细的使用文档. 在这篇教程中,我们将会一步一步地向你介绍如何使用 fabric 来帮助你更好得管理多台服务器. 使用 Fabric 来自动化地管理 Linux 任务 Fabric 是一个用 Python 编写的命令行工具库,它可以帮助系统管理员高效地执行某些任务,比如通过 SSH 到多台机器上执行某些命令,远程布署应用等. 在使用之前,如果你拥有使用 Python 的经验能帮你更好的使用 Fabric.当然

使用Putty远程(SSH)管理Linux VPS的图文

  Putty 是一个免费的.Windows 32平台下的telnet.rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具. 用它来远程管理Linux VPS十分好用,其主要优点如下: ◆ 完全免费; ◆ 在Windows 下运行的都非常好; ◆ 全面支持ssh1和ssh2; ◆ 绿色软件,无需安装,下载后在桌面建个快捷方式即可使用; ◆ 体积很小; ◆ 操作简单,所有的操作都在一个控制面板中实现. 下载完成,解压,即可使用. 以下是使用putty 登录Linux VPS进

利用微信的公众平台监控管理linux服务器

最近懒得做运维自动化了,看到市场部门的同事在调用公众平台的接口,感觉很有意思~就想试试用这个管理简单的管理linux主机,并推送告警信息. 打算这段时间主要再扩展下这个应用~ 增加一些危险字符的判断,可以自己指定一个转义字符 2   针对post的数据进行加密下  比如     555ifconfig     这个555就是密码,在后端会有判断的,没有555的一切命令都不会执行 3   微信平台也可以恢复一些图文的,我可以把流量图,或者是各种rrd库里面的图,发给客户端 申请微信公众平台 参考

使用Shell自动化管理脚本清理Nginx的proxy_cache缓存

Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存.两者的功能基本上一样. 在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能.清除指定URL缓存的功能.而在性能上,Nginx对多核CPU的利用,胜过Squid不少.另外,在反向代理.http://www.aliyun.com/zixun/aggregation/13996.html

巧妙设置Android来方便管理Linux和Windows

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1056511 前几天晚上睡觉前没事,想了想如何实现用Android手机来管理Linux和Windows,比如连接到Linux的SSH(Secured Shell)和连接到Windows的cmd(直接访问PowerShell估计还有一定的困难,不过只要可以访问cmd,输入"powershell"就可以访问Po

常用windows下远程管理Linux服务器的方法

随着互联网的 高速发展以及Linuxhttp://www.aliyun.com/zixun/aggregation/13760.html">企业应用的成熟,Linux被广泛应用于服务器领域,如何实现Linux的远程管理成为 网络管理员的首要任务.我们经常见到的几种最为常用的windows下远程管理Linux服务器的方法,基本上都是利用SecureCRT,F-Secure SSH 抑或是PUTTY等客户端工具通过ssh服务来实现Windows下管理Linux服务器的,这些客户端工具几乎不需要

通过COM口管理Linux服务器_unix linux

本文简要地介绍了如何通过常见的COM口进行Linux服务器的控制台的扩展,具有实用性和简易性,不受服务器网络等条件的限制,可以方便地管理实际生产环境中的Linux服务器. 说到管理Linux服务器,大家会有很多种不同的办法:键盘+显示器.通过网络登陆.基于WEB的工具.X系统下的图形工具等等,这些方法用在普通的服务器或者自己 的PC服务器上是没有任何问题的,但是要管理一台24X7模式的服务器,确保在任何情况下都能直接快捷地管理到服务器,就不是那么容易了. 对比以上说到的几种方式: X系统下的图形

真的超赞!用systemd命令来管理linux系统!

真的超赞!用systemd命令来管理linux系统! Systemd是一种新的linux系统服务管理器. 它替换了init系统,能够管理系统的启动过程和一些系统服务,一旦启动起来,就将监管整个系统.在本文中,我们用的是安装有 systemd 216 版本的centos 7.0,其最新版本可以从 freedesktop.org 下载得到. 因为linux操作系统里出现的这一个新人,PID 1被"systemd"占据了,这能通过pstree命令看到. [root@linoxide ~]#

kickstart自动化安装linux

参考了51cto博客各路大神的文章,结合自己实践过程,虽中间经历了些困难挫折,最终还是成功完成配置,实现了自动化安装linux. (重点参考灰度的BLOG, http://rrliang.blog.51cto.com/4214966/1040863) 安装环境,虚拟机VirtualBox虚拟2台机器,一台做kickstart服务器,一台做客户端 服务器系统为CentOS 6.3 X86_64, 安装光盘为CentOS 6.3 X86_64 DVD 网卡全部配置为"内部网络" 首先,需要