15 - 使用 Fabric 自动化部署
在 使用 Nginx 和 Gunicorn 部署 Django 博客 中,我們通過手工方式將代碼部署到了服務器。整個過程涉及到十幾條命令,輸了 N 個字符。一旦我們本地的代碼有更新,整個過程又得重復來一遍,這將變得非常繁瑣。
使用 Fabric 可以在服務器中自動執行命令。因為整個代碼部署過程都是相同的,只要我們用 Fabric 寫好部署腳本,以后就可以通過運行腳本自動完成部署了。
安裝 Fabric
Fabric 目前僅支持 Python2,如果你的系統中只有 Python3 版本,請先安裝一個 Python2 的版本,推薦安裝 Python 2.7。Python3 和 Python2 可以共存于一個系統,所以不用擔心同時安裝兩個版本的 Python 會發生沖突。
接下就可以簡單地通過 pip 命令安裝 Fabric 了。注意要使用 Python2 環境下的 pip,這樣才能把 Fabric 安裝到 Python2 環境下。
pip install fabric復制代碼部署過程回顧
在寫 Fabric 腳本之前,我們先來回顧一下當我們在本地開發環境下更新了代碼后,在服務器上的整個部署過程。
整個過程就是這樣,把每一步操作翻譯成 Fabric 對應的腳本代碼,這樣一個自動化部署腳本就完成了。
編寫 Fabric 腳本
Fabric 腳本通常位于 fabfile.py 文件里,因此先在項目根目錄下建一個 fabfile.py 文件。
根據上述過程編寫的腳本代碼如下:
blogproject/fabfile.pyfrom fabric.api import env, run from fabric.operations import sudoGIT_REPO = "you git repository" ① env.user = 'you host username' ② env.password = 'you host password'# 填寫你自己的主機對應的域名 env.hosts = ['demo.zmrenwu.com']# 一般情況下為 22 端口,如果非 22 端口請查看你的主機服務提供商提供的信息 env.port = '22'def deploy():source_folder = '/home/yangxg/sites/zmrenwu.com/django-blog-tutorial' ③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-demo.zmrenwu.com') ⑥sudo('service nginx reload')復制代碼① 你的代碼托管倉庫地址。
② 配置一些服務器的地址信息和賬戶信息,各參數的含義分別為:
- env.user:用于登錄服務器的用戶名
- env.password:用戶名對應的密碼
- env.hosts:服務器的 IP 地址,也可以是解析到這個 IP 的域名
- env.port:SSH 遠程服務器的端口號
③ 需要部署的項目根目錄在服務器上的位置。
④ 通過 run 方法在服務器上執行命令,傳入的參數為需要執行的命令,用字符串包裹。這里執行了兩條命令,不同命令間用 && 符號連接:
⑤ 對應上述部署過程中 3-5 的幾條命令。因為啟用了虛擬環境,所以運行的是虛擬環境 ../env/bin/ 下的 pip 和 python
⑥ 重啟 Gunicorn 和 Nginx,由于這兩條命令要在超級權限下運行,所以使用了 sudo 方法而不是 run 方法。
注意全部的腳本代碼要放在 deploy 函數里,Fabric 會自動檢測 fabfile.py 腳本中的 deploy 函數并運行。
由于腳本中有登錄服務器的用戶名和密碼等敏感信息,不要把 fabfile.py 文件也上傳到公開的代碼托管倉庫。
執行 Fabric 自動部署腳本
進入 fabfile.py 文件所在的目錄,在 Python2 的環境下用 fab 命令運行這個腳本文件。
比如我的是 Windows 環境,Python2 安裝在 C:\Python27\ 下,那么運行:
C:\Python27\Scripts\fab deploy復制代碼這時 Fabric 會自動檢測到 fabfile.py 腳本中的 deploy 函數并運行,你會看到命令行輸出了一系列字符串,如果在最后看到
Done.
Disconnecting from zmrenwu.com... done.
說明腳本運行成功。
而如果看到
Aborting.
Disconnecting from zmrenwu.com... done.
說明腳本運行中出錯,檢查一下命令行輸入的錯誤信息,修復問題后重新運行腳本即可。以后當你在本地開發完相關功能后,只需要執行這一個腳本文件,就可以自動把最新代碼部署到服務器了。
總結
本章節的代碼位于:Step15: deploy automatically using fabric。
如果遇到問題,請通過下面的方式尋求幫助。
- 在 使用 Fabric 自動化部署 的評論區留言。
- 將問題的詳細描述通過郵件發送到 djangostudyteam@163.com,一般會在 24 小時內回復。
更多Django 教程,請訪問 追夢人物的博客。
總結
以上是生活随笔為你收集整理的15 - 使用 Fabric 自动化部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xen支持的块设备
- 下一篇: Git与SVN区别 \git学习