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

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

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

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

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

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

  • настройка SSH-ключей

  • редактировать файл config.

скрипт будет делать такие вещи, как:
  • установите некоторые необходимые пакеты на новый VPS

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

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

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

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

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

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

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

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

  • добавить 960.GS CSS-framework

  • добавить jQuery

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

  • Настройка нового профиля Google analytics.

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

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

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

4 ответов


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

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


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

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

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


Я думал много в последнее время, как кто-то в аналогичной позиции.

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

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

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

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

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

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

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

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


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

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