Ответ 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/
.