Как вы используете pip, virtualenv и Fabric для обработки развертывания?
каковы ваши настройки, ваши трюки и, прежде всего, ваш рабочий процесс?
эти инструменты великолепны, но до сих пор нет лучших практик, связанных с их использованием, поэтому я не знаю, какой наиболее эффективный способ их использования.
- вы используете Пип связки или всегда скачать?
- вы настраиваете Apache / Cherokee / MySQL вручную или делаете у вас есть сценарий для этого?
- вы кладете все в virtualenv и использовать
--no-site-packages
? - вы используете один virtualenv для нескольких проектов?
- что вы используете ткани для (какой части ваше развертывание вы делаете сценарий)?
- вы размещаете свои сценарии структуры на клиенте или сервере?
- как вы обрабатываете миграцию базы данных и медиафайлов?
- вам когда-нибудь нужен инструмент сборки, такой как SCons?
- каковы шаги вашего развертывания? Как часто вы выполняете каждый из них их?
- etc.
2 ответа:
"лучшие практики" очень зависят от контекста, поэтому я не буду утверждать, что мои практики являются лучшими, просто они работают для меня. Я работаю в основном на небольших сайтах, поэтому нет многосерверных развертываний, CDNs и т. д. Мне нужно поддерживать развертывание общего хостинга Webfaction, так как некоторым клиентам нужен самый дешевый хостинг, который они могут найти. Мне часто приходится развертывать сайты несколько раз в разных средах, поэтому повторяемые сценарии развертывания имеют решающее значение.
- Я не использую пакеты pip, я устанавливаю из-за требований.формат txt. Я управляю своим собственным chishop сервер с sdists всего, что мне нужно, поэтому в процессе сборки нет нескольких отдельных точек отказа. Я также использую PIP_DOWNLOAD_CACHE на моих машинах разработки для ускорения загрузки сред проекта, так как большинство требований моих проектов перекрываются совсем немного.
- у меня есть ткани скрипты, которые могут автоматически настраивать и настраивать nginx + Apache / mod_wsgi на Ubuntu VPS, или настройка эквивалента на Webfaction общий хостинг, а затем развернуть проект.
- Я не использую --no-site-packages с virtualenv, потому что я предпочитаю иметь медленные скомпилированные пакеты (Python Imaging Library, psycopg2), установленные на системном уровне; слишком медленно и хлопотно делать внутри каждого virtualenv. У меня не было проблем с загрязненными системными сайтами-пакетами, потому что я обычно не загрязняю его. И в любом случае, вы можете установить другую версию что-то в virtualenv и это будет иметь приоритет.
- каждый проект имеет свой собственный virtualenv. У меня есть некоторые скрипты bash (не virtualenvwrapper, хотя многие люди используют это и любят его), которые автоматизируют развертывание virtualenv для данного проекта в известном месте и установку в него требований этого проекта.
- весь процесс развертывания, от голого сервера Ubuntu VPS или учетной записи общего хостинга Webfaction до запущенного веб-сайта, является сценарий с использованием ткани.
- сценарии структуры являются частью дерева исходного кода проекта, и я запускаю их из локальной проверки разработки.
- у меня нет необходимости в Бра (что я знаю).
развертывание
на данный момент новое развертывание разделено на следующие шаги:
fab staging bootstrap
(установка сервера и развертывание исходного кода)fab staging enable
(включите конфигурацию Apache / nginx для этого сайт)fab staging reload_server
(перезагрузить Apache / Nginx config).они, конечно, могут быть объединены в одну командную строку
fab staging bootstrap enable reload_server
.как только эти шаги будут выполнены, обновление развертывания с новым кодом будет просто
fab staging deploy
.если мне нужно откатить обновление,
fab staging rollback
. Ничего особенно волшебного в откате; он просто откатывает код до последней развернутой версии и переносит базу данных в предыдущее состояние (это требует запись некоторых метаданных о состоянии миграции БД после развертывания, я просто делаю это в текстовом файле).примеры
Я не использовал сценарии ткани, описанные в этом ответе в течение нескольких лет, поэтому они не поддерживаются вообще, и я отказываюсь от ответственности за их качество: -) но вы можете увидеть их в https://bitbucket.org/carljm/django-project-template - in
fabfile.py
в корне РЕПО, и вdeploy/
поддиректории.
Я использую fabric для создания и развертывания моего кода и предполагаю, что система уже настроена для этого. Я думаю, что такой инструмент, как кукол более подходит для автоматизации установки таких вещей, как apache и mysql, хотя я еще не включил его в свой рабочий процесс.
кроме того, у меня обычно есть другой virtualenv для каждого проекта. Они создаются из "базовой" установки python, где, как указал Карл, вы можете оставить некоторые глобальные библиотеки python.
Так с точки зрения рабочего процесса это будет:
- марионетка для установки необходимых служб (веб-сервер, база данных, ssh-сервер,...)
- марионетка для настройки необходимых пользователей и базовых папок
- ткань для создания virtualenv для приложения
- ткань к Пип устанавливает от требований.txt
- ткань для развертывания вашего приложения
- ткани для развертывания файлов конфигурации (веб-сервер ...)