【问题标题】:deploying django to UserDir将 django 部署到 UserDir
【发布时间】:2023-04-09 09:33:02
【问题描述】:

我想在我们的学生服务器上部署我的 django 宠物项目。我们有带有 UserDir mod 的 apache2,我无权访问 apache2 配置文件。我该如何部署? :-D

我来自 PHP 背景,我通过将 PHP 脚本上传到我的 public_html 目录来部署我的 PHP 脚本,所有内容都显示在 http://ourserver.com/~myusername 上。我阅读了 django 文档,它说我应该将 <Location>some stuff</Location> 添加到我们的 apache 配置文件中。我无权访问它,所以我尝试将它放在我的public_html 目录中的 .htaccess 中,但没有成功。我用谷歌搜索了很多,我想我读到了你不能在 .htaccess 中添加 <Location> 的地方,但现在我找不到那个引用。

那么,这里有人将 django 部署到 UserDir 而不骚扰 apache 管理员吗?

编辑: 我按照 Graham Dumpleton 的建议 here 测试了 mod_python,我可以毫无问题地使用 mod_python。另外,我发现了错误日志,这是我将<Location>some stuff</Location> 放入 .htaccess 时的错误日志:

"[Thu Oct 01 21:33:19 2009] [alert] [client 188.129.74.66] /path/to/my/.htaccess: <Location not allowed here"

所以,看来我真的不能将<Location> 放入.htaccess 中。那么,我有哪些选择?

【问题讨论】:

  • mod_python 已启用,mod_wsgi 未启用。我想如果不是太麻烦的话,我可以让我的管理员启用 mod_wsgi。

标签: python django apache


【解决方案1】:

如果安装了mod_python,首先看看你是否可以真正使用它而不需要管理员做任何事情。阅读:

http://www.dscpl.com.au/wiki/ModPython/Articles/GettingModPythonWorking

除非您是受信任的用户或管理员不知道他们在做什么,否则他们不应该允许您使用 mod_python,因为您的代码将以 Apache 用户身份运行,如果其他人也以同样的方式运行应用程序,您可以相互干扰应用程序和数据。换句话说,它不安全,不应该在多个用户在同一个 Apache 实例上的共享托管环境中使用。


更新 1

在您现在已经使用 mod_python 的基础上,您应该能够将 mptest.py 的内容替换为以下内容:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import sys
sys.path.insert(0, '/some/path/to/project/area/mysite')
sys.path.insert(0, '/some/path/to/project/area')

from django.core.handlers.modpython import handler as _handler

def handler(req):
  req.get_options()['django.root'] = '/~myusername/mptest.py'
  return _handler(req)

显然,应根据您的命名更改其中的各种路径和值。

该站点将作为“/~myusername/mptest.py”访问。

此时您会发现愚蠢地使用 mod_python 是您无法控制 Apache。这是因为当您更改站点中的代码时,您需要要求管理员为您重新启动 Apache 以使您的更改生效。

在其守护进程模式下使用 mod_wsgi 并作为守护进程的所有者会好得多,但如果他们已经在运行 mod_python,我不建议他们同时加载两个模块,因为 mod_python 问题会破坏 mod_wsgi 的使用在某些情况下,如果他们没有正确安装 Python,您可能会遇到很多问题,因此不值得麻烦。

简而言之,在无法控制 Apache 的共享主机环境中使用 mod_python 既愚蠢又不安全。

同样,已经记录了如何从每个用户目录中运行 Django,因为我认为以前没有任何地方记录过。

【讨论】:

  • 抱歉耽搁了,我忙得不可开交,明天下午(格林威治标准时间)我会测试我的 mod_python。这篇文章看起来很棒,我发现我们的服务器上有 mod_python 3.3.1 但我没有进一步了解,因为我现在必须走了。我明天就回来,我很想解决这件事……
  • 该死的。我无法从那篇文章中运行 mptext.py,我得到 403 禁止。我向我的管理员发送了一封电子邮件,并要求他允许我使用 mod_python。我会在他回复时回复你,我得到一个工作的 mod_python 环境。
  • 最后。我无法通过您提供的链接完成测试,因为我的 .htaccess 是 700。我修复了这个问题,现在我可以看到“mptest.py”。因此,我可以毫无问题地使用 mod_python。顺便说一句,我的管理员告诉我错误日志在哪里,所以我在原始问题中添加了其他信息。我可能应该先检查一下。
【解决方案2】:

在基础 Apache 上是否启用了 mod_python 或 mod_wsgi?您至少需要它。

【讨论】:

  • 他说他无权访问 Apache 配置文件,因此 mod_wsgi 或 mod_python 都没有任何用处。即使管理员安装了 mod_python,它也没有用,因为它不提供用户分离。您可以为 mod_wsgi 的守护程序模式获得用户分离,但这意味着管理员在每个用户的基础上手动配置,他们不太可能想要这样做。其他选项是查看 Apache 实例是否安装了 FASTCGI 模块之一。
  • mod_python 已启用,mod_wsgi 未启用。
  • mod_fastcgi 也未启用。
【解决方案3】:

是否允许您在 80 以外的某个端口上运行您自己的长时间运行的服务器进程?这可能允许您使用 Django 测试服务器或您自己的带有本地配置文件的 Apache 副本来提供 Django 内容。

【讨论】:

  • 这也许是可能的。 Django 测试服务器对于生产来说是不可能的,但是如果没有其他的,我自己的具有替代端口号的 Apache 副本可能是一个解决方案。现在,这是我可以联系我的管理员的东西。谢谢。
【解决方案4】:

您是否尝试过使用<Directory> 而不是<Location>?如果本地政策没有阻止,您应该可以执行以下操作:

<Directory /path/to/your/home/public_html>
# mod_python stuff here
</Directory>

如果您与管理员关系良好,我会选择 mod_wsgi 或 fastcgi。但是,如果是这种情况,您应该能够简单地为您的管理员提供 mod_wsgi 配置,因为它支持基于更新的重新加载并作为备用用户运行。他应该能够将其设置为简单地在您的帐户下运行单个 wsgi 文件 - 类似这样,可能带有 allow from all,具体取决于安全性的配置方式:

<Directory /home/you/public_html>
WSGIApplicationGroup PROJECT
WSGIDaemonProcess YOU threads=15 processes=2 python-path=/home/YOU/.virtualenvs/PROJECT-env/lib/python2.6/site-packages
WSGIProcessGroup YOUR_GROUP
WSGIScriptAlias / /home/YOU/PROJECT/deploy/PROJECT.wsgi
</Directory>

顺便说一句,上面假设使用了很棒的、强烈推荐的 virtualenv 和 virtualenvwrapper 在你的主目录中创建一个本地 python 沙箱。这将极大地简化作为非管理员或当您有多个项目时的生活。如果你不使用 virtualenv,上面的python-path 可以完全删除。

【讨论】:

  • Location 或 Directory 指令都不能在 .htaccess 文件中使用。
【解决方案5】:

如果配置了 mod_fcgi,您可以使用它。见http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2016-01-11
    • 2020-10-24
    • 2020-03-24
    • 2014-10-07
    • 1970-01-01
    相关资源
    最近更新 更多