【问题标题】:Deploy Django project using wsgi and virtualenv on shared webhosting server without root access在共享虚拟主机服务器上使用 wsgi 和 virtualenv 部署 Django 项目,无需 root 访问
【发布时间】:2016-05-25 11:01:58
【问题描述】:

我有一个 Django 项目,我想在我的共享网络空间(1und1 网络空间)上运行,该项目在 linux 上运行。我没有 root 访问权限,因此无法编辑 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。

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

2016-06-02 更新 我尝试了更多的东西:

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

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

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

【问题讨论】:

  • 我个人对任何通用 AMP 共享主机 ISP 的体验总是很痛苦。有一些针对 Django 的廉价 ISP,有像 Heroku 这样的 PaaS 提供商和像 DigitalOcean 这样的廉价 VPS。遗憾的是,WSGI 应用程序不像部署 PHP。

标签: python linux django apache wsgi


【解决方案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 的常用内容,只是您没有直接使用该名称。

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

【讨论】:

  • 这在一般情况下绝对有帮助,但不幸的是,我在此之前被卡住了一步。如果我没有找到其他解决方案,您将获得代表积分,因为您的回答可能会帮助遇到类似问题的其他人。
  • 先一步是什么意思?你被困在哪里了?
  • 事实上我现在没有成功运行 any wsgi 应用程序。目前他们似乎没有安装 mod_wsgi,尽管支持人员告诉我他们安装了:-S
【解决方案2】:

您必须使用支持 Django 的网络主机。见https://code.djangoproject.com/wiki/DjangoFriendlyWebHosts。就我个人而言,我使用过 WebFaction 并且对此非常满意,他们的支持非常好,客户服务也非常及时。

【讨论】:

  • 不是真的——你需要一个支持 wsgi 的网络主机——这似乎是我的问题。
  • 很公平,但是其中许多主机,包括 WebFaction(至少在我使用它的时候)确实使用 wsgi。此外,如果他们有良好的支持,他们可能愿意为您应用需要 root 的配置。
猜你喜欢
  • 2023-02-22
  • 2016-07-31
  • 2019-01-18
  • 1970-01-01
  • 2013-08-19
  • 2021-11-27
  • 2015-06-13
  • 2019-07-16
相关资源
最近更新 更多