Fabric 目前僅支持 Python2,若是你的系統中只有 Python3 版本,可使用 Fabric3,可是隻能安裝低版本1.14.post1,高版本不支持api方法。python
部署過程回顧
在寫 Fabric 腳本以前,咱們先來回顧一下當咱們在本地開發環境下更新了代碼後,在服務器上的整個部署過程。git
- 遠程鏈接服務器。
- 進入項目根目錄,從遠程倉庫拉取最新的代碼。
- 若是項目引入了新的依賴,須要執行
pip install -r requirement.txt
安裝最新依賴。
- 若是修改或新增了項目靜態文件,須要執行
python manage.py collectstatic
收集靜態文件。
- 若是數據庫發生了變化,須要執行
python manage.py migrate
遷移數據庫。
- 重啓 Nginx 和 Gunicorn 使改動生效。
整個過程就是這樣,把每一步操做翻譯成 Fabric 對應的腳本代碼,這樣一個自動化部署腳本就完成了。
github
編寫 Fabric 腳本
Fabric 腳本一般位於 fabfile.py 文件裏,所以先在項目根目錄下建一個 fabfile.py 文件。數據庫
根據上述過程編寫的腳本代碼以下:api
from fabric.api import env, run
from fabric.operations import sudo
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 文件也上傳到公開的代碼託管倉庫。函數
執行 Fabric 自動部署腳本
進入 fabfile.py 文件所在的目錄,在 Python 的環境下用 fab 命令運行這個腳本文件(已配置環境變量)。post
好比個人是 Windows 環境,那麼運行:ui
D:\Code\Python\Django\blogproject>fab deploy
這時 Fabric 會自動檢測到 fabfile.py 腳本中的 deploy 函數並運行,你會看到命令行輸出了一系列字符串,若是在最後看到:
Done. Disconnecting from blogproject... done.
說明腳本運行成功。
而若是看到
Aborting. Disconnecting from blogproject... done.
說明腳本運行中出錯,檢查一下命令行輸入的錯誤信息,修復問題後從新運行腳本便可。之後當你在本地開發完相關功能後,只須要執行這一個腳本文件,就能夠自動把最新代碼部署到服務器了。