我将我的第一个Django项目上传到Linux服务器,我应该将我的项目放在文件系统中吗?
使用PHP或ASP项目,一切都进入/var/www
,是否可以这样做并将我的Django项目添加到/var/www
文件夹中?
答案 0 :(得分:27)
在Django tutorial中声明:
此代码应该在哪里生效? 如果您的背景是PHP,那么您可能习惯将代码放在Web服务器的文档根目录下(在/ var / www这样的地方)。使用Django,你不会这样做。将任何此Python代码放在Web服务器的文档根目录中并不是一个好主意,因为它可能会使人们可能通过Web查看您的代码。这对安全性不利。
将您的代码放在文档根目录之外的某个目录中,例如 / home / mycode 。
答案 1 :(得分:0)
@Andy Hayden确实声明了不要在其中放置代码的地方。 File Hierarchy System (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。
如果您在Apache上使用mod_wsgi
,则类似于python manage.py runmodwsgi --server-root /etc/opt/PATH --setup-only
的调用可能更可取,因为它将Apache控制命令放置在FHS兼容位置,因为在此调用它们比较麻烦。情况。
据我所知,PHP开发人员在同一服务器上托管多个站点时通常使用/home
。如果您使用的是Django,则可能是通过专用计算机为您的网站提供服务,这种结构在这种情况下可能会失去一些支持... YMMV。