Розробка на виробничому сервері


35

Сьогодні я закричав на розробку програми на виробничому сервері. Цитата: " Розробка на виробничому сервері неприйнятна - ніколи! "

Ось така ситуація.

  1. Я створив екземпляр розробки: http://example.com:3000
  2. Виробничим екземпляром є: http://example.com
  3. Я завершую всі мої роботи з розробки, http://example.com:3000і коли клієнт задоволений змінами, я переходжу до них http://example.com.

Додаток, з яким я працюю, - це стара програма Ruby on Rails , і я мушу сказати, що спочатку я намагався створити середовище розробки локально, але я ніколи не міг запустити його. Пробуючи деякий час, я здався і вирішив розвиватися на виробничому сервері.

Знову ж, я ідіот? Напевно, так, але я займаюся веб-розробкою вже пару років, і я ніколи не стикався з такою ситуацією. Хто правий і чому?


46
Єдиним дійсним ретортом було б "мати виробничий сервер, який неможливо відтворити в процесі розвитку, не прийнятний ніколи".
Blrfl

49
Для мене справжня проблема полягає в тому, що у вас є виробнича система, де ви поняття не маєте, що працює або як вона налаштована. Що б ви зробили, якщо ваша машина виробництва розбилася, втративши всі свої дані? Якщо ви зараз не можете створити належне середовище розробки, що ви зробите, коли це ваш єдиний варіант?
Грег Х'югілл

@GregHewgill, так, це хороший момент
luk3thomas

25
Грег має рацію, якщо вам недостатньо інформації про програму для відтворення середовища на розроблювальній машині, тоді ви не тільки не повинні розробляти і тестувати на виробничій машині, навіть вам не дозволяють отримати доступ до розгортання на цій машині. Ви явно не помилялися, але я б кричав на вашого начальника за те, що ви отримали доступ в першу чергу, перш ніж ви повністю зрозумієте, що ви робите.
maple_shaft

3
Якщо ви не можете налаштувати місцеве середовище розвитку, ви не повинні взагалі розвиватися.
Яс

Відповіді:


58

Раніше я розроблявся на виробничому сервері. Це може спрацювати нормально, але це недоцільно принаймні з двох причин:

  1. Код розробки може спричинити нескінченні цикли, витоки пам’яті чи інші проблеми, які блокують процесор, з’їдають всю пам'ять або іншим чином впливають на сервер таким чином, що вплине на ваш виробничий код.
  2. Якщо вам потрібно внести зміни до компонентів серверного середовища в рамках вашої роботи з розробки, як-от версія Ruby або MySQL чи будь-що інше, ви будете в змозі.

1
Так, це хороший момент. Тим більше я думаю про це, хлопці, ви абсолютно правильні.
luk3thomas

6
Є третє питання: безпека. Що робити, якщо хтось переглядає виробничий сервер і виявляє вашу (розроблювальну) програму - і як результат компрометує виробничий додаток? Знову ж таки, хоча це не ймовірний сценарій, це майже все, що всі говорять після того, як сервер чи система були порушені.
Марко


3
@Marco Насправді це дуже ймовірно, якщо сервер є загальнодоступним. Сервери розробки зазвичай мають дуже погану безпеку (адже зручності, такі як налагоджувачі та сліди стека, є зобов'язаннями щодо безпеки). Якщо зловмисник може ескалювати привілеї, використовуючи сервер розробників, він може повністю володіти виробничим додатком.
Марк Е. Хааз

29

Як заявили інші, кодування в середовищі PROD піддає користувачам ваші помилки. Навіть якщо ви створили інший екземпляр, у вас все ще є спільні апаратні ресурси та ви все ще можете отримати доступ до виробничих файлів та баз даних. І як зазначають деякі коментарі, якщо ваш екземпляр Dev був зламаний (наприклад, ви забули його витерти, а хтось потім виявив масштабний подвиг безпеки в Rails), тепер у вас з'явилася загальнодоступна машина з дією вашої програми як шлюз в. Що було б ... прикро.

Різні підприємства мають різні відповіді на це, але його можна загалом розбити так:

  • Чи відбулося викручування?
  • Скільки часу знадобиться для відновлення зміни (я в першу чергу працюю на C ++, тому відкат бінарного файлу може зайняти значно більше часу, ніж у Ruby, особливо коли ви "втратили" старий бінарний файл і вам доведеться перекомпілювати)
  • Що ефект зміни (грубе керівництво: загвинчування збережених даних так набагато гірше , чим не зберігання або відображення даних, які , в свою чергу, гірше , чим не показує сторінку на всіх)
  • Якби ти поцупив тоді, вийшов із дверей, хтось би знав, що ти робив?
  • Чи був інший варіант розгортання, який би перешкоджав / мінімізував / виявляв гвинт перед ударом?

Це дає вам остаточний розрахунок:

  • Скільки коштувала б ця цілком запобіжна викрутка?

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

Якщо ви працюєте на внутрішній сторінці компанії "Про нас" і вводите власне ім'я, щоб бути Л. "Богоподібним" Томасом, що бентежить проблема прізвиська; якщо ви працюєте над критично важливим для покупки додатком, і воно закінчилося випадково налагодженням простого тексту налагодженням даних кредитної картки на домашній сторінці ... проблема з позовом. Між цими крайнощами лежить все - від зарядження, каліцтва продуктивності та всього іншого, що може відігнати клієнтів.

Причина не допускати цього навіть для сторінки "Про нас" полягає в тому, що кодування безпосередньо у виробництві викликає звикання . Ви починаєте, лише роблячи це для неповнолітніх, але з часом це набагато швидше, що вам не доведеться добирати DEV до переробки.

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

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


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

@ Carson63000 Погодився, і відповідь Якова, безумовно, краща з цього боку. Я трохи змінив свою.
deworde

13

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

Я підтримую заяви щодо розвитку AVOID на виробничому сервері. Ви можете бути виправданим робити в GUN лише в тому випадку, якщо це корекція помилки друку в конфігураційному файлі та наполягає на вашому менеджері.

WHY NOT?- Тому що, це дуже ризиковано і схильно стати звичкою пізніше, що погано наздожене тебе. Тому що фатальні виробничі помилки / збої можуть коштувати вас звільнити з роботи.

Дозвольте мені повторно повторити його, навіть якщо ви попросили зробити виправлення помилок на productionсервері, спочатку зробіть це Staging. або іншими словами перевірити свої зміни, протестуйте їх і знову протестуйте перед тим, як розмістити у виробництві.

Це те, що часто трапляється в місцях, коли культура «роби це швидко і брудно » здається нормою.

Редагувати: Розвивається на виробничому сервері, оскільки окреме середовище НЕ приймається . Будь-які проблеми, спричинені вашою роботою, можуть просто знищити сервер виробництва та вплинути на продуктивність виробничих додатків . Як, наприклад, я пам’ятаю випадок, коли був захисний отвір, коли мій попередній колега намагався використовувати виробничий сервер WinServer 2003 для цілей розробки.


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

Дякую, я додав редагування, яке стосується проблем щодо його виконання.
Е.Л. Юсубов

10

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

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


Добре, дякую. Чи може код розробки зробити машину нестабільною? Я працюю над старим додатком для рейок. Мені здається (наївній людині), що на розробку код http://example.com:3000не вплине http://example.com.
luk3thomas

2
@ luk3thomas: ну, звичайно, не повинно. Що робити, якщо в системі веб-сервера чи Rails є помилка, яка збиває сервер? Що робити, як, як запропонував Джейкоб Террі у своїй відповіді, нескінченний цикл чи витік пам’яті у вашому коді розробників висмоктує всі ресурси на виробничому сервері та ставить під загрозу ефективність роботи веб-сайту?
Carson63000

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

8

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

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

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


3
зауважив, дякую за пораду w / VirtualBox
luk3thomas

1
@ luk3thomas Це також безкоштовно! В Інтернеті є тони навчальних посібників для VirtualBox + Ubuntu (напевно, одна з найпоширеніших комбінацій віртуалізації).
msanford

8

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

Не возиться з виробничими даними, що може статися так легко!

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

Для більшості застосунків значення лежать у даних, а не у підпрограмах.


1
Ви дізнаєтесь це досить швидко після того, як ви накрутили виробничі дані. Я здогадуюсь, що у нього немає БД.
Роклан

8

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

  1. Будуйте локально.
  2. Пересуньте його до якогось типу коробки, який максимально імітує виробництво, щоб побачити, чи добре там грає.
  3. Можливо, надішліть його до QA або сертифікаційного екземпляра, щоб передати клієнту / QA команді для перегляду змін.
  4. Натисніть на виробництво.

Ви можете використовувати рецепти Capistrano в парі з GitHub, щоб обробляти всі ці речі для вас. Якщо робити це потрібно вручну кожен раз, воно може швидко старіти.


рейки 2.3.11, я, мабуть, зроблю щось подібне
luk3thomas

1

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

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


0

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

У своїй кар’єрі я знайшов лише дві причини зміни коду на виробничих серверах:

  1. Помилки або поведінка, які трапляються лише там і не відтворюються в середовищі розвитку. Вони рідкісні, але їх можна дуже дратувати і важко знайти.

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

Обидва найкраще залишати старшим розробникам, які добре знають системи.


Якщо у вас є помилки, які виникають лише у виробничому середовищі, ваше середовище розвитку недостатньо близько до виробничого середовища. Ви повинні В НАДІЛЬШОГО ПОЛУЧЕННЯ мати постановочне середовище з точно такою ж конфігурацією, що і виробниче середовище, аж до точних налаштувань ОС, обробки обладнання та встановленого програмного забезпечення.
Nzall
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.