5👍
All files and directories in our production environment are owned by root:root
with 755/644 file permissions, unless otherwise required. Some private files (think private keys etc.) are only readable by the user/process that needs them, while still being writable only by root
.
As for the project structure: all our projects have a dedicated directory under /srv/www/vhosts.d/
. Virtual environments are stored under /srv/www/virtualenvs
. It is perfectly possible to store them in your home folder, but I feel this central approach is more in line with the idea of a production server. With the right settings, all virtual envs are also accessible by all users.
Our main project directory contains several scripts (manage.py and several deployment/update scripts) and is further split out into subdirectores: i.e. web
contains public files, src
contains the source code, and frontend
contains the template folder and sass folder. The whole project directory is contained in a git repository, but deployment-specific files (user uploaded files, search indexes, encryption keys) are all in .git-ignore
.
Our nginx process runs as www-data
. In general each Django project has its own user, and the gunicorn process runs as this user.