Django项目在Linux上的推荐位置

2024-05-15 14:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

对于一个PHP或ASP项目,所有的东西都会进入到/var/www中,这样做是否可以,并将我的Django项目添加到/var/www文件夹中?


Tags: 项目django服务器文件夹varlinuxwwwasp
2条回答

Django tutorial中声明:

Where should this code live?
If your background is in PHP, you're probably used to putting code under the Web server's document root (in a place such as /var/www). With Django, you don't do that. It's not a good idea to put any of this Python code within your Web server's document root, because it risks the possibility that people may be able to view your code over the Web. That's not good for security.

Put your code in some directory outside of the document root, such as /home/mycode.

文件层次结构系统

@Andy Hayden真的说了不该把代码放在哪里。File Hierarchy System (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时部署的,该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。

威士忌

如果您在Apache中使用mod_wsgi,那么类似于^{}的调用可能更可取,因为它将Apache控制命令放在FHS兼容的位置,因为在这种情况下调用它们更麻烦。

据我所知,PHP开发人员在同一服务器上托管多个站点时通常使用/home。如果您使用的是Django,那么您可能是从一台专用机器上为您的站点服务的,在这种情况下,这种结构有点失宠。。。YMMV公司。

相关问题 更多 >