27

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

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

4

2 回答 2

35

Django 教程中,它指出:

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

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

于 2012-12-11T14:44:43.760 回答
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 

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。

威士忌酒

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

据我了解/home,当 PHP 开发人员在同一台服务器上托管多个站点时,他们通常会使用它们。如果您使用的是 Django,您可能正在从专用机器上为您的网站提供服务,并且这种结构在这种情况下失去了一些优势...... YMMV。

于 2019-11-23T22:57:00.000 回答