Я делаю это с символическими ссылками и совершенно отдельными каталогами релизов. То есть развертывание включает в себя клонирование всего проекта в новый каталог, создание в нем virtualenv, а затем переключение символической ссылки «production» для указания на этот каталог.
Мой макет в основном
/var/www/myapp/
uploads/
tmp/
releases/
001/myapp/
002/myapp/
003/myapp/
ve/
...etc in each release directory...
myapp # symlink to releases/003/myapp/
Итак, при развертывании в производство мои сценарии развертывания rsync полностью обновляют копию до /var/www/myapp/releases/004/myapp/
, встраивают в нее virtualenv, устанавливают в нее все пакеты, затем
rm -f /var/www/myapp/myapp
ln -s /var/www/myapp/releases/004/myapp/ /var/www/myapp/myapp
Мой настоящий сценарий развертывания немного сложнее, так как я также стараюсь держать предыдущий выпуск и помечать его, чтобы, если я заметил, что что-то действительно сломалось, откат - это просто переключение символической ссылки, чтобы она указывала на Предыдущая. (некоторая дополнительная работа также необходима для очистки старых, неиспользуемых выпусков, если вас беспокоит дисковое пространство).
Каждая внешняя ссылка (в файлах конфигурации apache, файлах wsgi и т. Д.) Указывает на библиотеки и двоичные файлы в virtualenv как /var/www/myapp/myapp/ve/
. Я также избегаю использования source ve/bin/activate
и вместо этого указываю полный путь в файлах конфигурации, и я редактирую manage.py
, чтобы использовать #!ve/bin/python
, чтобы я мог запускать команды с ./manage.py whatever
, и это всегда будет работать без необходимости помнить, если Я активировал правильное virtualenv.