簡體   English   中英

你如何使用pip,virtualenv和Fabric來處理部署?

[英]How do you use pip, virtualenv and Fabric to handle deployment?

您的設置,技巧以及最重要的工作流程是什么?

這些工具很棒但是仍然沒有附加到它們的最佳實踐,因此我不知道使用它們的最有效方法是什么。

  • 你使用pip包還是總是下載?
  • 你手動設置Apache / Cherokee / MySQL還是有腳本?
  • 你把所有東西都放在virtualenv中並使用--no-site-packages嗎?
  • 你有幾個項目使用virtualenv嗎?
  • 你使用Fabric做什么(你編寫部署的哪一部分)?
  • 您是將Fabric腳本放在客戶端還是服務器上?
  • 您如何處理數據庫和媒體文件遷移?
  • 你有沒有需要像SCons這樣的構建工具?
  • 部署的步驟是什么? 你多久經常表演一次?
  • 等等

“最佳實踐”非常依賴於環境,因此我不會聲稱我的實踐是最好的,只是它們適合我。 我的工作主要是小型網站,所以沒有多服務器部署,CDN等。我確實需要支持Webfaction共享主機部署,因為一些客戶需要他們能找到的最便宜的主機。 我經常需要在不同的環境中多次部署站點,因此可重復的腳本部署至關重要。

  • 我不使用pip包,我從requirements.txt安裝。 我使用我需要的所有內容運行自己的chishop服務器,因此構建過程中沒有多個單點故障。 我還在我的開發機器上使用PIP_DOWNLOAD_CACHE來加速引導項目環境,因為我的大多數項目的要求都相當重疊。
  • 我有Fabric腳本,可以在Ubuntu VPS上自動設置和配置nginx + Apache / mod_wsgi,或者在Webfaction共享主機上配置等價物,然后部署項目。
  • 我不使用帶有virtualenv的--no-site-packages,因為我更喜歡在系統級安裝緩慢移動的編譯包(Python Imaging Library,psycopg2); 在每個virtualenv內部做太慢和麻煩。 我沒有遇到污染系統站點包的問題,​​因為我一般不會污染它。 無論如何,你可以在virtualenv中安裝不同版本的東西,它將優先考慮。
  • 每個項目都有自己的virtualenv。 我有一些bash腳本(不是virtualenvwrapper ,雖然很多人使用它並喜歡它),它可以自動將給定項目的virtualenv部署到已知位置並將該項目的需求安裝到其中。
  • 整個部署過程,從裸Ubuntu服務器VPS或Webfaction共享主機帳戶到正在運行的網站,使用Fabric編寫腳本。
  • Fabric腳本是項目源代碼樹的一部分,我從本地開發結帳中運行它們。
  • 我不需要SCons(我知道)。

部署

目前,新的部署分為以下幾個步驟:

  • fab staging bootstrap (服務器設置和初始代碼部署)
  • fab staging enable (為此站點啟用Apache / nginx配置)
  • fab staging reload_server (重新加載Apache / nginx配置)。

這些當然可以組合成一個命令行fab staging bootstrap enable reload_server

完成這些步驟后,使用新代碼更新部署只是fab staging deploy

如果我需要回滾更新,那么fab staging rollback 回滾中沒有什么特別神奇的東西; 它只是將代碼回滾到最后部署的版本並將數據庫遷移到以前的狀態(這需要記錄有關部署后部署的遷移狀態的一些元數據,我只是在文本文件中執行此操作)。

例子

我沒有使用這個答案中描述的Fabric腳本幾年,所以它們根本沒有維護,我對它們的質量不承擔責任:-)但你可以在https://bitbucket.org/carljm看到它們/ django-project-template - 在repo根目錄下的fabfile.py中,以及deploy/子目錄中。

我使用fabric來構建和部署我的代碼,並假設已經為此設置了一個系統。 我認為像puppet這樣的工具更適合自動安裝apache和mysql之類的東西,盡管我還沒有真正將它包含在我的工作流程中。

此外,我通常每個項目都有不同的virtualenv。 它們是從python的“基礎”安裝創建的 - 正如Carl指出的那樣 - 你可以留下一些全局的python庫。

所以在工作流方面會是:

  1. 用於安裝所需服務的木偶(Web服務器,數據庫,ssh服務器......)
  2. puppet設置所需的用戶和基本文件夾
  3. fabric為應用程序創建virtualenv
  4. fabric來自requirements.txt的pip install
  5. 用於部署應用的結構
  6. fabric用於部署配置文件(Web服務器,...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM