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...