Python 在共享webhosting服务器上使用wsgi和virtualenv部署Django项目,无需根访问权限

Python 在共享webhosting服务器上使用wsgi和virtualenv部署Django项目,无需根访问权限,python,linux,django,apache,wsgi,Python,Linux,Django,Apache,Wsgi,我有一个Django项目,我想在linux上运行的共享Web空间(1和1 Web空间)上运行。我没有root访问权限,因此无法编辑apache的httpd.conf或在系统范围内安装软件 到目前为止我所做的: 已在本地安装squlite,因为它在服务器上不可用 在~/.localpython中安装了Python 3.5.1 为我的本地python安装了virtualenv 在~/ve\u tc\u lb中创建虚拟环境 在我的虚拟环境中安装了Django和Pillow 从git服务器克隆了我的d

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

到目前为止我所做的:

  • 已在本地安装squlite,因为它在服务器上不可用
  • 在~/.localpython中安装了Python 3.5.1
  • 为我的本地python安装了virtualenv
  • 在~/ve\u tc\u lb中创建虚拟环境
  • 在我的虚拟环境中安装了Django和Pillow
  • 从git服务器克隆了我的django项目
完成这些步骤后,我可以在我的项目目录中运行
python manage.py runserver
,它似乎正在运行(我可以在本地机器上使用lynx访问登录屏幕)

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

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

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

  • 我了解到我无法访问apache错误日志
  • 在各种来源中阅读了大量关于mod_wsgi和django的信息,我只想在这里分享,以防将来有人需要它们:
    • (仅当您是root用户时适用)
  • 我遵循了-但是wsgi文件只是显示在我的浏览器中,而不是执行
总而言之,我的提供商1und1似乎没有安装wsgi扩展(尽管支持人员一周前告诉我会安装)

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

所以我有点被困在这里-下一步我应该做什么?
我会根据评论和评论定期更新问题。非常感谢您的帮助。

您必须使用支持Django的网络主机。看见就我个人而言,我使用过并且非常满意,他们的支持非常好,客户服务也非常响应。

由于您的apache是共享的,我不希望您可以更改httpd.conf,而是使用您的解决方案。我的建议是:

  • 如果您有多台服务器,您将部署您的项目(例如,测试、登台、生产),然后对每个部署目标执行以下步骤
  • 在每台服务器中,创建一个真正的
    wsgi.py
    文件,您永远不会将其放入版本控制系统中。与使用
    local_settings.py
    文件非常相似。该文件将命名为
    wsgy.py
    ,因为您很可能无法编辑apache设置(因为它是共享的),并且您的wsgi文件需要该名称
  • 该文件的内容将是:

     #!/path/to/your/virtualenv/python
     from my_true_wsgi import *
    
    这对于每个部署服务器都是不同的,但最有可能的区别是在shebang行中找到合适的python解释器

  • 您将拥有一个名为
    my\u true\u wsgi
    的文件,以使其与前面代码中的导入匹配。该文件将位于版本控制系统中,与
    wsgi.py
    文件不同。此类文件的内容是任何常规django项目中
    wsgi.py
    的常规内容,只是您没有直接使用该名称

  • 使用此解决方案,您可以拥有多个不同的wsgi文件,而不会在SHEBANG上发生冲突。

    我个人在任何通用AMP共享主机ISP上的经历都是痛苦的。有一些面向Django的廉价ISP,有像Heroku这样的PaaS提供商和像DigitalOcean这样的廉价VP。遗憾的是,WSGI应用程序与部署PHP不同。事实上并非如此——您需要一个支持WSGI的Web主机——这似乎是我的问题所在。很公平,但许多主机,包括WebFaction(至少在我使用它的时候)都使用WSGI。此外,如果他们有很好的支持,他们可能愿意为您应用需要root的配置。这在genera中肯定是有帮助的,但不幸的是,我在这之前还停留了一步。如果我找不到其他解决方案,您将获得代表分数,因为您的答案可能会帮助其他有类似问题的人。提前一步是什么意思?你被困在哪里了?事实上,我现在没有成功运行任何wsgi应用程序。目前,他们似乎没有安装mod_wsgi,尽管支持人员告诉我他们有:-S