2016-02-04 131 views
1

我正在開發一個工具,使用Django在我的組織內部使用。它用於搜索和標記文檔(使用Haystack和Solr),並將用於不同的項目。我的團隊目前有一個工作原型,我們想要在野外部署它。將Django作爲獨立的內部應用程序部署?

我們的安全環境非常嚴格。項目文檔位於網絡驅動器上的子文件夾中,並且基於用戶的Windows憑據(我們也有使用相同憑據的MS SQL服務器)來限制對這些文件夾的訪問。用戶只能訪問他們參與的項目。由於我們是微軟專賣店,如果我們想在公司內部網上部署我們的應用程序,我們需要使用IIS服務器來處理這些權限。團隊中沒有人具備IIS和Active Directory所需的必備知識,而且我們的IT部門已經過度擴展。簡而言之,我們不是網絡開發人員,我們不能立即訪問任何有經驗的人。

我的hacky解決方案是完全放棄IIS,讓每個最終用戶在本地運行一個輕量級服務器(即CherryPy),同時保留對通用項目特定數據庫的訪問權限(例如生活在網絡驅動器上的SQLite DB或DB在MS SQL服務器上)。爲了使用該工具,他們將啓動一個全功能於一身的批處理腳本並將其瀏覽器指向127.0.0.1:8000。我認識到這是多麼醜陋,但我覺得它利用了已經存在的安全措施(請注意,永遠不要期望給定項目同時有超過10個用戶)。這是一個可怕的想法,如果是這樣,什麼是更好的解決方案?

回答

4

我已經處理過類似的情況(主要開發面向正常的部署情況,但有些用戶需要在獨立工作站上使用應用程序)。我不是在獨立工作站上部署Web和數據庫服務器,而是使用Django內部開發服務器和SQLite數據庫運行應用程序。我沒有使用CherryPy,但希望這對你有些用處。

我目前的解決方案帶給用戶不熟悉命令行(誰也記不住網址就擺在他們的瀏覽器),一個很好的可執行文件,但也比較容易發展:

  1. 使用PyInstaller包裝將Django應用程序集成到單個可執行文件中。一旦你弄明白了,不要繼續手動完成,將它添加到你的持續集成系統(或者至少寫一個腳本)。
  2. 修改manage.py到:
    • 檢測,如果應用程序是frozen通過PyInstaller並沒有參數(即:用戶通過雙擊執行它),如果是這樣,那麼運行execute_from_command_line(..)用參數來啓動的Django開發服務器。
    • 就在運行execute_from_command_line(..)之前,請彈出一個線程,該線程執行time.sleep(2)(以使開發服務器完全啓動),然後執行webbrowser.open_new("http://127.0.0.1:8000")
  3. 修改應用程序的settings.py檢測是否凍結和改變周圍的這樣的事情的路徑DB服務器,使開發服務器等

一對夫婦的其他注意事項。

  • 如果你使用SQLite,Windows file locking on network shares may not be adequate如果你有併發寫入數據庫;併發讀者應該沒問題。此外,由於您將針對不同的項目使用不同的DB文件,因此您必須找出讓用戶指出要使用哪個文件的方法。也許在應用程序中提示,或使用不同的settings.py文件多次構建相同的應用程序。各種各樣的方法來打這個釘子...
  • 如果你去與MSSQL(或任何客戶端/服務器數據庫),應用程序將不得不知道數據庫憑據(這意味着他們可以提取知識用戶)。這提出了可能不可接受的安全風險。基本上,不要試圖在用戶正在執行的應用程序中擁有唯一的安全層。用戶正在執行的應用程序使用的數據庫憑據應該只有該用戶被允許的訪問權限。