Як оновлювати живі веб-сайти зі змінами коду?


21

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

Я вирішив опублікувати це, оскільки я збираюся встановити SynchToy, щоб виправити проблему нижче, і я відчуваю себе трохи непрофесійно, використовуючи "Іграшку", але не можу придумати кращого способу.

Багато разів, коли я знаходжусь у цій ситуації, я пропускаю якийсь болісно очевидний спосіб робити речі - це походить від єдиного розробника в компанії.

  • Веб-додаток ASP.NET, розроблений на моєму комп’ютері під час роботи
  • Рішення має 2 проекти:
    • Веб-сайт (файли)
    • WebsiteLib (C # / dll)
  • Використання сховища Git
  • Розгорнуто на веб-сервері GoGrid 2008R2

Розгортання:

  1. Внесіть зміни коду.
  2. Натисніть на Git.
  3. Віддалений робочий стіл до сервера.
  4. Потягніть з Git.
  5. Перезапишіть живі файли, перетягуючи / опускаючи з Windows Explorer.

На кроці 5 я видаляю всі файли з кореня веб-сайту. Це не може бути гарною справою. Ось чому я збираюся встановити SynchToy ...

ОНОВЛЕННЯ: ДЯКУЄМО за всі корисні відповіді. Я не можу вибрати, на яку відповісти - між використанням веб-розгортання - схоже, у мене є кілька корисних пропозицій:

  1. Веб-проект = весь сайт, упакований у єдину DLL - для мене я не можу просувати прості оновлення - будучи самотнім розробником у компанії 50, це часом залишається чимось простішим.
  2. Потягнувши прямо з SCM в веб-корінь сайту - спочатку я цього не робив, не боячись, що мій прихований каталог SCM може виявитись викритим, але відповіді тут допомогли мені подолати це (хоча мені все ще не подобається мати його більше турбуватися про забуття, щоб переконатися, що все-таки правда з часом)
  3. Використання веб-ферми та систематичне розгортання до вузлів - це ідеальне рішення для нульового простою, що насправді щось мені хвилює, оскільки сайт, по суті, є джерелом доходу для моєї компанії в реальному часі - мені, можливо, важко переконати їх у вдвічі більше, ніж вартість серверів.

-> нарешті, повторне виконання основного принципу, який потребує розгортання в один клік для сайту АБО ВІДБУДУЄТЕ НЕЩО НЕБЕЗПЕЧНО, - це, мабуть, найкорисніше, що я отримав з відповідей.

ОНОВЛЕННЯ 2: Я думав, що я повернусь до цього і оновлюю фактичне рішення, яке існує вже багато місяців і працює чудово (для мого єдиного веб-сервера).

Я використовую процес:

  1. Внесіть зміни коду
  2. Натисніть на Git
  3. Віддалений робочий стіл до сервера
  4. Потягніть з Git
  5. Запустіть наступний пакетний сценарій:

    cd C: \ Користувачі \ Адміністратор

    % systemroot% \ system32 \ inetsrv \ appcmd.exe зупинити сайт "/site.name:За веб-сайт за замовчуванням"

    Документи роботокопії \ код \ da \ 1 \ робота \ Дерево \ LendingTreeWebSite1 c: \ inetpub \ wwwroot / E / XF з'єднанняconfig Web.config

    % systemroot% \ system32 \ inetsrv \ appcmd.exe стартовий сайт "/site.name:За веб-сайт за замовчуванням"

Як ви бачите, це призводить до того, що сайт знижується, використовуючи роботокопію, щоб інтелектуально копіювати файли, які були змінені, а потім повертає сайт до резервного копіювання. Зазвичай працює менше ніж за 2 секунди. Оскільки піковий трафік на цьому веб-сайті становить приблизно 2 запити в секунду, прийнятне відсутність 4 запитів на оновлення сайту.

Sine Я став більш досвідченим з Git. Я виявив, що перші чотири кроки вище, як "ручний процес", також є прийнятним, хоча я впевнений, що міг би згорнути всю справу в один клік, якби захотів.

Документація для AppCmd.exe знаходиться тут . Документація на Robocopy знаходиться тут .


6
Краще підходить для сервера за замовчуванням.
Карл Білефельдт

Ви повинні розглянути SSHing на своєму сервері, а не використовувати віддалений робочий стіл, щоб ви могли сценарію розгортання, якщо хочете.
Мальфіст

5
Я думаю, що це питання чудово залишитися тут. Розробка веб-сайту мені здається, що розробник турбується більше, ніж робота з системою адміністратора, хоча, мабуть, це може залежати від компанії. І все-таки всі відповіді настільки орієнтовані на розробників.
Адам Лір

1
@Malfist - як саме один ssh на сервері Windows?
Wyatt Barnett

@Wyatt Запустивши SSH-сервер на віддаленій машині, (майже той самий) такий же, як і у вікні Linux.
Адам Лір

Відповіді:


3

Слід переглянути веб-розгортання VS 2010. Якщо GoGrid підтримує його, пакет веб-розгортання є хорошим рішенням.

http://weblogs.asp.net/scottgu/archive/2010/07/29/vs-2010-web-deployment.aspx


коли ви використовуєте веб-розгортання, ви втрачаєте можливість виправлення, ні? Я знаю, що є багато людей, які не хочуть робити щось настільки поза офіційним процесом, але мені подобається мати можливість для надзвичайних ситуацій ...
Аарон Анодід

Ви робите, хороший пункт. Я знаю, що в моїй компанії ми не хочемо, щоб люди це робили, тому що ми не можемо відстежувати зміни. Для особистих сайтів мені дуже подобається мати такий варіант.
Нейт

3

У мого попереднього роботодавця для розгортання змін коду ми встановили балансир навантаженнящоб зупинити сервінг до одного веб-сервера. Сеанси на першому веб-сервері можуть зайняти 20 хвилин. Ми оновимо код на цьому веб-сервері, розпакувавши поштовий файл розгортання, а потім перевіримо, чи все працює нормально, натиснувши пряму IP-адресу цього першого веб-сервера. Коли ми переконаємося, що це працює нормально, тоді ми встановимо балансир завантаження, щоб натиснути на оновлений веб-сервер і чекати закінчення сеансів на іншому сервері, а потім оновити цей (і так далі, поки всі вони не були оновлені). Після того як вони перевірили нормально, ми встановили балансир навантаження, щоб повернутися, роблячи свою роботу. Це ускладнилося, коли у нас було 10 веб-серверів, підключених до балансира навантажень під час пікових сезонних навантажень (тому оновлення їх по одному може зайняти години, тому що ми не могли закрити живий веб-сайт - клієнти мали змогу отримати на сайт).

У ASP.NET, якщо ви впустите будь-який файл, названий App_Offline.htmу кореневий каталог веб-сайту, він завантажує веб-сайт, який дозволить вам потім оновити DLLS (і будь-що інше). IIS розмістить сторінку під назвою "Додаток офлайн". Коли файл буде видалений, перейменований або видалений, веб-додаток перезапуститься, а IIS подаватиме веб-сторінки на цей веб-сайт. Це те, що робить Visual Studio, коли публікує веб-сайт зсередини VS.


2

Зазвичай те, що я роблю, це зберігати все у сховищі SVN. Коли я закінчую з деякими змінами, я беру участь на сайті розробників, а потім перевіряю виробництво. Тримає все синхронізовано, це швидко і легко. Якщо перевірка занадто багато клопоту, ви можете встановити Apache за допомогою WebDAV, і це зробить це за вас.


Ви турбуєтеся про те, як, наприклад, .svn каталог присутній на вашому веб-сайті?
Аарон Анодід

Насправді, apache, як правило, налаштовано, щоб заборонити доступ до цих папок.
Malfist

IIS заперечує .svn (або .git або .hg) за замовчуванням також.
Wyatt Barnett

Якщо зловмисний користувач отримає доступ до каталогу, він / вона отримає доступ до всіх кодів у чистому стані.
олексій

5
Якщо зловмисний користувач отримує доступ до вашої файлової системи, вам доведеться турбуватися більше.
Malfist

2

Для кожного з моїх веб-додатків я маю налаштування сховища git з трьома гілками. У прямому ефірі, бета-версія, функції. Live - це, звичайно, живий сайт. Бета - це сайт, який використовується для виправлення помилок або для остаточного тестування функцій безпосередньо перед впровадженням. Тоді, як ви сказали, я роблю простий git push, git pull on live, щоб перетягувати інформацію дюйма. Особливості використовуються для вдосконалення "наступної версії".


Те саме працює з майже всіма системами управління джерелами.
deadalnix

2

Ви намагаєтеся вирішити проблему безперервної доставки . Спочатку ви б почали з кроків вручну, але незабаром зрозумієте проблеми. Це найпоширеніші з них:

  1. Код працює на вашому ПК, не працює на виробництві
  2. Нова зміна порушує старий код
  3. Зростання змін зробить все складніше та складніше розгортання, ви отримаєте нові бібліотеки для приєднання, патчі для застосування тощо.

Погляньте на TeamCity (або будь-який подібний інструмент).


2

Використовуйте автоматизований сценарій побудови та розгортання

Найкращий спосіб зробити це - використовувати автоматизований сценарій збирання та розгортання, наприклад, MsBuild або Nant.

Причина полягає в тому, що ви можете просто ввести команду 1, щоб розгорнути веб-сайт, а потім просто ввести команду 1, щоб повернути її назад. І якщо ви будете досить ретельними, це включає міграцію вашої бази даних. (Migrator.Net)

Однією з головних причин не використовувати SVN або GIT для розгортання є те, що середовище може змінюватися між виробництвом та етапом. У вашому сценарії NANT ви можете створити його .config-файли спеціально для середовища, на яке ви орієнтовані. Це економить, забувши ввести налаштування конфігурації у виробництво.

Він також автоматизує весь процес, так що він стає єдиною командною справою, і будь-яка кількість ручних процесів стає 1 простим процесом.


1

По-перше, ви повинні використовувати веб-проект. Які відмінності ви запитуєте?

Веб-проект об'єднає всі файли класу C # (включений код ззаду) в одну DLL (краще для безпеки та того, що потрібно перемістити один файл)

По-друге, ви повинні опублікувати додаток, і тоді ви можете ще віддалений робочий стіл, перетягнути всі файли у папці публікації та просто встановити його на перезапис (нові файли замінять старі файли).

Публікація помістить усі необхідні файли для програми в одну папку.


1

Мій нинішній роботодавець використовує маріонетку . (Ось більше програмних пакетів, які вирішують ту саму проблему.)

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

Роботодавець, у якого я був раніше, мав власні сценарії, щоб скопіювати дані з підривної роботи на сервери та зробити перезапуск.

У кількох місцях, які я бачив раніше, було зроблено файли для управління розгортанням. Зазвичай вони використовували таку стратегію, як відрізання половини веб-серверів з балансира навантаження, очікування, припинення цієї половини, розгортання коду, перезапуск їх, потім перегортання балансира навантаження, чекання, зупинка другої половини, перезапуск їх, а потім повернення балансира навантаження вгору

У всіх місцях, де я працював, розгортання коду було або однією командою, або відсутність єдиної команди було визнано проблемою, яку потрібно усунути.


1

Зазвичай ми використовуємо для вирішення цієї проблеми на наших веб-сайтах інструмент, що входить до System Internals, що називається з'єднанням.

За допомогою цього інструменту ми можемо створювати посилання з одного каталогу в інший. Корінь програми на сервері містить 3 папки. Червоний, синій, струм. IIS налаштований так, щоб завжди дивитись на Current для своїх файлів.

Ви можете випустити команду, junction currentяка підкаже, на яку теку вказується поточна папка. Скажімо, наприклад, що він зараз вказував на Блакитний. Ми повинні зробити чергові файли червоного кольору для нового розгортання та переконатися, що вся конфігурація готова до запуску.

Після того, як ми готові, ми можемо видати команду, junction current redщоб вона була повторна.

Є дві речі, які роблять це рішення таким чудовим

1) У вас весь час у світі є чергування змін у папці. Не поспішайте, і єдиний час виходу з ладу - це коли пул додатків розгортається. (Є спосіб попередньо також скласти цей крок.)

2) Якщо з вашим розгортанням щось піде не так, все, що вам потрібно зробити, щоб повернути назад - це команда, а не намагання відновити зміни. Команда в нашому випадку була бjunction current blue

Сподіваємось, наш спосіб зробити це може пролити трохи світла на нове для вас рішення.


0

Що я зробив, і я не впевнений, чи є у вас можливість для цього, але тут ідеться. Розробник перевірить код у гілці якості, а потім він буде завантажений у середовище QA системним інженером, після того, як він перейде до QA, він буде переведений у виробничу галузь. Було щонайменше 2 кожного веб-сайту, підключеного до сервера, за коефіцієнтом навантаження на баланс навантаження, і в цьому випадку один із двох серверів буде відключений офлайн, якщо його буде зупинено, а сайт буде архівовано, а новий сайт буде розгорнуто разом із будь-які необхідні зміни в iis будуть перезапущені, а потім ви перейдете на наступний сервер. Це все було написано за допомогою C # в нашому випадку, але це було зроблено раніше, використовуючи vb скрипт. Я сподіваюся, що це допомагає. Ура

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.