Django Python 应用是否应存放在 web 服务器的文档根目录?
正如标题所说,我正在想办法找出在服务器上存放Python网站应用文件的最佳位置。是放在文档根目录,还是别的地方呢?
我之前是用PHP的。:)
补充一下,如果有关于Python和PHP在最佳实践方面差异的资料链接,那就太感谢了。
4 个回答
我个人使用的是这个https://bitbucket.org/acoobe/django-starter/的布局,配合buildout工具。这样开发的应用程序会放在apps文件夹里,而只用到的应用则放在parts和eggs文件夹中(parts是用来存放从git、mercurial或svn获取的包,eggs则是存放来自pypi的应用)。
所以答案是否定的。所有东西都应该放在不同的整齐的文件夹里。你的服务器只需要知道wsgi脚本在哪里,以及var目录在哪里。就像这里其他人所说的那样。
我觉得大家都说得差不多了,所以我就稍微补充一下。这里解释一下Apache是怎么把网址(URL)映射到硬盘上的文件的:http://httpd.apache.org/docs/2.2/urlmapping.html。你可以看到,基本规则是只有DocumentRoot文件夹里的文件才能被外界访问。你可以通过明确导入其他文件或文件夹来改变这一点,比如使用Alias指令。
现在,显然你不想让你的Python脚本被所有人看到,这意味着你应该把它们放在DocumentRoot之外,或者放在任何通过“导入”方式添加到DocumentRoot的文件夹里(比如使用前面提到的Alias指令)。你真正想做的是把特定的URL连接到你的Python程序上——如果你使用mod_wsgi,这可以通过WSGIScriptAlias指令来实现。换句话说,你应该把你的脚本的结果映射到特定的URL上,而不是直接映射文件本身。
那么,你应该把Python文件放在哪里呢?我觉得这主要是个人喜好。有些人建议不要把它们放在用户文件夹里(比如/home/xyz/),因为Apache的配置问题可能会让用户文件夹暴露给外界。那还有什么选择呢?比如说可以放在/usr/local/或/var/www里——其实选择脚本的存放位置并没有什么特别的讲究。
不,WSGI容器并不要求脚本必须放在网站的根目录下。为了提高安全性,尤其是在服务器出现临时错误的情况下,这些脚本不应该放在根目录里。