Django项目在Linux上的推荐位置

Pro*_*eus 20 python django django-settings

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

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

And*_*den 28

Django教程中,它指出:

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

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

  • @AndyHayden 如果全局 Apache DocumentRoot 是 `/var/www/html` 那么 `/var/www/djangoproject` 不应该对网络可见,除非你明确地将它定义为 VirtualHost 的 DocumentRoot?我不喜欢将网站分散在多个目录中的想法。我更愿意将我的 php 站点和我的 django 站点放在一起。 (2认同)

Car*_*rel 5

文件层次系统

@Andy Hayden 确实说明了不要放置代码的位置。该文件分层系统(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 
Run Code Online (Sandbox Code Playgroud)

FHS 期望/opt/PATH包含成功执行 ones 包所需的所有材料,因此设置以下符号链接似乎是谨慎的

  • /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
         ...
Run Code Online (Sandbox Code Playgroud)

如果您将此设置模块转换为一个包,或者您使用了一些包装器,django-admin例如django-cms-create等。

PROJECT/
    WEBSITE/
         settings/
             __init__.py  # from .settings import *
             settings.py
         ...
Run Code Online (Sandbox Code Playgroud)

您可能会符号链接/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。

威士忌酒

如果您mod_wsgi与 Apache 一起使用,那么类似于 的调用python manage.py runmodwsgi --server-root /etc/opt/PATH --setup-only可能更可取,因为它将 Apache 控制命令放置到 FHS 兼容位置,当然在这种情况下调用它们会更麻烦。

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