我正在将我的第一个 Django 项目上传到 Linux 服务器,我应该将我的项目放在文件系统中吗?
使用 PHP 或 ASP 项目,一切都进入/var/www
,是否可以这样做并将我的 Django 项目添加到/var/www
文件夹中?
我正在将我的第一个 Django 项目上传到 Linux 服务器,我应该将我的项目放在文件系统中吗?
使用 PHP 或 ASP 项目,一切都进入/var/www
,是否可以这样做并将我的 Django 项目添加到/var/www
文件夹中?
在Django 教程中,它指出:
这段代码应该放在哪里?
如果您的背景是 PHP,您可能习惯于将代码放在 Web 服务器的文档根目录下(在 /var/www 之类的地方)。使用 Django,您不会那样做。将任何这些 Python 代码放在 Web 服务器的文档根目录中并不是一个好主意,因为它有可能使人们能够通过 Web 查看您的代码。这对安全不利。将您的代码放在文档根目录之外的某个目录中,例如/home/mycode。
@Andy Hayden 确实说明了不放置代码的位置。文件层次系统 (FHS)涉及以下结构;PATH
映射到PACKAGE
或PROVIDER
(建议提供多个包的各方应使用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 collectstatic
到STATIC_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。