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

时间:2016-05-25 11:01:59

标签: python linux django apache wsgi

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

到目前为止我做了什么:

  • 在本地安装了squlite,因为它在服务器上不可用
  • 在〜/ .localpython
  • 中安装了Python 3.5.1
  • 为我的本地python安装了virtualenv
  • 在〜/ ve_tc_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 还有一些我尝试过的事情:

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

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

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

2 个答案:

答案 0 :(得分:1)

您必须使用支持Django的虚拟主机。见https://code.djangoproject.com/wiki/DjangoFriendlyWebHosts。就我个人而言,我已经使用了WebFaction并对此非常满意,他们的支持非常好,客户服务非常敏感。

答案 1 :(得分:1)

由于您的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的通常内容,只是你没有直接使用该名称。
  5. 使用此解决方案,您可以拥有几个不同的wsgi文件,并且不会在shebangs上发生冲突。