Как вы используете pip, virtualenv и Fabric для управления развертыванием?
-
19-09-2019 - |
Вопрос
Каковы ваши настройки, ваши приемы и, прежде всего, ваш рабочий процесс?
Эти инструменты великолепны, но до сих пор нет рекомендаций по их использованию, поэтому я не знаю, каков наиболее эффективный способ их использования.
- Используете ли вы пип пакетами или всегда скачивать?
- Ты настроил 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.
Итак, с точки зрения рабочего процесса это было бы:
- puppet для установки необходимых служб (веб-сервер, база данных, ssh-сервер, ...)
- puppet для настройки необходимых пользователей и базовых папок
- структура для создания virtualenv для приложения
- ткань для установки из пипса requirements.txt
- структура для развертывания вашего приложения
- структура для развертывания файлов конфигурации (веб-сервер, ...)