Django项目在Linux上的推荐位置

时间:2012-12-11 14:34:44

标签: python django django-settings

我将我的第一个Django项目上传到Linux服务器,我应该将我的项目放在文件系统中吗?

使用PHP或ASP项目,一切都进入/var/www,是否可以这样做并将我的Django项目添加到/var/www文件夹中?

2 个答案:

答案 0 :(得分:27)

Django tutorial中声明:

  

此代码应该在哪里生效?   如果您的背景是PHP,那么您可能习惯将代码放在Web服务器的文档根目录下(在/ var / www这样的地方)。使用Django,你不会这样做。将任何此Python代码放在​​Web服务器的文档根目录中并不是一个好主意,因为它可能会使人们可能通过Web查看您的代码。这对安全性不利。

     

将您的代码放在文档根目录之外的某个目录中,例如 / home / mycode

答案 1 :(得分:0)

文件层次系统

@Andy Hayden确实声明了不要在其中放置代码的地方。 File Hierarchy System (FHS)包含以下结构; PATH映射到PACKAGEPROVIDER(建议提供多个软件包的参与方应使用PROVIDER/PACKAGE):

/etc/opt/PATH  # FHS location for /opt configuration files
/opt/PATH      # FHS location for PROVIDER or PACKAGE name
/var/opt/PATH  # FHS location for /opt variable storage 

FHS希望/opt/PATH包含成功执行一个包所必需的所有材料,因此设置以下符号链接似乎是明智的选择

  • /etc/opt/PATH/opt/PATH/etc
  • /var/opt/PATH/opt/PATH/var

这提供了很好的基础,但是Django项目对上述结构没有完全满足有额外的要求。

静态文件

当静态文件运行python manage.py collectstaticSTATIC_ROOT时,将部署静态文件,该静态文件应指向Web服务器根目录以进行静态传递,通常为/var/www/PATH

一个人可以将/var/www/PATH象征性地链接到/opt/PATH/static 但这通常是一个坏主意;考虑以下情况:您的服务器配置错误,并且用户转到www.domain.tld/../并复制了您的工作。

设置

如果您使用django-admin create-project WEBSITE创建了项目,则通常在setup.py文件夹下将有一个WEBSITE文件。

PROJECT/
    WEBSITE/
         setup.py
         ...

如果您将此设置模块转换为软件包,或者在django-admin周围使用了一些包装器,例如django-cms-create

PROJECT/
    WEBSITE/
         settings/
             __init__.py  # from .settings import *
             settings.py
         ...

您可以将/etc/opt/PATH链接到/opt/PATH/WEBSITE/settings而不是如上所述的/opt/PATH/etc。我想不出这样做的实际原因... YMMV。

媒体

通常由网站用户提供的媒体放入MEDIA_ROOT中。在这种情况下,将/var/opt/PATH映射到/opt/PATH/media似乎是明智的做法。

虚拟环境

/opt/PATH/env似乎是最合逻辑的位置。 /var/env/PATH似乎也很明智,但可能更适合作为指向/opt/PATH/env的符号链接。

由于虚拟环境既不是应用程序也不是库,因此位置/opt/bin/opt/libs不会这样做。 /env//pyvenv/不符合FHS。

威士忌

如果您在Apache上使用mod_wsgi,则类似于python manage.py runmodwsgi --server-root /etc/opt/PATH --setup-only的调用可能更可取,因为它将Apache控制命令放置在FHS兼容位置,因为在此调用它们比较麻烦。情况。

首页

据我所知,PHP开发人员在同一服务器上托管多个站点时通常使用/home。如果您使用的是Django,则可能是通过专用计算机为您的网站提供服务,这种结构在这种情况下可能会失去一些支持... YMMV。