2012-04-05 62 views
3

我很想搞清楚在服務器上組織Django應用程序的最佳實踐方式。Django服務器結構和約定

  • 你在哪裏放置Django代碼? (舊的)年曆說/home/django/domains/somesitename.com/,但我也看到了放置在/ opt/apps/somesitename /中的東西。我認爲/ opt /想法聽起來更好,因爲它不是全球性的,但我之前沒有看到選擇,並且推測應用程序可能會更好地進入特定於網站的部署者用戶主目錄。

  • 你會建議有一個全局部署者用戶,每個站點一個用戶,還是每個站點env有一個用戶(例如,sitenamelive,sitenamestaging)。我想每個網站一個。

  • 你如何版本配置文件?我目前將它們放在源代碼管理頂級的/ etc /文件夾中。例如/etc/nginc/somesite-live.conf。

  • 如何配置服務器並進行部署?多年來,我一直抵制廚師和Puppet,希望獲得基於Python的東西。 Silver Lining似乎還沒有準備好,我對Patchwork有很大的希望(https://github.com/fabric/patchwork/)。目前我們只是使用一些定製的Fabric腳本進行部署,但「服務器配置」由bash腳本和一些手動步驟來處理,用於添加密鑰和創建用戶。我正在調查Silk Deployment(https://bitbucket.org/btubbs/silk-deployment),因爲它似乎最接近我們的設置。

謝謝!

+1

這可能會被關閉,因爲這裏真的有4個問題。我保持一切簡單,並把我所有的網站放在'/ sites/www.mysite.com /'下。在特定站點的文件夾中,我有一個'project'文件夾,其中包含需要檢入VCS的特定於該站點的* everything *文件夾,包括配置,設置,自述文件,要求等。 – 2012-04-05 10:37:58

回答

1

我認爲您需要更多關於您部署的網站類型的信息:根據網站之間的關係,以編程方式和「合法」方式(如在商業關係中)存在差異:

如果你是一個網頁設計師和程序員有幾個客戶,那麼你可能會從分離受益 -
  • 具有每「現場」的系統帳戶,如果網站是「擁有」不同的人都能得心應手。
  • 如果您的網站是相關的,即論壇網站,博客網站等,您可能會受益於單一部署系統(如我們的)。
  • 對於圖書館來說,如果它們是在信譽良好的資源(pypy,github等)上託管的,那麼它可能會將它們留在那裏並從它們進行部署 - 如果它們位於宕機的主機上,並把它們放在我們的git倉庫的第三方文件夾中。

FABRIC 面料是驚人的 - 如果配置適合你的設置和:

  • 在這裏,我們有一個政策,這意味着沒有人需要登錄到服務器(這是大多真的 - 有時候我們想看看原始的nginx日誌文件,但它很少見)。
  • 我們有布配置,以便有各個功能塊(restart_nginx,restart_uwsgi等),而且其運行的所有小塊以正確的順序
  • 更高級別的「生意」功能 - 爲我們所有更新我們的服務器我們小心地輸入'fab -i secretkey實時部署' - 實時設置活動服務器的設置,並部署ldeploys(-i是可選的,如果你有。ssh密鑰設置正確
  • 我們甚至有一個控制標誌,如果使用實時設置,它會在執行部署之前詢問'您確定'。

我們的代碼佈局

所以我們的代碼庫的佈局看起來有點像這樣:因爲我們我們的二進制文件加載到我們的回購,但它意味着

/   <-- folder containing readme file etc 
/bin/  <-- folder containing nginx & uwsgi binaries (!) 
/config/ <-- folder containing nginx config and pip list but also things like pep8 and pylint configs 
/fabric/ <-- folder containing fabric deployment 
/logs/ <-- holding folder that nginx logs get written into (but not committed) 
/src/  <-- actual source is in here! 
/thirdparty/ <-- third party libs that we didn't trust the hosting of for pip 

可能有爭議,如果我升級nginx,並想要回滾,我只是通過操縱git來完成。我知道什麼是對什麼構建有效。

我們的部署工作原理:

我們所有的源代碼託管在一個私人到位桶回購(我們有很多回購和少數用戶的,這就是爲什麼到位桶對我們來說是更好的,然後github上)。我們有一個用於'服務器'的用戶帳戶,它有自己的bitshcket的ssh密鑰。

部署在織物執行每個服務器上的以下:

  • IRC機器人宣佈開始到IRC頻道
  • GIT中拉
  • PIP部署(從一個PIP列表中我們回購)
  • syncdb
  • south migrate
  • uwsgi restart
  • 芹菜重啓
  • IRC bot的公佈完成情況納入IRC頻道
  • 開始可用性測試
  • 宣佈可用性測試(或後報告爲民營引擎收錄)

的「可用性測試」的結果(因爲單位測試,但針對實時服務器) - 點擊「測試」帳戶上的所有網頁和API,以確保其獲取正常數據而不影響實時統計數據。

我們也有一個備份git的服務,所以如果到位桶下跌,它落在了該擺好,我們甚至有詹金斯整合上提交的「部署」分支,它會導致部署要經過

嚇人的位

因爲我們使用雲計算和期待高吞吐量,我們的盒子自動重生。 Theres是一個包含git repo等副本的默認映像,但總是會過期的,所以它們是一個啓動腳本,它自動部署,這意味着添加到集羣的新框自動更新。