在共享虚拟主机服务器上使用wsgi和virtualenv部署Django项目,无需root权限

我有一个Django项目,我想在我的Linux上运行的共享networking空间(1und1 Webspace)上运行。 我没有root权限,因此不能编辑apache的httpd.conf或者在系统上安装软件。

我到目前为止做了什么:

  • 在本地安装squlite,因为它在服务器上不可用
  • 在〜/ .localpython中安装了Python 3.5.1
  • 为我的本地python安装virtualenv
  • 在〜/ ve_tc_lb中创build了一个虚拟环境
  • 在我的虚拟环境中安装了Django和Pillow
  • 从git服务器克隆我的django项目

完成这些步骤后,我可以在我的项目目录中运行python manage.py runserver ,它似乎正在运行(我可以在本地机器上使用lynx访问login屏幕)。

我读了很多关于如何configurationfastCGI环境的文章,但是因为我使用的是Django 1.9.1,所以我依赖于wsgi。 我看了很多关于为wsgi和virtualenvconfigurationdjango,但所有示例都需要访问httpd.conf。

共享的Web服务器是Apache。 我可以在我的家中创build一个新的目录,其样本为hello.py,它在inputurl时正在工作,但当然是使用服务器提供的python而不是我本地的安装。 当我改变第一行,指出要在我的虚拟环境( #!/path/to/home/ve_tc_lb/bin/python )中使用哪个python版本时,它似乎在虚拟环境中使用了正确的版本。 由于我正在使用不同的系统进行开发和部署,因此我不确定在djangoproject/wsgi.py添加这样一行是否是个好主意。

更新2016-06-02我试了几件事:

  • 我了解到,我没有访问的Apache错误日志
  • 阅读了很多关于mod_wsgi和django的资源,我只是想在这里分享一下,以防有人在将来需要它们:
    • modwsgi – IntegrationWithDjango.wiki
    • debuggingmod_wsgi安装 (只适用于root用户)
    • mod_wsgiconfiguration指南
  • 我跟着这里的wsgitesting脚本安装 – 但是wsgi文件只是显示在我的浏览器中,而不是被执行。

总而言之,我的供应商1und1似乎没有安装wsgi扩展(即使支持人员告诉我一个星期前它会被安装)

更新2016-06-12:我得到了支持的答复(一个星期左右后:-S)确认他们没有mod_wsgi,但是wsgiref …

所以我有点卡在这里 – 下一步我该怎么做? 我会根据评论和评论定期更新这个问题。 任何帮助表示赞赏。

由于你的Apache是​​共享的,我不指望你可以改变httpd.conf,而是使用你的解决方案。 我的建议是:

  1. 如果您有多个服务器,您将部署您的项目(例如,测试,分期,生产),然后针对每个部署目标执行以下步骤。
  2. 在每个服务器中,创建一个真正的wsgi.py文件,这是永远不会放入版本控制系统的 。 非常像你会用local_settings.py文件做的。 这个文件将被命名为wsgy.py因为很可能你不能编辑apache设置(因为它是共享的),并且这个名字将被期望用于你的wsgi文件。
  3. 该文件的内容将是:

      #!/path/to/your/virtualenv/python from my_true_wsgi import * 

    对于每个部署服务器来说,这将是不同的,但是最有可能的是在shebang行中找到适当的python解释器。

  4. 您将有一个名为my_true_wsgi的文件,使其与前代码中的导入相匹配。 该文件将在版本控制系统中,不像wsgi.py文件。 这个文件的内容是任何常规django项目中wsgi.py的常用内容,只是您不直接使用该名称。

有了这个解决方案,你可以有几个不同的wsgi文件在shebangs上没有冲突。

你将不得不使用支持Django的虚拟主机。 请参阅https://code.djangoproject.com/wiki/DjangoFriendlyWebHosts 。 就我个人而言,我已经使用了WebFaction,并对此非常满意,他们的支持非常好,客户服务响应速度非常快。