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

StackOverflow https://stackoverflow.com/questions/2441704

Вопрос

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

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

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

Решение

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

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

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

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

  • 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/ подкаталог.

Другие советы

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

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

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

  1. puppet для установки необходимых служб (веб-сервер, база данных, ssh-сервер, ...)
  2. puppet для настройки необходимых пользователей и базовых папок
  3. структура для создания virtualenv для приложения
  4. ткань для установки из пипса requirements.txt
  5. структура для развертывания вашего приложения
  6. структура для развертывания файлов конфигурации (веб-сервер, ...)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top