[英]Recommended place for a Django project to live on Linux
我正在将第一个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
,则通常在WEBSITE
文件夹下会有一个setup.py
文件。
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.