[英]File permissions for Django: Gunicorn, Nginx, and Static Files
我有一台标准的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/
下创建我的虚拟环境。
我不愿意在/var/www
分别从两个scoop的最佳实践和store /static
分离出来,因为我希望所有这些目录保持良好的打包状态,以便以后轻松传输到其他服务器。 另外,如果我将自己与双勺的比较方式进行比较,那会让我感到麻烦。
谢谢。
除非另有要求,否则我们的生产环境中的所有文件和目录都由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进程以该用户身份运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.