Задачи, которые я ставлю для определения структуры директорий, и алгоритма развертывания новой версии приложения на примере приложения на базе django:
- быстрый откат на предыдущую версию;
- все, что относиться к проекту должно быть в одном месте (конфиги, временные файла, логи);
- поддержка общих папок для любой версии приложения (media, static);
- каждая версия должна иметь свое виртуальное окружение, например, использовали django 1.3, в новой версии уже 1.7, часть функция могла быть удалена, так же новый код использует возможности новой версии, соответственное нельзя ни обновить окружение с текущим кодом, ни обновить код в старое окружение.
example.com (~)
├── /conf
│ ├── nginx.conf
│ ├── uwsgi.conf
├── /logs
│ ├── exmaple.com_access.log
│ ├── example.com_error.log
│ ├── uwsgi.log
├── /tmp
│ ├── reload-uwsgi (touch file)
│ ├── uwsgi.pid
├── /htdocs (www)
│ ├── /media --> ~/shared/media
│ ├── /static --> ~/shared/static
├── /releases
│ ├── /20140312195611
│ │ ├── /venv
│ │ │ ├── /bin
│ │ │ │ ├── python
│ │ │ │ ├── pip
│ │ ├── /<repository_root> - VCS (git,...)
│ │ │ ├── /docs
│ │ │ ├── /<project_name> - Django project
│ │ │ │ ├── /<project_name>
│ │ │ │ │ ├── settings.py
│ │ │ │ │ ├── urls.py
│ │ │ │ ├── manage.py
├── /current --> ~/releases/20140312195611
├── /shared
│ ├── /media
│ ├── /static
Насколько данная структура здравая? Есть ли то, что я не учел, какие-то "подводные камни"?
Какая структура на продуктивном сервере у вас?
P.S. данная структура очень похожа на результат работы capistrano.24.04.2016 13:12 Добавил папку для логов.