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, но, если я помню, они оба открыты сейчас)