Как вы используете pip, virtualenv и Fabric для обработки развертывания?


каковы ваши настройки, ваши трюки и, прежде всего, ваш рабочий процесс?

эти инструменты великолепны, но до сих пор нет лучших практик, связанных с их использованием, поэтому я не знаю, какой наиболее эффективный способ их использования.

  • вы используете Пип связки или всегда скачать?
  • вы настраиваете Apache / Cherokee / MySQL вручную или делаете у вас есть сценарий для этого?
  • вы кладете все в virtualenv и использовать --no-site-packages?
  • вы используете один virtualenv для нескольких проектов?
  • что вы используете ткани для (какой части ваше развертывание вы делаете сценарий)?
  • вы размещаете свои сценарии структуры на клиенте или сервере?
  • как вы обрабатываете миграцию базы данных и медиафайлов?
  • вам когда-нибудь нужен инструмент сборки, такой как SCons?
  • каковы шаги вашего развертывания? Как часто вы выполняете каждый из них их?
  • etc.
2 66

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.

Так с точки зрения рабочего процесса это будет:

  1. марионетка для установки необходимых служб (веб-сервер, база данных, ssh-сервер,...)
  2. марионетка для настройки необходимых пользователей и базовых папок
  3. ткань для создания virtualenv для приложения
  4. ткань к Пип устанавливает от требований.txt
  5. ткань для развертывания вашего приложения
  6. ткани для развертывания файлов конфигурации (веб-сервер ...)