天天看點

Fabric - 通過 SSH 來自動化管理 Linux 任務和布署應用

當要管理遠端機器或者要布署應用時,雖然你有多種指令行工具可以選擇,但是其中很多工具都缺少詳細的使用文檔。

在這篇教程中,我們将會一步一步地向你介紹如何使用 fabric 來幫助你更好得管理多台伺服器。

使用 fabric 來自動化地管理 linux 任務

fabric 是一個用 python 編寫的指令行工具庫,它可以幫助系統管理者高效地執行某些任務,比如通過 ssh 到多台機器上執行某些指令,遠端布署應用等。

在使用之前,如果你擁有使用 python 的經驗能幫你更好的使用 fabric。當然,如果沒有那也不影響使用 fabric。

我們為什麼要選擇 fabric:

簡單

完備的文檔

如果你會 python,不用增加學習其他語言的成本

易于安裝使用

使用便捷

支援多台機器并行操作

<a target="_blank"></a>

fabric 有一個特點就是要遠端操作的機器隻需要支援标準的 openssh 服務即可。隻要保證在機器上安裝并開啟了這個服務就能使用 fabric 來管理機器。

python 2.5 或更新版本,以及對應的開發元件

python-setuptools 和 pip(可選,但是非常推薦)gcc

我們推薦使用 pip 安裝 fabric,但是你也可以使用系統自帶的包管理器如 <code>yum</code>, <code>dnf</code> 或 <code>apt-get</code> 來安裝,包名一般是 <code>fabric</code> 或 <code>python-fabric</code>。

<code># yum install fabric [适用于基于 redhat 系統]</code>

<code># dnf install fabric [适用于 fedora 22+ 版本]</code>

如果你是 debian 或者其派生的系統如 ubuntu 和 mint 的使用者,你可以使用 apt-get 來安裝,如下所示:

<code># apt-get install fabric</code>

如果你要安裝開發版的 fabric,你需要安裝 pip 來安裝 master 分支上最新版本。

<code># yum install python-pip [适用于基于 redhat 系統]</code>

<code># dnf install python-pip [适用于fedora 22+ 版本]</code>

<code># apt-get install python-pip [适用于基于 debian 系統]</code>

安裝好 pip 後,你可以使用 pip 擷取最新版本的 fabric。

<code># pip install fabric</code>

現在我們來開始使用 fabric,在之前的安裝的過程中,fabric python 腳本已經被放到我們的系統目錄,當我們要運作 fabric 時輸入 <code>fab</code> 指令即可。

按照慣例,先用你喜歡的編輯器建立一個名為 fabfile.py 的 python 腳本。你可以使用其他名字來命名腳本,但是就需要指定這個腳本的路徑,如下所示:

<code># fabric --fabfile /path/to/the/file.py</code>

fabric 使用 <code>fabfile.py</code> 來執行任務,這個檔案應該放在你執行 fabric 指令的目錄裡面。

例子 1:建立入門的 <code>hello world</code> 任務:

<code># vi fabfile.py</code>

在檔案内輸入如下内容:

<code>def hello():</code>

<code>print('hello world, tecmint community')</code>

儲存檔案并執行以下指令:

<code># fab hello</code>

Fabric - 通過 SSH 來自動化管理 Linux 任務和布署應用

fabric 工具使用說明

例子 2:建立一個名為 fabfile.py 的檔案并打開:

粘貼以下代碼至檔案:

<code>#! /usr/bin/env python</code>

<code>from fabric.api import local</code>

<code>def uptime():</code>

<code>local('uptime')</code>

<code># fab uptime</code>

Fabric - 通過 SSH 來自動化管理 Linux 任務和布署應用

fabric: 檢查系統運作時間

讓我們看看這個例子,fabfile.py 檔案在本機執行了 uptime 這個指令。

fabric api 使用了一個名為 <code>env</code> 的關聯數組(python 中的詞典)作為配置目錄,來儲存 fabric 要控制的機器的相關資訊。

<code>env.hosts</code> 是一個用來存儲你要執行 fabric 任務的機器的清單,如果你的 ip 位址是 192.168.0.0,想要用 fabric 來管理位址為 192.168.0.2 和 192.168.0.6 的機器,需要的配置如下所示:

<code>#!/usr/bin/env python</code>

<code>from fabric.api import env</code>

<code>env.hosts = [ '192.168.0.2', '192.168.0.6' ]</code>

上面這幾行代碼隻是聲明了你要執行 fabric 任務的主機位址,但是實際上并沒有執行任何任務,下面我們就來定義一些任務。fabric 提供了一系列可以與遠端伺服器互動的方法。

fabric 提供了衆多的方法,這裡列出幾個經常會用到的:

run - 可以在遠端機器上運作的 shell 指令

local - 可以在本機上運作的 shell 指令

sudo - 使用 root 權限在遠端機器上運作的 shell 指令

get - 從遠端機器上下載下傳一個或多個檔案

put - 上傳一個或多個檔案到遠端機器

例子 3:在多台機子上輸出資訊,建立新的 fabfile.py 檔案如下所示

<code>from fabric.api import env, run</code>

<code>env.hosts = ['192.168.0.2','192.168.0.6']</code>

<code>def echo():</code>

<code>run("echo -n 'hello, you are tuned to tecmint ' ")</code>

運作以下指令執行 fabric 任務

Fabric - 通過 SSH 來自動化管理 Linux 任務和布署應用

fabric: 自動在遠端 linux 機器上執行任務

例子 4:你可以繼續改進之前建立的執行 uptime 任務的 fabfile.py 檔案,讓它可以在多台伺服器上運作 uptime 指令,也可以檢查其磁盤使用情況,如下所示:

<code>run('uptime')</code>

<code>def disk_space():</code>

<code>run('df -h')</code>

儲存并執行以下指令

<code># fab disk_space</code>

Fabric - 通過 SSH 來自動化管理 Linux 任務和布署應用

fabric:自動在多台伺服器上執行任務

例子 5:我們來嘗試一下在遠端伺服器上布署 lamp(linux, apache, mysql/mariadb and php)

我們要寫個函數在遠端使用 root 權限安裝 lamp。

<code>def deploy_lamp():</code>

<code>run ("yum install -y httpd mariadb-server php php-mysql")</code>

<code>sudo("apt-get install -q apache2 mysql-server libapache2-mod-php5 php5-mysql")</code>

儲存并執行以下指令:

<code># fab deploy_lamp</code>

注:由于安裝時會輸出大量資訊,這個例子我們就不提供螢幕 gif 圖了

你可以運作 <code>fab -help</code> 輸出幫助資訊,裡面列出了所有可以使用的指令行資訊

<code>–fabfile=path</code> 選項可以讓你定義除了名為 fabfile.py 之外的子產品

如果你想用指定的使用者名登入遠端主機,請使用 <code>-user=user</code> 選項

如果你需要密碼進行驗證或者 sudo 提權,請使用 <code>–password=password</code> 選項

如果需要輸出某個指令的詳細資訊,請使用 <code>–display=指令名</code> 選項

使用 <code>--list</code> 輸出所有可用的任務

使用 <code>--list-format=format</code> 選項能格式化 <code>-list</code> 選項輸出的資訊,可選的有 short、normal、 nested

<code>--config=path</code> 選項可以指定讀取配置檔案的位址

<code>-–colorize-errors</code> 能顯示彩色的錯誤輸出資訊

<code>--version</code> 輸出目前版本

原文釋出時間為:2016-08-22

本文來自雲栖社群合作夥伴“linux中國”