當要管理遠端機器或者要布署應用時,雖然你有多種指令行工具可以選擇,但是其中很多工具都缺少詳細的使用文檔。
在這篇教程中,我們将會一步一步地向你介紹如何使用 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 工具使用說明
例子 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: 檢查系統運作時間
讓我們看看這個例子,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: 自動在遠端 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:自動在多台伺服器上執行任務
例子 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中國”