我想在学生服务器上部署我的django宠物项目。我们有UserDir mod的apache2,我无法访问apache2配置文件。我该如何部署? :-D
我来自PHP背景,我通过将我们的PHP脚本上传到我的public_html
目录来部署我的PHP脚本,所有内容都显示在http://ourserver.com/~myusername上。我读了django文档,它说我应该将<Location>some stuff</Location>
添加到我们的apache配置文件中。我无法访问它,所以我尝试将它放在我的public_html
目录中的.htaccess中,但是没有用。我google了很多,我想我读到的地方你不能把<Location>
放进.htaccess,但现在我找不到那个引用。
那么,这里有人在没有骚扰apache管理员的情况下将django部署到UserDir吗?
修改
我测试了mod_python作为Graham Dumpleton建议here,我可以毫无问题地使用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。那么,我的选择是什么?
答案 0 :(得分: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,因为我认为之前的任何地方都没有记录过。
答案 1 :(得分:0)
基础Apache上是否启用了mod_python
或mod_wsgi
?你至少需要这个。
答案 2 :(得分:0)
您是否可以在80以外的某个端口上运行自己的长时间运行的服务器进程?这可能允许您使用Django测试服务器或您自己的Apache副本以及本地配置文件来提供Django内容。
答案 3 :(得分:0)
您是否尝试过使用<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
。
答案 4 :(得分:0)
如果配置了mod_fcgi,您可以使用它。见http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/