生产中的Django项目结构

时间:2016-01-05 07:17:07

标签: python django

我已经准备好部署我完全改版的Django网站了,我正在尝试找出要使用的最佳文件夹结构。当我上次部署时,我做错了,即使它功能正常,所以这次我试图以“正确”的方式做到这一点。不幸的是,有时似乎有太多“正确”的方式让任何一种方式都有意义,所以我试图弄清楚这一点。我正在使用带有Ubuntu 14.04 LTS和nginx的Linode VPS。我一直在浏览演练,论坛帖子和回答stackoverflow问题,令人惊讶的是,没有什么能够回答我的问题。所以这里。

我打算让Django root(使用startproject生成的顶级项目根文件夹)在/srv/www/<site name>/djcode生效。我应该分配什么权限这个文件夹,用户应该拥有它,以及如何设置组?从理论上讲,其他人会在不久的将来帮助我维护这个项目,所以我chown对我的个人用户来说似乎没有意义,即使我在几个帖子中提到了这一点。我会让www-data拥有该文件夹和所有文件,然后将自己和我未来的协作者添加到www-data组中吗? (我对我在Linux中如何工作的理解也非常弱,所以任何指示清楚解释该系统的指针也会受到欢迎。)

备份一下,我的Django代码存在的地方是否有意义?我在一个小时左右的时间内只看到一个答案,其中有一个建议代码可以存活的地方(其余的例子中有最无益的路径/path/to/django/root代替实际路径),所以我'我不完全确定什么是正确的做法。

另外,我注意到人们有时似乎使用/var/www/来表示静态HTML文件,这没有用。 /var的重点是文件大小可能会发生变化吗?然而,这就引出了一个问题,即为什么我们为可变大小的文件提供了一个单独的目录。我假设我想把我的sqlite数据库文件放在某个地方,但它究竟会在哪里存在,将它放在那里有什么好处?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

有些人将静态文件放在/ var / www中的原因只是默认Apache配置将DocumentRoot放在基于Debian的系统上的原因。但我不建议这样做;更好的是在项目本身内添加一个指向STATICFILES目录的别名。

至于权限,您建议使用www-data并将用户添加到该组是明智的。将代码放在/ srv下的建议可能首先是我的,但我认为这是一个好主意;它是一个容易识别的位置,可能没有被其他任何东西使用。

你真的不应该在制作中使用sqlite。安装合适的RDBMS;优选Postgres,但如果必须的话,MySQL。配置都不是很难。

答案 1 :(得分:0)

Django不是PHP或ColdFusion,你应该将项目文件保存在/ var / www中。

阅读Two Scoops of Django: Best Practices for Django 1.8关于项目结构的章节 - 您应该为每个环境设置自定义设置。

同样非常好和合理的想法是在每个环境中都使用相同的SQL引擎 - 它不会破坏数据或使迁移不稳定。 如果您的项目不需要特殊的DB,请选择PostgreSQL。 MySQL是另一种选择,但MySQL不支持事务中的迁移。