2009-08-11 4 views
12

Я действительно не знаю, как правильно выполнить развертывание с автономной разработки на веб-сервер в веб-разработке. Я в основном прибегаю к интуиции, но это более или менее то, что я делал до сих пор: у меня есть веб-приложение на python или php, и я размещаю его на реальном веб-сервере. Я использую автономную версию разработки, источник которой находится под svn.Как выпустить веб-приложения?

Теперь, когда я разрабатываю автономную версию, я буду выполнять фиксации для svn. Когда пришло время для освобождения, я мог бы либо:

  1. скопировать код с сервера в автономном режиме во временную папку на живой веб-сервер, а затем поменять старую кодовую с новым (например, со ссылкой.), или ...
  2. работать в реальном времени на веб-сервере svn и просто запускать обновление svn.

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

Каковы наилучшие методы для этой задачи?

+0

Стефано, не могли бы вы считать мой ответ хорошим? – TheJacobTaylor

+0

@ TheJacobTaylor: Я принимаю сессии каждые две недели. В эти выходные я перечитаю все ответы и приму. –

ответ

10

Я рекомендую использовать экспорт SVN вместо проверки. Таким образом, вы не будете раскрывать ни один из SVN-файлов в мире. Он также обычно создает более чистую структуру папок.

Я использовал rsync перед перемещением файлов между этапами и производством.

Моих типичных доходы развертывания следующим образом:

  • производства резервного копирования сайт
  • Восстановление из резервной копии на этапе сервера
  • Заблокируйте сервера вниз от всех внешних IP-адресов
  • Экспорта код из репозитория в папку temp (необязательно, различие между двумя папками для небольших изменений)
  • rsyc файлы из папки temp в папку сервера сцены
  • Убедитесь, что изменились только файлы, которые вы ожидали изменить.
  • Применение сценариев SQL к БД
  • Тест обновления
  • Разблокировка веб-сервер

Теперь, чтобы развернуть к производству, переигрывать эти шаги в быстрой перемотки вперед. Использование скриптов делает его намного проще.

+0

Согласен, но если у вас много файлов, экспорт svn может быть медленным! –

+0

На большинстве веб-серверов тривиально настроить фильтр, который делает его не обслуживающим .svn-папкам, поэтому я бы не стал считать это причиной использования «svn update». Это нужно иметь в виду, когда вы сначала настроили сервер. – rmeador

+0

ну, в общем, скорость не является проблемой, если вы экспортируете с локального (диска или сети) svn. или это ? Я имею в виду, что это не так быстро. отнюдь не. –

1

В теории я бы экспортировал svn в новую область на веб-сервере. Затем перенастройте веб-сервер, чтобы использовать новую область и перезапустить.

4

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

Что вы можете подумать о наличии промежуточного сервера. Вы выполняете локальные изменения, затем проверяете svn на промежуточном сервере и запускаете свои сценарии обновления. Вы проводите тест приёма на промежуточном сервере. Когда все будет хорошо, вы развертываете everhting на реальном сервере. Это должно быть так же просто, как запуск некоторых скриптов. то есть update-staging.pl и update-prod.pl.

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

+0

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

3

Я использую Capistrano для сценария &, чтобы автоматизировать процесс развертывания. Ниже приведено описание того, что происходит, когда я ввожу cap deploy с моей локальной рабочей станции:

Capistrano will. , ,

  1. Получить последнюю версию источника во временной отметкой каталога (например, к /var/http/mywebsite.com/releases/20090715014527) на моем веб-сервере, что побудило меня @ моей локальной рабочей станции для каких-либо паролей, если это необходимо.

  2. сценарии предварительной обработки

    Run (например, обновление схемы базы данных)

  3. Мягкая ссылка сайт в живом каталоге:

    пер -sf /var/http/mywebsite.com/releases/20090715014527/вар/HTTP/mywebsite.com/текущие сценарии постобработки

  4. Run (например, может быть, вам нужно перезапустить Apache или что-то)

Если бы на этом пути возникли проблемы, Capistrano откатится к предыдущему рабочему выпуску.

Хотя Capistrano написано на Ruby, он может развернуть веб-приложения на любом языке/фреймворке. См. "Deploying non-rails apps" section of the tutorials для идей. railsless-deploy представляется особенно полезным для использования Capistrano для управления развертыванием приложений PHP и Python.

1

для малых, PHP-систем, основанных на то, что мы привыкли делать это:

для изменения коды, мы используем муравей скрипт работает с затмения, который сравнивает локальную систему (Dev) с пультом дистанционного управления (КИ/prod/whatever), затем застегивает все измененные файлы, зачищает zip на удаленную систему и разархивирует их на цель. Конечно, у нас есть автоматическое резервное копирование и тому подобное. Если это интересно, я смогу опубликовать пример скрипта в ближайшие несколько дней.

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

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

Обратите внимание, что если ваша система prod вытягивается непосредственно из svn, тогда вы нарушаете изменения, которые, возможно, не были протестированы должным образом (вы можете забыть что-то совершить, протестировать локальную систему, и все сломается в prod ...)

+0

о zip: а как насчет удаления старых файлов? +1 для последнего замечания. Я был немного. –

+1

На самом деле, я постоянно храню старые zip-файлы. Я называю их yyyymmddhhmiss.zip, поэтому я всегда могу точно знать, какой код был поставлен на prod, когда и когда можно (или больно) перевернуть старые версии, если мои резервные копии не удались. Я удаляю их только при запуске дискового пространства. –

1

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