使用 Fabric 自動化部署

安裝 Fabric

Fabric 目前僅支持 Python2,若是你的系統中只有 Python3 版本,可使用 Fabric3,可是隻能安裝低版本1.14.post1,高版本不支持api方法。python

接下就能夠簡單地經過 pip 命令安裝 Fabric 了。nginx

# 若是是 python 2
pip install fabric
 
# 若是是 python 3
pip install fabric3==1.14.post1
 

部署過程回顧

在寫 Fabric 腳本以前,咱們先來回顧一下當咱們在本地開發環境下更新了代碼後,在服務器上的整個部署過程。git

  1. 遠程鏈接服務器。
  2. 進入項目根目錄,從遠程倉庫拉取最新的代碼。
  3. 若是項目引入了新的依賴,須要執行 pip install -r requirement.txt 安裝最新依賴。
  4. 若是修改或新增了項目靜態文件,須要執行 python manage.py collectstatic 收集靜態文件。
  5. 若是數據庫發生了變化,須要執行 python manage.py migrate 遷移數據庫。
  6. 重啓 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.
說明腳本運行中出錯,檢查一下命令行輸入的錯誤信息,修復問題後從新運行腳本便可。之後當你在本地開發完相關功能後,只須要執行這一個腳本文件,就能夠自動把最新代碼部署到服務器了。
相關文章
相關標籤/搜索