在没有 root 访问权限的共享虚拟主机服务器上使用 wsgi 和 virtualenv 部署 Django 项目

Deploy Django project using wsgi and virtualenv on shared webhosting server without root access

我有一个 Django 项目,我想 运行 在我的共享网站空间 (1und1 Webspace) 运行 上 linux。我没有 root 访问权限,因此无法编辑 apache 的 httpd.conf 或在整个系统范围内安装软件。

到目前为止我做了什么:

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

我阅读了很多关于如何配置 fastCGI 环境的帖子,但由于我使用的是 Django 1.9.1,所以我依赖于 wsgi。我看到了很多有关为 wsgi 和 virtualenv 配置 django 的内容,但是所有示例都需要访问 httpd.conf.

共享的网络服务器是apache。 我可以使用示例 hello.py 在我的家中创建一个新目录,当我输入 url 时它正在工作,但它(当然)使用服务器提供的 python 和不是我的本地安装。 当我将指示要使用哪个 python 版本的第一行更改为我的虚拟环境 (#!/path/to/home/ve_tc_lb/bin/python) 时,它似乎在虚拟环境中使用了正确的版本。由于我使用不同的系统进行开发和部署,我不确定是否是个好主意,例如在我的 djangoproject/wsgi.py.

添加这样一行

更新2016-06-02 我尝试了一些其他的东西:

总而言之,我的提供商 1und1 似乎没有安装 wsgi 扩展(尽管支持人员一周前告诉我它会安装)

2016-06-12 更新:我收到了支持人员的回复(大约一周后:-S)确认他们没有 mod_wsgi 但 wsgiref...

所以我有点卡在这里 - 接下来我应该执行哪些步骤? 我会根据评论和评论定期更新问题。感谢任何帮助。

您必须使用支持 Django 的虚拟主机。看到 https://code.djangoproject.com/wiki/DjangoFriendlyWebHosts. Personally, I've used WebFaction 并对此感到非常满意,他们的支持非常好,客户服务非常敏感。

由于您的 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 上发生冲突。