Как вы используете pip, virtualenv и Fabric для управления развертыванием? - PullRequest
66 голосов
/ 14 марта 2010

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

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

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

Ответы [ 2 ]

79 голосов
/ 15 марта 2010

«Лучшие практики» очень зависят от контекста, поэтому я не буду утверждать, что мои практики являются лучшими, просто они работают для меня. Я работаю в основном на небольших сайтах, поэтому нет развертываний на нескольких серверах, CDN и т. Д. Мне нужно поддерживать развертывание общего хостинга Webfaction, поскольку некоторым клиентам нужен самый дешевый хостинг, который они могут найти. Мне часто приходится развертывать сайты несколько раз в разных средах, поэтому повторное развертывание по сценарию имеет решающее значение.

  • Я не использую pip связки, я устанавливаю из файла require.txt. Я запускаю свой собственный сервер chishop со списками sdists всего, что мне нужно, поэтому в процессе сборки не бывает нескольких точек отказа. Я также использую PIP_DOWNLOAD_CACHE на своих машинах для разработки, чтобы ускорить загрузку среды проекта, поскольку требования большинства моих проектов частично перекрываются.
  • У меня есть Fabric сценарии, которые могут автоматически устанавливать и настраивать nginx + Apache / mod_wsgi на Vbu Ubuntu или настраивать эквивалент на Webfaction общего хостинга, а затем развертывать проект .
  • Я не использую --no-site-packages with virtualenv, потому что я предпочитаю иметь медленно движущиеся скомпилированные пакеты (Python Imaging Library, psycopg2), установленные на системном уровне; слишком медленный и хлопотный, чтобы делать внутри каждого virtualenv. У меня не было проблем с загрязненными системными пакетами сайтов, потому что я обычно не загрязняю их. И в любом случае вы можете установить другую версию чего-либо в virtualenv, и это будет иметь приоритет.
  • Каждый проект имеет свою собственную virtualenv. У меня есть несколько скриптов bash (не virtualenvwrapper , хотя многие его используют и любят), которые автоматизируют развертывание virtualenv для данного проекта в известном месте и установку в него требований этого проекта.
  • Весь процесс развертывания, от простой VPS-учетной записи сервера Ubuntu или учетной записи общего хостинга Webfaction до работающего веб-сайта, выполняется с помощью Fabric.
  • Сценарии Fabric являются частью дерева исходного кода проекта, и я запускаю их из локальной проверки разработки.
  • Мне не нужны SCons (о которых я знаю).

Развертывание

На данный момент новое развертывание разделено на следующие шаги:

  • fab staging bootstrap (настройка сервера и развертывание исходного кода)
  • fab staging enable (включить конфигурацию Apache / nginx для этого сайта)
  • fab staging reload_server (перезагрузить конфигурацию Apache / nginx).

Конечно, их можно объединить в единую командную строку fab staging bootstrap enable reload_server.

Как только эти шаги будут выполнены, обновление развертывания с новым кодом будет просто fab staging deploy.

Если мне нужно откатить обновление, fab staging rollback. Ничего особенно волшебного в откате; он просто откатывает код до последней развернутой версии и переносит базу данных в предыдущее состояние (для этого требуется записать некоторые метаданные о состоянии миграции БД после развертывания, я просто делаю это в текстовом файле).

Примеры

Я не использовал сценарии Fabric, описанные в этом ответе, в течение нескольких лет, поэтому они вообще не обслуживаются, и я отказываюсь от ответственности за их качество :-) Но вы можете увидеть их на https://bitbucket.org/carljm/django-project-template - в fabfile.py в корне репо и в подкаталоге deploy/.

9 голосов
/ 22 июля 2010

Я использую Fabric для сборки и развертывания своего кода и предполагаю, что система уже настроена для этого.Я думаю, что инструмент, подобный puppet , более подходит для автоматизации установки таких вещей, как apache и mysql, хотя я еще не включил его в свой рабочий процесс.

Кроме того, я обычно имеюдругой virtualenv для проекта.Они созданы из «базовой» установки python, где, как указал Карл, вы можете оставить некоторые глобальные библиотеки python.

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

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