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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Итак, с точки зрения рабочего процесса:

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