我正在将我的第一个Django项目上传到Linux服务器,我应该把我的项目放在文件系统中的哪里?
对于PHP或ASP项目,所有内容都放在/var/www
中,那么将我的Django项目添加到/var/www
文件夹中是否可行?
我正在将我的第一个Django项目上传到Linux服务器,我应该把我的项目放在文件系统中的哪里?
对于PHP或ASP项目,所有内容都放在/var/www
中,那么将我的Django项目添加到/var/www
文件夹中是否可行?
这些代码应该放在哪里?
如果你的背景是PHP,你可能习惯于将代码放在Web服务器的文档根目录下(例如/var/www)。但是在Django中,你不需要这样做。把Python代码放在Web服务器文档根目录之外的某个目录中,比如/home/mycode,这是个好主意。因为这样可以避免别人通过Web查看你的代码而导致安全隐患。
/var/www/html
。这是否意味着现在可以安全地在/var/www
下创建Django项目? - user3817250/var/www/html
,那么/var/www/djangoproject
除非你明确将其定义为VirtualHost的DocumentRoot,否则不应该对Web可见。我不喜欢在多个目录中分散网站的想法。我更愿意能够将我的php站点与我的django站点放在一起。 - user3817250安迪·海登(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
/opt/PATH
应包含所有必要的内容以成功执行软件包,因此设置以下符号链接似乎是明智的:
/etc/opt/PATH
指向/opt/PATH/etc
/var/opt/PATH
指向/opt/PATH/var
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
。虽然我想不到这样做的实际理由...但因人而异。
媒体,通常由网站用户提供,会放置在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,则可能是从专用机器上提供站点服务,在这种情况下,此结构的用途会有所减少...因人而异。
/sites/foo/
,/sites/bar/
(每个都是virtualenv
)。 - Timmy O'Mahony