Django и многоступенчатые серверы

Я работаю с клиентом, который требует многоэтапной настройки сервера: сервер разработки, сервер стадии и сервер производства /live.

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

Мы используем git и github для контроля версий. Я использую версию сервера Ubuntu в качестве ОС.

Проблема в том, что я никогда не работал в таком многоэтапном плане сервера. Какое программное обеспечение/проекты вы бы рекомендовали сделать надлежащим образом для обработки такой установки, особенно для развертывания и перемещения новой функции, разработанной на сцене, а затем на живой сервер?

Ответ 1

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

Используя управление источником, вы можете иметь несколько основных ветвей, например production development staging. Предположим, вы хотите переместить новую функцию в стадию. Я объясню с точки зрения mercurial, но вы можете переносить команды на git, и все должно быть хорошо.

hg update staging
hg merge my-new-feature
hg commit -m 'my-new-feature > staging'
hg push

Затем вы удаляете удаленный сервер управления источником на все веб-серверы с помощью триггера. Затем триггер на каждом веб-сервере выполняет обновление и перезагружает веб-сервер.

Чтобы перейти от постановки к постановке, это так же просто.

hg update production
hg merge staging
hg commit -m 'staging > production'
hg push

Это не самый приятный способ развертывания, и он делает откат довольно тяжелым. Но это быстро и легко настроить, и все же намного лучше, чем вручную развертывать каждое изменение на каждом сервере.

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

Ответ 2

Существует хорошая ветвящаяся модель для git (так как она также используется, например, github). Вы можете легко применить эту модель ветвления, используя git -flow, который является расширением git, которое позволяет применять некоторые операции репозитория высокого уровня которые вписываются в эту модель. Там также красивый блогпост об этом.

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

Чтобы добавить к этому дополнительную автоматическую обработку, ткань - простой, но отличный инструмент, и вы найдете много руководств по ее использованию (также в сочетании с git).

Для обработки зависимостей python с помощью virtualenv и pip наверняка очень хороший способ.

Если вам нужно что-то более сложное, например. для обработки более одного экземпляра django на одной машине и для обработки зависимостей системы и т.д. checkout puppet или chef.

Ответ 3

Попробуйте Gondor.io или Ep.io, они оба делают это довольно легко (например, в этой области), чтобы иметь два + экземпляра с очень похожим кодом из вашего VCS - и для перемещения данных вперед и назад. (если вам нужно приглашение, спросите либо в IRC, но, если я помню, они оба открыты сейчас)