使用 Fabric 自動化部署

2022-05-18 03:07:40 字數 2030 閱讀 8056

fabric 目前僅支援 python2,如果你的系統中只有 python3 版本,可以使用 fabric3,但是只能安裝低版本1.14.post1,高版本不支援api方法。

接下就可以簡單地通過 pip 命令安裝 fabric 了。

# 如果是 python 2

pip install fabric

# 如果是 python 3

pip install fabric3==1.14.post1

在寫 fabric 指令碼之前,我們先來回顧一下當我們在本地開發環境下更新了**後,在伺服器上的整個部署過程。

遠端連線伺服器。

進入專案根目錄,從遠端倉庫拉取最新的**。

如果專案引入了新的依賴,需要執行pip install -r requirement.txt安裝最新依賴。

如果修改或新增了專案靜態檔案,需要執行python manage.py collectstatic收集靜態檔案。

如果資料庫發生了變化,需要執行python manage.py migrate遷移資料庫。

重啟 nginx 和 gunicorn 使改動生效。

整個過程就是這樣,把每一步操作翻譯成 fabric 對應的指令碼**,這樣乙個自動化部署指令碼就完成了。

fabric 指令碼通常位於 fabfile.py 檔案裡,因此先在專案根目錄下建乙個 fabfile.py 檔案。

根據上述過程編寫的指令碼**如下:

from fabric.api import env, run

from fabric.operations import sudo

git_repo = ""

env.user = '伺服器使用者名稱'

env.password = '伺服器密碼'

# 填寫你自己的主機對應的網域名稱或ip

env.hosts = ['60.205.190.158']

# 一般情況下為 22 埠,如果非 22 埠請檢視你的主機服務提供商提供的資訊

env.port = '22'

def deploy():

source_folder = '/home/jmp/sites/blogproject'

run('cd %s && git reset --hard' % source_folder)

run('cd %s && git pull' % source_folder)

run("""

cd {} &&

../env/bin/pip install -r requirements.txt &&

../env/bin/python3 manage.py collectstatic --noinput &&

../env/bin/python3 manage.py migrate

""".format(source_folder))

sudo('restart gunicorn-blogproject')

sudo('service nginx reload')

注意全部的指令碼**要放在 deploy 函式裡,fabric 會自動檢測 fabfile.py 指令碼中的 deploy 函式並執行。

由於指令碼中有登入伺服器的使用者名稱和密碼等敏感資訊,不要把 fabfile.py 檔案也上傳到公開的**託管倉庫。

進入 fabfile.py 檔案所在的目錄,在 python 的環境下用 fab 命令執行這個指令碼檔案(已配置環境變數)。

比如我的是 windows 環境,那麼執行:

d:\code\python\django\blogproject>fab deploy

這時 fabric 會自動檢測到 fabfile.py 指令碼中的 deploy 函式並執行,你會看到命令列輸出了一系列字串,如果在最後看到:

done. disconnecting from blogproject... done.

說明指令碼執行成功。

而如果看到

aborting. disconnecting from blogproject... done.

fabric 自動化部署

專案發布和運維的工作相當機械,頻率還蠻高,導致時間浪費在敲大量重複的命令上。修復bug什麼的,測試,提交版本庫 2分鐘 ssh到測試環境pull部署 2分鐘 rsync到線上機器a,b,c,d,e 1分鐘 分別ssh到abcde五颱機器,逐一重啟 8 10分鐘 13 15分鐘 其中鬱悶的是,每次操作...

有關自動化部署Fabric

要部署多台生產伺服器的時候,一台一台去配置不方便,所以我們需要自動化部署的方式來部署。本文採用的是fabric,在ubuntu 64 上實現。fabric python內建的模組,用來提高基於 ssh 的應用部署和系統管理效率。可以實現與遠端伺服器的自動化互動。一般使用情況為需要運維幾台至幾百台機器...

Python 自動化部署 fabric 使用詳解

寫在前面 本文使用的是python2.7 fabric1.14 目前fabric還是使用python2居多 1 fabric入門 建立的檔案的檔名盡量為fabfile.py 內容為 coding utf 8 from fabric.api import task 裝飾器,表示是乙個任務 runs o...