Хороший инструмент для автоматической настройки и развертывания проектов Django

Я начинаю работать как независимый веб-разработчик, и недавно я отпугнул клиента, предоставив цитату для довольно простой сайт, который был немного выше, чем они ожидали. Это было в основном брошюру, что они могли бы сделать себя в размещенном решении как Wordpress.com или сайты Google. За исключением одной важной функции, заставило меня подумать, что Django будет хорошо подходить, и что некоторая правильная сеть развитие может быть мотивированным.

Когда я смотрю на задачи, перечисленные мной в моей приблизительной оценке, это довольно мне очевидно, что в большинстве часов там есть вещи, которые не являются специально для этого веб-сайта клиентов. Это заставило меня подумать, что я должен иметь script для автоматизации процесса настройки и развертывания новых Проекты Django.

Несколько вещей все равно придется делать вручную, например:

  • Настройте новый VPS (или, в большинстве случаев, просто запустите виртуальные хосты на существующем VPS).

  • Отредактируйте настройки DNS, чтобы указать clientdomain.com и test.clientsdomain.com. к новому VPS.

  • Настройка SSH-клавиш

  • Отредактируйте файл конфигурации.

script будет делать такие вещи, как:

  • Установите некоторые необходимые пакеты на новый VPS

  • Установите по умолчанию брандмауэр iptables на новом VPS

  • Добавьте конфигурацию nginx/apache для клиентовdomain.com и test.clientsdomain.com

  • Настройте новые базы данных для производства и тестирования на VPS и для разработки на моей локальной машине.

  • Создайте новый проект Django и поместите его в Bitbucket.

  • Настройте settings.py и local_settings.py для создания, тестирования и разработки

  • Создайте автономные резервные копии для каталога производственной базы данных и загруженных файлов.

  • Включить некоторые приложения по умолчанию: flatpages, admin

  • Добавьте некоторые шаблоны шаблонов, пару платных площадок и навигационную панель.

  • Добавьте 960.gs CSS-framework

  • Добавить jQuery

  • Установите djapian или Haystack (включая задание cron для автоматического обновления) для поиска.

  • Настройте новый профиль аналитики Google.

  • Включить возможность репликации баз данных между производством, тестированием и разработкой

  • Настройка мониторинга Pingdom

Я использовал Rake и Fabric для несколько схожих (но менее амбициозных) вещей в прошлом, и я думаю, что Fabric может быть очень хорошо подходит для этой задачи, но мне все равно нравится ваш вход. Есть ли другие инструменты, которые я должен изучить? Я слышал хорошие вещи о Puppet, но просто глядя на их сайт (он содержит слово "Предприятие" ) дает мне ощущение, что это может быть излишним для одного человека операции.

Ответы

Ответ 1

В настоящее время мы делаем это с помощью материала fabric + buildout. Другие говорят, что Chef или Puppet лучше подходят (и, вероятно, это, если вы хотите сделать материал на уровне сервера, а не только на уровне приложений).

Также для Django есть несколько выделенных хостеров, которые отнимают у вас много нагрузки, мне особенно нравится http://ep.io, которые мы используем для питания наши полностью автоматизированные развертывания для демонстраций django-cms, поэтому, возможно, вам стоит взглянуть на этих хостинг-провайдеров, а не ограничивать себя VPS, которые больше накладных расходов для вас.

Ответ 2

Кукла может показаться сложной и излишней для небольших проектов, поскольку она так часто используется для огромных развертываний, но я использую ее для управления только одной машиной в автономном режиме без настройки клиентского сервера, так что мне не нужно иметь дело с сертификатами SSL и несколькими машинами, что значительно упрощает работу, но все же дает мне преимущество в том, что я могу сделать действительно быстрое аварийное восстановление или переместить мой хостинг без много усилий. Там отличные причины (idempotency, кросс-платформенная поддержка, полное управление жизненным циклом, абстракция, сжатые DSL) для использования современных систем управления конфигурацией над системами, которые по существу скрипты, которые делают ssh в цикле или полагаются на платформы, которые блокируют вас.

Откажитесь от обучения марионетке для быстрого наращивания, включая примеры и игровую площадку виртуальной машины. Вы можете получить действительно полезные вещи, сделанные с помощью простых кукольных сценариев (манифеста), которые работают автономно, а затем начать изучать все расширенные функции, когда они вам понадобятся.

Еще одна приятная вещь: многие манифесты и модули Puppet уже написаны другими, и они разделены на Кукольный кузнец и многими другими продвинутыми пользователями Puppet.

Ответ 3

Я рассматривал это много недавно, как кто-то в подобном положении.

Многое из того, что вы упомянули, может помочь, создав хороший код скелета, который можно вытащить из git для каждого нового проекта.

Взгляните на это для хорошей отправной точки для общего скелетного кода проекта django

http://blog.zacharyvoase.com/2010/02/03/django-project-conventions/

Я собрал нечто похожее, что позволяет мне быстро вставать и работать, а также отделять материал сервера от материала проекта. Это очень важно, так как позволяет вам управлять версиями каждого проекта без использования системных/серверных файлов. Он здесь (все еще очень много в процессе). Это позаботится о расположении папок, дополнительном css, файле шаблона html, файле grid/960, jquery, настройках разработки и производства, настройках базы данных (по умолчанию), установленных по умолчанию приложениях и т.д. Вот макет объясняется

Используя Virtualenv, Virtualenvwrapper и pip позволяет настраивать автономные инкапсулированные среды python, которые отлично подходят для запуска нескольких проектов на одном VPS. Pip позволяет устанавливать пакеты на определенный virualenv, а также выводить все ваши пакеты в текстовый файл, который впоследствии можно импортировать. Это очень быстро переводит код с разработки на производство. Он также позволяет вам написать общий файл требований в вашем коде скелета, который автоматически устанавливает все ваши обычные приложения django, т.е. Django-tagging и т.д.

Что касается баз данных, я перестала пытаться создавать базы данных разработки и производственные базы данных на разных машинах, это слишком сложно для импорта/экспорта светильников. Теперь у меня просто есть отдельные производственные базы и базы данных dev на VPS и подключаться удаленно (поверх ssh) к dev при разработке. Вы можете легко скопировать друг друга, что тоже приятно.

Когда все будет готово, вы можете развернуть от разработки до производства с использованием ткани (я еще не застрял в этом, поэтому я не уверен в его простоте использования)

Мне было бы очень интересно услышать мысли других людей об этом, поскольку я собирался опубликовать что-то simliar!

Ответ 4

Отметьте Silk Deployment, основанную на Fabric, и используется для развертывания Django (или любого WSGI) + Nginx + Gunicorn:

http://pypi.python.org/pypi/silk-deployment/