0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>В конце января практика Хекслета не работала больше двух часов - это пока самый крупный сбой в этом году. Вместе с разработчиками Хекслета публикуем постмортем - детальный разбор проблемы с выводами, который поможет нам не допускать подобного в будущем, а студентам и практикующим разработчикам - не повторять наших ошибок.</strong></p>
1
<p><strong>В конце января практика Хекслета не работала больше двух часов - это пока самый крупный сбой в этом году. Вместе с разработчиками Хекслета публикуем постмортем - детальный разбор проблемы с выводами, который поможет нам не допускать подобного в будущем, а студентам и практикующим разработчикам - не повторять наших ошибок.</strong></p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>Введение: постмортемы</a></li>
3
<ul><li><a>Введение: постмортемы</a></li>
4
<li><a>Что случилось с практикой Хекслета</a></li>
4
<li><a>Что случилось с практикой Хекслета</a></li>
5
<li><a>Выводы</a></li>
5
<li><a>Выводы</a></li>
6
<li><a>Как не допустить подобного в будущем:</a></li>
6
<li><a>Как не допустить подобного в будущем:</a></li>
7
</ul><h2>Введение: постмортемы</h2>
7
</ul><h2>Введение: постмортемы</h2>
8
<p>Прежде, чем приступить к разбору инцидента, разберемся, для чего нужны и как устроены постмортемы.</p>
8
<p>Прежде, чем приступить к разбору инцидента, разберемся, для чего нужны и как устроены постмортемы.</p>
9
<p>В любой программе, кроме кода присутствуют элементы реального мира - разработчики, пользователи, вендоры, оборудование, пространство и время. С таким количеством участников невозможно гарантировать, что программа всегда будет работать без сбоев.</p>
9
<p>В любой программе, кроме кода присутствуют элементы реального мира - разработчики, пользователи, вендоры, оборудование, пространство и время. С таким количеством участников невозможно гарантировать, что программа всегда будет работать без сбоев.</p>
10
<p>Раз сбои неизбежны, относиться к ним можно как к источнику потенциальной пользы. Для этого и нужны постмортемы - практика ведения документации о критических ошибках, последствиях и мерах по их предотвращению в будущем.</p>
10
<p>Раз сбои неизбежны, относиться к ним можно как к источнику потенциальной пользы. Для этого и нужны постмортемы - практика ведения документации о критических ошибках, последствиях и мерах по их предотвращению в будущем.</p>
11
<p>Часто в процессе написания постмортемов в системе обнаруживаются скрытые связи между компонентами, что делает практику вдвойне полезнее. Теперь разработчики знают не только слабые места, но и лучше понимают механизм работы программы.</p>
11
<p>Часто в процессе написания постмортемов в системе обнаруживаются скрытые связи между компонентами, что делает практику вдвойне полезнее. Теперь разработчики знают не только слабые места, но и лучше понимают механизм работы программы.</p>
12
<h2>Что случилось с практикой Хекслета</h2>
12
<h2>Что случилось с практикой Хекслета</h2>
13
<p>К сбою на Хекслете неочевидные связи не имеют никакого отношения - его причиной стал человеческий фактор. К нему привели отсутствие мониторинга и опыта быстрого восстановления сайта, который дает практика "чистых понедельников" (о ней подробнее расскажем ниже).</p>
13
<p>К сбою на Хекслете неочевидные связи не имеют никакого отношения - его причиной стал человеческий фактор. К нему привели отсутствие мониторинга и опыта быстрого восстановления сайта, который дает практика "чистых понедельников" (о ней подробнее расскажем ниже).</p>
14
<p>Глобально инфраструктура Хекслета состоит из двух частей. Сайт хостится на облачных серверах Google Cloud, а Cloudflare выступает прокси-сервером. Практика, где запускаются IDE с упражнениями и проходят тесты - хостится в облаке Digital Ocean. Она устроена так, что при запуске IDE отправляется запрос на свободный сервер с практикой, внутри поднимается docker-контейнер, а пользователь оказывается в редакторе кода со своей файловой системой, терминалом и прочим.</p>
14
<p>Глобально инфраструктура Хекслета состоит из двух частей. Сайт хостится на облачных серверах Google Cloud, а Cloudflare выступает прокси-сервером. Практика, где запускаются IDE с упражнениями и проходят тесты - хостится в облаке Digital Ocean. Она устроена так, что при запуске IDE отправляется запрос на свободный сервер с практикой, внутри поднимается docker-контейнер, а пользователь оказывается в редакторе кода со своей файловой системой, терминалом и прочим.</p>
15
<p>В декабре 2021 года Хекслет для ускорения работы и других бонусов (встроенный CDN, сертификаты Cloudflare) переехал с облачных серверов Google Cloud на Cloudflare.</p>
15
<p>В декабре 2021 года Хекслет для ускорения работы и других бонусов (встроенный CDN, сертификаты Cloudflare) переехал с облачных серверов Google Cloud на Cloudflare.</p>
16
<p>И сайт, и практика работали без проблем до 26 января. В этот день случился крупный сбой. Дальше события развивались так:</p>
16
<p>И сайт, и практика работали без проблем до 26 января. В этот день случился крупный сбой. Дальше события развивались так:</p>
17
<p><strong>[16:13]</strong>Команда разработки получила первое сообщение о том, что сервера с практикой недоступны. Спустя 20 минут стало понятно, что у SSL-сертификатов, которые всегда обновлялись автоматически, истек срок действия. Предположив, что проблем носит локальный характер, разработчики пытались по одному ее решить.</p>
17
<p><strong>[16:13]</strong>Команда разработки получила первое сообщение о том, что сервера с практикой недоступны. Спустя 20 минут стало понятно, что у SSL-сертификатов, которые всегда обновлялись автоматически, истек срок действия. Предположив, что проблем носит локальный характер, разработчики пытались по одному ее решить.</p>
18
<p><strong>[16:41]</strong>На общем созвоне разработчиков удалось установить проблему: система не могла автоматически получить новый сертификат, поскольку подтверждение владения сайтом через DNS перестало работать. Это произошло потому, что провайдером был прописан Google Cloud (который использовался до переезда), а не Cloudflare.</p>
18
<p><strong>[16:41]</strong>На общем созвоне разработчиков удалось установить проблему: система не могла автоматически получить новый сертификат, поскольку подтверждение владения сайтом через DNS перестало работать. Это произошло потому, что провайдером был прописан Google Cloud (который использовался до переезда), а не Cloudflare.</p>
19
<p>Ручное обновление сертификата на работающей машине не помогло. Тогда было принято решение либо запустить сервер практики через проксирование Cloudflare c ее сертификатами, либо перенастроить сервер на работу с другим типом верификации.</p>
19
<p>Ручное обновление сертификата на работающей машине не помогло. Тогда было принято решение либо запустить сервер практики через проксирование Cloudflare c ее сертификатами, либо перенастроить сервер на работу с другим типом верификации.</p>
20
<p><strong>[17:25]</strong>Оба варианта не помогли: стало понятно, что быстро решить проблему не удастся. О сбое сообщили всем сотрудникам Хекслета и отделу маркетинга, студентов предупредили об отсутствии доступа к практике в соцсетях и внутреннем сообществе.</p>
20
<p><strong>[17:25]</strong>Оба варианта не помогли: стало понятно, что быстро решить проблему не удастся. О сбое сообщили всем сотрудникам Хекслета и отделу маркетинга, студентов предупредили об отсутствии доступа к практике в соцсетях и внутреннем сообществе.</p>
21
<p>В это время разработчики перенастроили сервер практики на подтверждение через Cloudflare.</p>
21
<p>В это время разработчики перенастроили сервер практики на подтверждение через Cloudflare.</p>
22
<p><strong>[18:00]</strong>Заработали первые сервера с практикой. Спустя 20 минут доступ к ней был полностью восстановлен.</p>
22
<p><strong>[18:00]</strong>Заработали первые сервера с практикой. Спустя 20 минут доступ к ней был полностью восстановлен.</p>
23
<h2>Выводы</h2>
23
<h2>Выводы</h2>
24
<p>Причина, по которой возникла уязвимость, - отстутствие мониторинга доступности серверов. В декабре 2021 года Хекслет переехал с Google Cloud на Cloudflare, поэтому система автопродления сертификата пыталась работать со старым провайдером. В результате срок действия сертификата истек 26.01.2022 в 12</p>
24
<p>Причина, по которой возникла уязвимость, - отстутствие мониторинга доступности серверов. В декабре 2021 года Хекслет переехал с Google Cloud на Cloudflare, поэтому система автопродления сертификата пыталась работать со старым провайдером. В результате срок действия сертификата истек 26.01.2022 в 12</p>
25
<p>CET.</p>
25
<p>CET.</p>
26
<p>Падение можно было предотвратить: 15 и 24 января на почту support приходили письма-предупреждения от letsencrypt о сроке истечения сертификата. Команда разработки решила, что письмо штатное, а сервис автопродления сертификата сам продлит его в нужное время. До переезда эта система работала безотказно.</p>
26
<p>Падение можно было предотвратить: 15 и 24 января на почту support приходили письма-предупреждения от letsencrypt о сроке истечения сертификата. Команда разработки решила, что письмо штатное, а сервис автопродления сертификата сам продлит его в нужное время. До переезда эта система работала безотказно.</p>
27
<h2>Как не допустить подобного в будущем:</h2>
27
<h2>Как не допустить подобного в будущем:</h2>
28
<ul><li>Настроить мониторинг доступности всех серверов (HTTP 200).</li>
28
<ul><li>Настроить мониторинг доступности всех серверов (HTTP 200).</li>
29
<li>Настроить мониторинг с алертами по проверке сертификатов на все домены в Slack.</li>
29
<li>Настроить мониторинг с алертами по проверке сертификатов на все домены в Slack.</li>
30
<li>Начинать общий созвон разработчиков сразу после того, как стало понятно, что проблема массовая.</li>
30
<li>Начинать общий созвон разработчиков сразу после того, как стало понятно, что проблема массовая.</li>
31
<li>Ввести практику "чистых понедельников". Она предполагает, что в определенный день разработчики "пересобирают" сайт с нуля.</li>
31
<li>Ввести практику "чистых понедельников". Она предполагает, что в определенный день разработчики "пересобирают" сайт с нуля.</li>
32
<li>Перенастроить письма от letsencrypt на правильную почту.</li>
32
<li>Перенастроить письма от letsencrypt на правильную почту.</li>
33
</ul><p>Главная проблема в данном случае - человеческий фактор: если бы команда разработки не забыла перенастроить систему автообновления сертификатов, практика работала бы в штатном режиме. Надеемся, эта история поможет вам не повторять наших ошибок.</p>
33
</ul><p>Главная проблема в данном случае - человеческий фактор: если бы команда разработки не забыла перенастроить систему автообновления сертификатов, практика работала бы в штатном режиме. Надеемся, эта история поможет вам не повторять наших ошибок.</p>