使用 Fabric 自動(dòng)化部署Docker爬蟲(chóng)集群

Fabric 是一個(gè) Python (2.5+ or 3.4+) 的庫(kù)和命令行工具商玫,用來(lái)提高基于 SSH 的應(yīng)用部署和系統(tǒng)管理效率。
更具體地說(shuō)渤早,F(xiàn)abric 是:
一個(gè)讓你通過(guò) 命令行 執(zhí)行 無(wú)參數(shù) Python 函數(shù) 的工具;
一個(gè)讓通過(guò) SSH 執(zhí)行 Shell 命令更加 容易 、 更符合 Python 風(fēng)格 的命令庫(kù)(建立于一個(gè)更低層次的庫(kù))尖奔。

因?yàn)榇笈坎渴鸷途S護(hù)爬蟲(chóng)需要依賴(lài)自動(dòng)化運(yùn)維桦卒;所以Fabric能很好地幫你解決這些問(wèn)題,而且上手很容易磨取。

  1. 安裝
pip3 install fabric
  1. 本地連接
from fabric import Connection
server = Connection('127.0.0.1')
  1. 本地執(zhí)行命令
result = server.local('cd ..')
print(result)
  1. 遠(yuǎn)程登陸
from fabric import Connection

# 密碼登陸
conn = Connection(host='root@10.10.10.10:2201', user='root', connect_kwargs={'password': '123123123'})
# 秘鑰登陸
# conn = Connection(host='root@10.10.10.10:2201', connect_kwargs={"key_filename": "/home/myuser/.ssh/private.key"})
  1. 遠(yuǎn)程執(zhí)行代碼
result = conn.run('ls')
print(result)
  1. 上傳文件
result = server.put('D:\Work\project\DeployManager.py', '/root/')
  1. 下載文件
result = server.get('/root/DeployManager.py', '../')
  1. 批量連接操作
from fabric import Connection

for host in ('2.2.8.8', '5.8.0.5', '5.8.1.7'):
    server = Connection(host, user='centos', connect_kwargs={"key_filename": r"key.pem"})
    print(server)
    result = server.run('ls')
    print(result)
    result = server.put('DeployManager.py', '.')
    print(result)
  1. 群組批量連接操作
    這種方式只支持相同密碼或秘鑰連接可训。
from fabric import SerialGroup as Group

pool = Group('2.2.8.8', '5.8.0.5', '5.8.1.7', user='centos',
             connect_kwargs={"key_filename": r"key.pem"})
results = pool.run('ls')
print(results)
for connection, result in results.items():
    print("{0.host}: {1.stdout}".format(connection, result))
  1. 批量部署Docker集群的Salve環(huán)境
    結(jié)合上一篇的內(nèi)容:Docker搭建大型分布式爬蟲(chóng), 如果你有100臺(tái)服務(wù)器需要安裝配置甘凭,你肯定不想一臺(tái)一臺(tái)的手動(dòng)完成稀拐。這時(shí)候使用Python的遠(yuǎn)程連接工具Fabric編寫(xiě)腳本,就可以自動(dòng)的幫你搭建環(huán)境丹弱。
    所以只需要配置好1臺(tái)服務(wù)器德撬,然后再把需要的命令用Python腳本批量登陸部署。
pool = Group('2.2.8.8', '5.8.0.5', '5.8.1.7', user='centos',
             connect_kwargs={"key_filename": r"key.pem"})
code_str = '''yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
echo '{ "insecure-registries":["112.222.211.244:8181"] }' >> /etc/docker/daemon.json
systemctl restart docker
docker swarm join --token SWMTKN-1-2vkysm719347vkbs1x333aaan1w63s4-1q4ztrcirrrttttuu3fm50btm 112.222.211.244:2377'''
code_list = code_str.split('\n')
for code in code_list:
    results = pool.run(code)
    print(results)
    for connection, result in results.items():
        print("{0.host}: {1.stdout}".format(connection, result))
  1. 不使用Docker直接部署
for host in ('2.2.8.8', '5.8.0.5', '5.8.1.7'):
    server = Connection(host, user='centos', connect_kwargs={"key_filename": r"key.pem"})
    l = '''sudo yum install epel-release gcc gcc-c++ -y
sudo yum install https://rhel7.iuscommunity.org/ius-release.rpm -y
sudo yum install python36u python36u-pip python36u-devel -y && ln -s /bin/python3.6 /bin/python3
sudo /usr/bin/pip3.6 install --upgrade pip
sudo /usr/bin/pip3.6 install requests selenium pymongo redis tenacity fake_useragent celery pyexecjs sshtunnel pymysql jieba pillow scrapy_redis -i https://pypi.douban.com/simple/
sudo curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
sudo yum -y install nodejs
sudo yum -y install unzip'''
    l = l.split('\n')
    for i in l:
        print(i)
        result = server.run(i)
        print(result)
    server.put('spider.zip', '.')
    server.run('unzip spider.zip')
    server.run('cd spider && nohup python3 -u run.py >res.log &')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躲胳,一起剝皮案震驚了整個(gè)濱河市蜓洪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坯苹,老刑警劉巖隆檀,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粹湃,居然都是意外死亡恐仑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)为鳄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)裳仆,“玉大人,你說(shuō)我怎么就攤上這事孤钦∑缯澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵偏形,是天一觀的道長(zhǎng)静袖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)俊扭,這世上最難降的妖魔是什么队橙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮统扳,結(jié)果婚禮上喘帚,老公的妹妹穿的比我還像新娘。我一直安慰自己咒钟,他們只是感情好吹由,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著朱嘴,像睡著了一般倾鲫。 火紅的嫁衣襯著肌膚如雪粗合。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天乌昔,我揣著相機(jī)與錄音隙疚,去河邊找鬼。 笑死磕道,一個(gè)胖子當(dāng)著我的面吹牛供屉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溺蕉,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伶丐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了疯特?” 一聲冷哼從身側(cè)響起哗魂,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漓雅,沒(méi)想到半個(gè)月后录别,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邻吞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年组题,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抱冷。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡往踢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徘层,到底是詐尸還是另有隱情,我是刑警寧澤利职,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布趣效,位于F島的核電站,受9級(jí)特大地震影響猪贪,放射性物質(zhì)發(fā)生泄漏跷敬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一热押、第九天 我趴在偏房一處隱蔽的房頂上張望西傀。 院中可真熱鬧,春花似錦桶癣、人聲如沸拥褂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饺鹃。三九已至莫秆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悔详,已是汗流浹背镊屎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茄螃,地道東北人缝驳。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像归苍,于是被迫代替她去往敵國(guó)和親用狱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 在爬蟲(chóng)開(kāi)發(fā)過(guò)程中霜医,你肯定遇到過(guò)需要把爬蟲(chóng)部署在多個(gè)服務(wù)器上面的情況齿拂。此時(shí)你是怎么操作的呢?逐一SSH登錄每個(gè)服務(wù)器...
    Java大生閱讀 771評(píng)論 0 6
  • Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列的資...
    Clemente閱讀 3,266評(píng)論 0 54
  • Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列的資...
    葉同學(xué)閱讀 11,172評(píng)論 0 73
  • 版權(quán)聲明:此文是肴敛,今天2016年9月19晚署海,李笑來(lái)在知乎 LIVE 的音頻筆記。如有版權(quán)問(wèn)題医男,請(qǐng)及時(shí)聯(lián)系我砸狞。我會(huì)及...
    吳佩在天涯閱讀 521評(píng)論 3 6
  • 要離(新韻) 重諾輕生豪邁, 沽名釣譽(yù)嫌疑镀梭。 計(jì)出苦肉亦稱(chēng)奇刀森, 滅子焚妻斷臂。 褒貶春秋人物报账, 評(píng)說(shuō)勇士要離研底。 不...
    澧水幽蘭閱讀 305評(píng)論 5 25