【问题标题】:File permissions for Django: Gunicorn, Nginx, and Static FilesDjango 的文件权限:Gunicorn、Nginx 和静态文件
【发布时间】:2014-07-25 01:54:55
【问题描述】:

我有一台标准的 ubuntu 14.04 机器。我每天都在用户mh00h 下使用它。我有兴趣将这台机器用作生产服务器。如何管理 Django 和 Nginx 的文件权限?

Nginx 当前配置为在www-data:www-data 下运行。这最大限度地降低了机器其余部分受到损害的风险。 Django/gunicorn 同样应该在mh00h 以外的用户下运行。但是 gunicorn 应该在哪个用户下运行呢? nobody,对吗?

下一步:我将所有 Web 开发文件存储在 /home/mh00h/development 下。归mh00h 所有。 /home/mh00h/development/project1 (plus all dir/files but /media and /static)?归mh00h 所有。我遵循 django 两勺最佳实践来创建一个项目目录,其中包含静态文件。当然,Nginx 现在无法访问/home/mh00h/development/project1/project1/static,因为所有这些父目录都属于mh00h,而不是www-data./static 属于www-data)。

更复杂的是,virtualenvwrapper 在/home/mh00h/.virtualenvs/ 下创建了我的虚拟环境。

我不愿放弃两个独家新闻的最佳实践并将/static 分别存储在/var/www 中,因为我希望所有这些目录都很好地打包在一起,以便以后轻松传输到其他服务器。另外,如果我将自己与两个勺子的做法进行比较,我会感到很混乱。

  1. 我的静态文件应该存储在哪里?
  2. django 特定文件应该存储在哪里?
  3. 哪些用户/组应该能够访问 1 和 2 中的哪一个?
  4. virtualenvwrapper 环境应该存储在哪里?
  5. 这些位置应该有什么权限?

谢谢。

【问题讨论】:

    标签: linux django nginx


    【解决方案1】:

    除非另有要求,否则我们生产环境中的所有文件和目录均归 root:root 所有,具有 755/644 文件权限。一些私有文件(想想私钥等)只能由需要它们的用户/进程读取,而仍然只能由root 写入。

    关于项目结构:我们所有的项目在/srv/www/vhosts.d/下都有一个专门的目录。虚拟环境存储在/srv/www/virtualenvs 下。完全可以将它们存储在您的主文件夹中,但我觉得这种中心方法更符合生产服务器的想法。通过正确的设置,所有用户也可以访问所有虚拟环境。

    我们的主项目目录包含几个脚本(manage.py 和几个部署/更新脚本),并进一步拆分为子目录:即web 包含公共文件,src 包含源代码,frontend 包含模板文件夹和 sass 文件夹。整个项目目录包含在一个 git 存储库中,但特定于部署的文件(用户上传的文件、搜索索引、加密密钥)都在 .git-ignore 中。

    我们的 nginx 进程以www-data 运行。一般来说,每个 Django 项目都有自己的用户,gunicorn 进程以该用户身份运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-20
      • 2015-11-30
      • 2013-08-12
      • 2021-05-12
      • 2023-03-05
      • 2017-10-27
      • 2013-06-27
      • 2017-05-31
      相关资源
      最近更新 更多