近年來,由于我一直負責公司所有產(chǎn)品和項目的數(shù)據(jù)收集,涉及的服務器有幾十臺。同時,由于不同項目的需求不同,定制開發(fā)的合集腳本有上百種。每次發(fā)布新功能,或者修改一個小bug,都需要反復執(zhí)行:登錄服務器-->切換到指定目錄-->拉取代碼-->修改配置-->重啟服務PS時尚花紋筆刷下載,以此類推。
其實這種操作很繁瑣,沒有技術(shù)含量mac電腦遠程連接運維軟件,容易出問題,所以就出來了。它是一個遠程部署神器,可以在本地執(zhí)行來自遠程服務器的命令。
怎么做?這很簡單,只需幾個步驟。
安裝
$ pip install fabric --upgrade
請注意,如果您安裝舊版本,則新版本與舊版本不兼容。目前一共有三個版本ImageCut(圖片剪裁工具),前一個,只支持,棄用,但是現(xiàn)在的一個,支持,也是官方極力推薦的還有一個版本,是網(wǎng)友從老版本克隆出來的非官方版本,但是是兼容的mac電腦遠程連接運維軟件,也支持and。
最新的不需要.py文件或者fab命令,現(xiàn)在網(wǎng)上幾乎所有的教程和資料都還是以寫為主。當你在看那些教程的時候,注意篩選。新版本提供的API非常簡單。
運行命令
我們來看一個例子,下面是一個部署腳本
.py1.創(chuàng)建遠程連接2.進入指定目錄3.在指定目錄下執(zhí)行重啟命令
from fabric import Connection
def main():
# ip 我是隨便填的
# 如果你的電腦配了ssh免密碼登錄,就不需要 connect_kwargs 來指定密碼了。
c = Connection("root@232.231.231.22", connect_kwargs={"password": "youpassword"})
with c.cd('/var/www/youproject'):
c.run("git pull origin master")
c.run("/usr/bin/supervisorctl -c ../supervisor/supervisord.conf restart youproject")
if __name__ == '__main__':
main()
實施
python deploy.py
執(zhí)行完成后,最新的代碼已經(jīng)部署到官方環(huán)境,服務已經(jīng)重啟。是不是很方便?媽呀,不用再擔心我在官方環(huán)境打錯命令刪除數(shù)據(jù)庫跑路了。
不僅支持Linux,而且在平臺上運行良好。在中小型項目中頹廢風格斜線筆刷下載,是非常好的運維工具。有了它,管理數(shù)百臺服務器都不是問題。
建立連接
class Connection(Context):
host = None
user = None
port = None
ssh_config = None
connect_timeout = None
connect_kwargs = None
...
構(gòu)造對象的方式有很多種,例如可以將host寫成“root@192.168.101.1:22”,或者分別寫成3個參數(shù)。相反,它是一個字典對象,通常填充服務器的登錄密碼或密鑰。
上傳文件
run方法用于執(zhí)行命令,cd進入指定目錄,put方法用于上傳文件,例如:
from fabric import Connection
c = Connection('web1')
c.put('myfiles.tgz', '/opt/mydata')
c.run('tar -C /opt/mydata -xzvf /opt/mydata/myfiles.tgz')
多臺服務器
如果要在多臺服務器上運行命令,簡單的方法是使用迭代,并在一臺服務器上執(zhí)行命令:
web1,web2,mac1都是服務器名,也可以用ip代替
或使用
from fabric import SerialGroup as Group
pool = Group('web1', 'web2', 'web3', connect_kwargs={"password": "youpassword"} )
pool.put('myfiles.tgz', '/opt/mydata')
pool.run('tar -C /opt/mydata -xzvf /opt/mydata/myfiles.tgz')
Group(*hosts, **) 參數(shù)說明:
?*hosts: 可以傳入多個主機名或IP
?**kwargs 接收的參數(shù)可以和Connection一樣,可以指定密碼