将Django部署为独立的内部应用程序?

将Django部署为独立的内部应用程序?,django,iis,wsgi,django-haystack,cherrypy,Django,Iis,Wsgi,Django Haystack,Cherrypy,我正在使用Django开发一个工具,供公司内部使用。它用于搜索和标记文档(使用Haystack和Solr),并将用于不同的项目。我的团队目前有一个工作原型,我们希望“在野外”部署它 我们的安全环境是严格的。项目文档位于网络驱动器上的子文件夹中,对这些文件夹的访问受限于用户的Windows凭据(我们还有一个使用相同凭据的MS SQL server)。用户只能访问他们参与的项目。由于我们是专门的Microsoft商店,如果我们想在公司内部网上部署我们的应用程序,我们需要使用IIS服务器来处理这些权限

我正在使用Django开发一个工具,供公司内部使用。它用于搜索和标记文档(使用Haystack和Solr),并将用于不同的项目。我的团队目前有一个工作原型,我们希望“在野外”部署它

我们的安全环境是严格的。项目文档位于网络驱动器上的子文件夹中,对这些文件夹的访问受限于用户的Windows凭据(我们还有一个使用相同凭据的MS SQL server)。用户只能访问他们参与的项目。由于我们是专门的Microsoft商店,如果我们想在公司内部网上部署我们的应用程序,我们需要使用IIS服务器来处理这些权限。团队中没有人具备使用IIS、Active Directory所需的知识,我们的IT部门已经过度扩展。简言之,我们不是web开发人员,我们无法立即联系任何有经验的人


我的黑客解决方案是完全放弃IIS,让每个最终用户在本地运行一台轻量级服务器(即CherryPy),同时每个用户都保留对公共项目特定数据库的访问权限(例如,网络驱动器上的SQLite DB或MS SQL server上的DB)。为了使用该工具,他们只需启动一个多功能批处理脚本,并将浏览器指向
127.0.0.1:8000
。我知道这有多难看,但我觉得它利用了已有的安全措施(请注意,在给定的项目中,不要期望同时有超过10个用户)。这是一个糟糕的想法吗?如果是的话,还有什么更好的解决方案呢?

我曾经处理过类似的情况(主要开发面向正常的部署情况,但有些用户需要在独立的工作站上使用应用程序)。我没有在独立的工作站上部署web和db服务器,而是使用Django内部开发服务器和SQLite db运行应用程序。我没有使用CherryPy,但希望这对您有所帮助

我当前的解决方案为不熟悉命令行的用户提供了一个很好的可执行文件(他们也很难记住要放在浏览器中的URL),但开发起来也相对简单:

  • 用于将Django应用程序打包为单个可执行文件。一旦你明白了这一点,不要继续手工操作,把它添加到你的持续集成系统中(或者至少写一个脚本)
  • manage.py
    修改为:
    • 检测PyInstaller是否冻结了应用程序,并且没有参数(即:用户通过双击它来执行),如果是,则使用参数从命令行(..)运行
      execute\u以启动Django开发服务器
    • 在运行
      execute\u from\u命令行(..)
      之前,弹出一个执行
      时间的线程。sleep(2)
      (让开发服务器完全启动),然后
      webbrowser。打开新的(“http://127.0.0.1:8000)
  • 修改应用程序的
    settings.py
    ,以检测是否冻结并更改周围的内容,例如DB服务器的路径、启用开发服务器等
  • 几张附加说明

    • 如果您使用SQLite,如果您有对DB的并发写入;并发读者应该可以。此外,由于不同的项目有不同的DB文件,因此您必须找出一种方法让用户指示要使用哪个文件。可能在应用程序中提示,或者使用不同的
      设置.py
      文件多次构建同一个应用程序。有很多种方法可以达到这个目的
    • 如果您使用MSSQL(或任何客户机/服务器DB),应用程序将必须知道DB凭据(这意味着它们可以由知情用户提取)。这可能会带来不可接受的安全风险。基本上,不要试图在用户正在执行的应用程序中拥有唯一的安全层。用户正在执行的应用所使用的DB凭据应仅具有该用户允许的访问权限

    我也处理过类似的情况(主要开发面向正常部署情况,但有些用户需要在独立工作站上使用该应用程序)。我没有在独立的工作站上部署web和db服务器,而是使用Django内部开发服务器和SQLite db运行应用程序。我没有使用CherryPy,但希望这对您有所帮助

    我当前的解决方案为不熟悉命令行的用户提供了一个很好的可执行文件(他们也很难记住要放在浏览器中的URL),但开发起来也相对简单:

  • 用于将Django应用程序打包为单个可执行文件。一旦你明白了这一点,不要继续手工操作,把它添加到你的持续集成系统中(或者至少写一个脚本)
  • manage.py
    修改为:
    • 检测PyInstaller是否冻结了应用程序,并且没有参数(即:用户通过双击它来执行),如果是,则使用参数从命令行(..)运行
      execute\u以启动Django开发服务器
    • 在运行
      execute\u from\u命令行(..)
      之前,弹出一个执行
      时间的线程。sleep(2)
      (让开发服务器完全启动),然后
      webbrowser。打开新的(“http://127.0.0.1:8000)
  • 修改应用程序的
    settings.py
    ,以检测是否冻结并更改周围的内容,例如DB服务器的路径、启用开发服务器等
  • 几张附加说明

    • 如果您使用SQLite,如果您有对DB的并发写入;并发读者应该可以。此外,由于不同的项目有不同的DB文件,因此您必须找出一种方法让用户指示要使用哪个文件。可能在应用程序中提示,或者使用不同的