<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>CI/CD</title>
    <description>CI/CD (Continuous Integration и Continuous Delivery/Deployment) — это практики автоматизации разработки, тестирования и развёртывания программного обеспечения. Они позволяют разработчикам быстрее доставлять качественные обновления, снижая риски и упрощая процесс интеграции и выпуска новых версий приложений. Использование CI/CD помогает минимизировать ручной труд, улучшить стабильность продуктов и ускорить их вывод на рынок.</description>
    <link>https://tproger.ru/tag/ci-cd</link>
    <atom:link href="https://tproger.ru/tag/ci-cd/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sat, 03 Oct 2026 14:16:12 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>CI/CD</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Стратегии деплоя, которые не роняют прод</title>
      <link>https://tproger.ru/articles/strategii-deploya-kotorye-ne-ronyayut-prod</link>
      <comments>https://tproger.ru/articles/strategii-deploya-kotorye-ne-ronyayut-prod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/strategii-deploya-kotorye-ne-ronyayut-prod</guid>
      <description><![CDATA[<p>Безопасный деплой в прод: единый артефакт, канареечные выкладки, feature flags, контроль метрик, совместимые миграции данных и отрепетированный откат.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/strategii-deploya-kotorye-ne-ronyayut-prod">Стратегии деплоя, которые не роняют прод</a>»</p>]]></description>
      <category><![CDATA[Организация разработки]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 15 Sep 2026 05:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Любое изменение в рабочей среде может повлиять на пользователей: новая версия сервиса, миграция базы данных, обновление мобильного клиента или переключение конфигурации. Выкатывая изменения для пользователей на прод, вы рискуете столкнуться с чем угодно: от битой кнопки до недоступности сервиса.Тесты снижают вероятность ошибки, но не воспроизводят весь набор данных, нагрузку и сочетания запросов в работающей системе.</p><p>Чтобы деплой прошёл без проблем, нужно подготовить воспроизводимый артефакт, проверить совместимость версий и заранее определить условия остановки или отката релиза. Подробнее об этих процессах и опыте работы с высоконагруженными системами рассказала команда RWB.</p><h2>Сначала разделим деплой и релиз</h2><p>Деплой отвечает за доставку кода или собранного артефакта в проде. Релиз начинается тогда, когда новое поведение становится доступно пользователям. Эти события могут происходить одновременно, но если будете разделять — получите больше контроля.</p><p>Если вы выкатываете новую версию сервиса с дополнительными функциями, сначала функцию можно открыть сотрудникам, затем небольшой группе пользователей или отдельному региону. При этом вы можете отдельно управлять версией приложения и доступностью конкретной функции. Например, если проблема связана с функцией, её можно быстро выключить через флаг, а если сбой затрагивает весь сервис, вы возвращаете предыдущую версию приложения.</p><p>Держите в фокусе четыре параметра:</p><ol><li>какой именно артефакт попадает в среду;</li><li>какая доля запросов или пользователей видит изменение;</li><li>по каким сигналам выкладка продолжается или останавливается;</li><li>сколько времени занимает возврат к рабочей версии.</li></ol><p>Время восстановления тоже нужно определить заранее. Например, отключение функции через флаг должно занимать не более 1–5 минут, возврат к предыдущей стабильной версии — до 15 минут. Для сбоев, затрагивающих базу данных или требующих ручного вмешательства, устанавливают отдельное целевое время восстановления — например, 30–60 минут. Эти значения служат отправной точкой: уточняйте их с учётом критичности сервиса, архитектуры и требований бизнеса.</p><h2>Один артефакт для всех сред</h2><p>Одна из причин релизных сбоев скрывается между тестовой средой (стейджингом) и продом. Вы проверяете один контейнерный образ, а перед выходом в прод собираете его заново. Результат второй сборки может отличаться: обновилась незакреплённая зависимость, изменился базовый образ, очистился кеш или иначе отработал сборочный скрипт.</p><p>С подобной проблемой столкнулись и мы в <a href="https://habr.com/ru/companies/rwb/articles/948330/">RWB</a>. При непрерывной интеграции и доставке (CI/CD) пайплайны для разных сред запускались независимо. Из-за повторной сборки в прод мог попасть образ, который не проходил проверку на стейджинге.</p><p>Мы перешли к переиспользованию одного артефакта. Во время первой сборки система вычисляет хеш содержимого репозитория и записывает его в метаданные контейнерного образа. На следующих этапах пайплайн ищет в реестре контейнерных образов артефакт с тем же хешем. Если содержимое исходников не изменилось, образ не собирается заново: система назначает ему тег нужной среды и разворачивает уже проверенную версию.</p><p>Для прода в RWB добавили отдельное правило. Если пайплайн не находит ранее собранный образ, выкладка завершается ошибкой. Правило находится непосредственно в коде пайплайна.</p><p>После внедрения этого подхода RWB еженедельно пропускает около 700 сборок. Это 30% сборок с включённой фичей и 5% общего числа сборок через CI/CD. Главное — между тестированием и продом сохраняется один и тот же исполняемый код.</p><h2>Поэтапная выкладка ограничивает радиус сбоя</h2><p>Даже проверенный артефакт может повести себя иначе на реальном трафике. Помогает поэтапная доставка изменений — новая версия постепенно охватывает всё больше пользователей.</p><p>При <a href="https://argo-rollouts.readthedocs.io/en/stable/features/canary/">канареечной выкладке</a> новую версию сначала получает небольшая группа пользователей, а остальные продолжают работать со старой. Отсюда и название: когда-то шахтёры брали под землю канареек, которые раньше людей реагировали на ядовитый газ и предупреждали об опасности.</p><p>Вот как это работает: вы следите за ошибками и другими показателями новой версии и, если всё в порядке, постепенно увеличиваете долю трафика. Размер каждого шага зависит от нагрузки и характера изменения. Для сервиса с несколькими запросами в минуту нужна одна схема наблюдения, а для компонента с постоянным потоком запросов — другая.</p><p>Решите заранее, как пользователи будут распределяться между версиями. Для сервиса без сохранения состояния можно направлять отдельные запросы случайным образом. Если сервис хранит данные пользовательской сессии — например, авторизацию, содержимое корзины или черновик заказа, то пользователей лучше распределять по идентификатору, аккаунту, устройству или региону. Так, начав работу с одной версией, клиент продолжит работать с ней до конца сессии.</p><p>Когда распределение настроено, остаётся понять, сколько за новой версией наблюдать. Пять минут при паре запросов ничего не покажут, а на стабильных показателях каждый следующий день наблюдения всё менее информативен. Определите заранее оба порога: сколько операций нужно для доверия метрикам и когда наблюдение пора прекращать.</p><p>Дальше процесс можно автоматизировать:<a href="https://argo-rollouts.readthedocs.io/en/stable/features/analysis/"> контроллер поэтапной доставки</a> получает метрики, сравнивает их с заданными условиями и выбирает следующий шаг — увеличить трафик, остановить выкладку или выполнить откат. При этом все условия хранятся рядом с конфигурацией релиза.</p><h2>Метрики, которые останавливают релиз</h2><p>Статус контейнера Running подтверждает только запуск процесса. Для решения о продолжении выкладки нужны сигналы нескольких уровней.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-09-07/d958dbb4-708e-4415-813e-159b15944882.webp" alt="" /></figure><p>Порог лучше сравнивать с базовой версией в тот же момент времени. Одновременное наблюдение за стабильной и канареечной версиями помогает отделить дефект релиза от фонового инцидента.</p><p>Для критичных операций одной агрегированной метрики недостаточно. Общая доля ошибок может выглядеть нормально, хотя конкретный регион, тип клиента или способ оплаты уже сломан. Поэтому перед выкладкой определите разрезы, в которых будете анализировать результат.</p><h2>Feature flags управляют доступностью функции</h2><p><a href="https://martinfowler.com/articles/feature-toggles.html">Feature flag</a> позволяет изменить поведение приложения без новой выкладки кода. С его помощью вы можете открыть функцию внутренним пользователям, заданному сегменту или небольшой доле аудитории. При проблеме флаг работает как kill switch — оперативный выключатель функции.</p><p>Флаг не заменяет канареечную выкладку контейнера. Эти механизмы контролируют разные уровни:</p><ul><li>канареечная выкладка проверяет новую версию приложения и её взаимодействие с инфраструктурой;</li><li>feature flag управляет отдельным пользовательским сценарием внутри уже развёрнутой версии.</li></ul><p>Вместе они позволяют сначала проверить техническую стабильность сборки, а затем постепенно открыть новое поведение.</p><p>Флаги тоже требуют контроля: для временного переключателя заранее определите владельца, назначение и дату удаления. Доступ к прод-флагам лучше ограничить, а изменения записывать в журнал с указанием пользователя, времени и причины.</p><p>Ещё один важный момент: приложение должно предсказуемо работать при недоступности сервиса флагов. Для критичных функций вы заранее задаёте безопасное значение по умолчанию и срок, в течение которого клиент может использовать закешированную конфигурацию.</p><h2>Миграции данных требуют собственного плана отката</h2><p>Откат контейнерного образа возможен, пока старая и новая версии совместимы с одной схемой данных. После удаления колонки, изменения формата события или необратимого преобразования записей старый код может перестать работать.</p><p>Для изменений, затрагивающих схему данных, применяют подход expand–migrate–contract:</p><ol><li>Сначала вы расширяете модель данных: добавляете новую колонку, таблицу или поле события, сохраняя старую структуру.</li><li>Затем выкатываете код, который понимает оба формата. При необходимости сервис некоторое время пишет данные одновременно в старое и новое представление.</li><li>После миграции чтение переключается на новый формат, а вы проверяете результат на прод-нагрузке.</li><li>Старую структуру удаляют отдельным релизом, когда предыдущая версия приложения больше не понадобится для отката.</li></ol><p>Да, эта последовательность увеличивает число этапов, зато сохраняет совместимость между версиями. Для API и очередей действует тот же принцип: потребители должны уметь обрабатывать новые поля, а производитель — учитывать время обновления зависимых сервисов.</p><p>В распределённой системе разные версии компонентов некоторое время работают одновременно, поэтому совместимость становится частью самого релизного процесса.</p><p>У RWB похожая задача решена через правила совместимости — рассказали об этом в<a href="https://habr.com/ru/companies/rwb/articles/1036296/"> кейсе о переходе к микрофронтендам</a>. Основное приложение выбирает подходящую версию независимо развёртываемого фронтенд-модуля. Благодаря этому вы можете выпускать изменения постепенно и при необходимости откатывать отдельный микрофронтенд.</p><h2>Откат нужно репетировать</h2><p>В рабочий сценарий нужно включить:</p><ul><li>где хранится последний проверенный артефакт;</li><li>кто или какая автоматика запускает возврат;</li><li>сохраняет ли старая версия совместимость с текущими данными и конфигурацией;</li><li>сколько времени проходит от сигнала до восстановления пользовательского сценария;</li><li>как вы убеждаетесь, что откат действительно завершился успешно.</li></ul><p>Проверьте эту процедуру заранее на тестовой среде. При этом сценарий должен совпадать с прод-процессом. Если вы впервые выполняете откат во время реального инцидента, часть времени уйдёт на выяснение того, как именно он должен работать.</p><p>Проблему можно исправлять новой версией, если миграция уже изменила большой объём данных и предыдущий код больше не поддерживает новый формат. Поэтому сценарий отката нужно учитывать ещё до начала миграции: определить условия, при которых возврат к старой версии уже невозможен, назначить ответственных и описать последовательность восстановления в runbook — пошаговой инструкции для дежурных инженеров.</p><h2>Минимальный набор перед первой управляемой выкладкой</h2><p>Для первой управляемой выкладки не обязательно сразу строить сложную платформу поэтапной доставки. Базовый процесс можно собрать из нескольких понятных правил:</p><ul><li>прод получает тот же артефакт, который прошёл проверки;</li><li>релиз начинается с ограниченного трафика или аудитории;</li><li>метрики имеют заранее определённые условия остановки.</li></ul><p>Когда вам уже понятен процесс, можно автоматизировать продвижение между этапами, сравнение метрик и откат. Автоматизация в этом случае ускоряет готовый процесс и снижает количество ручных действий.</p><h2>Вместо вывода</h2><p>Безопасность релиза определяется возможностью остановиться. Технически её обеспечивают четыре рычага: какой артефакт вы разворачиваете, какая доля пользователей его видит, по каким сигналам останавливаете выкладку и сколько времени занимает откат. Для старта достаточно минимума: единый артефакт, ограниченный первый этап, измеримые критерии остановки и отрепетированный откат.</p>]]></content:encoded>
    </item>
    <item>
      <title>Обвязка важнее модели: три слоя, которые определяют результат</title>
      <link>https://tproger.ru/articles/obvyazka-vazhnee-modeli-tri-sloya-kotorye-opredelyayut-rezultat</link>
      <comments>https://tproger.ru/articles/obvyazka-vazhnee-modeli-tri-sloya-kotorye-opredelyayut-rezultat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/obvyazka-vazhnee-modeli-tri-sloya-kotorye-opredelyayut-rezultat</guid>
      <description><![CDATA[<p>Почему код вокруг модели влияет на результат сильнее выбора модели: маршрутизация вычислений, автоматические проверки отказов и контроль границ информации.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/obvyazka-vazhnee-modeli-tri-sloya-kotorye-opredelyayut-rezultat">Обвязка важнее модели: три слоя, которые определяют результат</a>»</p>]]></description>
      <category><![CDATA[Архитектура ПО]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Промпты]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 08 Sep 2026 13:00:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>Спор о том, какая модель лучше, съедает почти всё внимание. Между тем на поведение системы куда сильнее влияет то, что построено вокруг модели: как формируются запросы, что попадает в контекст, какие проверки стоят на выходе и кому позволено читать сохранённые данные.</p><p>Всё это принято называть обвязкой, и определение у неё простое.</p><blockquote>Обвязка — это весь код между тем, что вы печатаете, тем, что получает модель, тем, что модель выдаёт, и тем, что вы видите. И это много кода, не имеющего отношения к ИИ. Модели при этом выглядят в значительной степени взаимозаменяемыми.</blockquote><p>Разбираем три слоя обвязки, на которых результат меняется заметнее, чем от смены модели: маршрутизация вычислений, страховка надёжности в конвейере и контроль границ информации.</p><p>Обвязка — это код без единой нейросети внутри: сборка запроса, управление контекстом, проверки на выходе и координация нескольких моделей.</p><p>Маршрутизация задач между дорогой внешней моделью и дешёвой локальной даёт выигрыш в скорости, приватности и цене без смены качества на основных сценариях.</p><p>Анализ сгенерированного кода не показывает, как он поведёт себя при отказе зависимости, поэтому проверки надёжности строятся на воспроизведении реальных отказов, а не на чтении текста.</p><p>Пять источников почти всех сбоев одни и те же: процессор, память, диск, ввод-вывод и сеть. С них и начинают автоматические проверки.</p><p>Модели с постоянной памятью раскрывают лишние данные в неподходящем контексте, причём доля нарушений растёт с числом задач, а просьба быть осторожнее проблему не решает.</p><h2>Слой первый: что и где считать</h2><p>Первое, что делает обвязка, — решает, какой моделью обрабатывать конкретную задачу. Шнайер прямо советует руководителям по безопасности <a href="https://www.schneier.com/news/archives/2026/07/why-an-ai-harness-may-matter-more-than-the-latest-model.html">смотреть мимо брендов моделей и разбираться с окружающим их программным слоем</a>: он управляет промптами, выводом, контекстом, ограничениями и координацией нескольких моделей одновременно.</p><p>Отдельная функция этого слоя — маршрутизация между дорогими внешними моделями и дешёвыми локальными. По мере того как компактные системы приближаются по качеству к передовым, всё больше задач имеет смысл считать локально: это быстрее, дешевле, приватнее и оставляет контроль на своей стороне.</p><p>Из того же наблюдения следует острый вывод, который Шнайер делает применительно к безопасности: раз возможности моделей широко доступны и во многом взаимозаменяемы, экспортные ограничения и закрытие доступа их не сдержат. Реальные риски он видит в другом: в концентрации корпоративной власти, в слабой целостности моделей и в плохо устроенных стимулах. Для инженера это переводится в практическое требование — проверять заявления поставщика и не полагаться на то, что выбор конкретного вендора сам по себе что-то гарантирует.</p><h2>Слой второй: страховка надёжности в конвейере</h2><p>Оговорка сразу: это уже не обвязка вокруг обращения к модели, а обвязка процесса поставки. Принцип тот же, объект другой: проверяется не ответ модели, а код, который агент написал и который вот-вот уедет в продакшен.</p><p>Код теперь пишется быстрее, и это меняет характер рисков, а не только их количество. Опечаток в сгенерированном коде стало меньше, зато прибавилось незапланированных зависимостей, расползания конфигурации и изменений инфраструктуры, сделанных агентом без нужного контекста.</p><p>Аналогия с гонками здесь уместнее обычного: на малой скорости из заноса выходят легко, на большой одна ошибка стоит несопоставимо дороже. Отсюда идея <a href="https://devops.com/why-reliability-guardrails-are-needed-in-every-ai-coding-pipeline/">автоматических проверок надёжности</a> Колтона Эндруса: замкнутых циклов, которые безопасно создают настоящие условия отказа, проверяют устойчивость, предлагают исправление и перепроверяют его после внесения.</p><h3>Почему чтения кода недостаточно</h3><p>Ранняя идея инженерии хаоса состояла в том, что перебрать все сочетания отказов юнит-тестами и интеграционными тестами невозможно. Прогон реалистичного отказа против живого сервиса проверяет много вещей разом и потому эффективнее.</p><p>Для сгенерированного кода это верно вдвойне. Статический анализ доводит до определённой черты, но не отвечает на главный вопрос: что произойдёт, когда отвалится кеш или вырастет задержка у зависимости. Правильное поведение здесь описывается заранее (скажем, при недоступности кеша сервис обязан уйти в основную базу), и проверка сводится к тому, соблюдает ли кандидат уже существующую политику.</p><h3>Пять ресурсов, с которых начинают</h3><p>Львиная доля сбоев упирается в одни и те же пять вещей: процессор, память, диск, ввод-вывод и сеть. Программы работают на компьютерах, а у компьютеров набор ресурсов один и тот же. Отсюда и минимальный набор автоматических проверок:</p><ul><li>Избыточность по зонам и узлам: что происходит при отказе целой зоны, отдельного хоста или контейнера.</li><li>Масштабирование по процессору: корректно ли настроено расширение при всплеске и сворачивается ли оно обратно после.</li><li>Масштабирование по памяти: то же самое, включая корректную деградацию, если расшириться не удалось.</li><li>Отказ зависимости: как ведёт себя приложение, когда до внешнего или внутреннего сервиса не достучаться.</li><li>Задержка зависимости: сервис доступен, но отвечает медленно. Приложение деградирует аккуратно, уходит к запасному источнику или просто падает.</li></ul><p>Ответы на эти вопросы у зрелой команды обычно уже записаны в виде политик. Проверки не изобретают новых требований, они лишь удостоверяют, что очередной кандидат на выкатку этим требованиям соответствует.</p><h3>Результат проверки возвращается агенту</h3><p>Ставится это всё в конце конвейера сборки, прямо перед продвижением версии. Провалилась проверка — код помечается и уходит обратно вместе с описанием теста и предложенным исправлением.</p><p>Дальше начинается самое интересное. Данные о том, какая проверка провалилась, что исправили и прошла ли она после этого, возвращаются в агентский рабочий процесс как контекст. Проверять всё равно нужно каждый раз, но новый код начинает проходить проверки чаще, чем проваливать. Тот же журнал полезен и при разборе инцидентов: понятно, какие режимы отказа уже проверялись, с какими результатами и что было исправлено.</p><h2>Слой третий: границы информации</h2><p>Третий слой обсуждают реже всего, а он становится критичным ровно в тот момент, когда система обзаводится постоянной памятью о пользователе.</p><p>Речь о контекстной целостности — принципе из теории приватности Хелен Ниссенбаум: какие сведения уместно раскрывать при выполнении конкретной задачи. Домашний адрес нужен для оформления доставки и совершенно неуместен при составлении рабочего письма коллеге. Человек проводит эту границу не задумываясь, у модели с сохранённой памятью её приходится обеспечивать отдельно.</p><h3>Что показали измерения</h3><p>Шнайер <a href="https://www.schneier.com/blog/archives/2026/08/llms-and-contextual-integrity.html">разбирает две работы на эту тему</a>. Первая описывает бенчмарк CIMemories: синтетические профили пользователей больше чем со ста атрибутами каждый и набор задач, в которых один и тот же атрибут для одних задач необходим, а для других неуместен.</p><p>Результаты неутешительные. <a href="https://www.schneier.com/blog/archives/2026/08/llms-and-contextual-integrity.html">Передовые модели показывают до 69% нарушений</a> на уровне отдельных атрибутов, то есть раскрывают их там, где раскрывать не следовало. Снижение доли нарушений при этом обычно достаётся ценой полезности: модель становится осторожнее и хуже решает задачу.</p><p>Ещё важнее динамика. Нарушения накапливаются и по числу задач, и по числу прогонов: при росте использования с одной задачи до сорока доля нарушений у GPT-5 поднимается с 0,1 до 9,6%, а при пятикратном исполнении одного и того же промпта достигает 25,1%. Последняя цифра особенно неприятна: она означает нестабильное поведение, когда на идентичный запрос модель раскрывает разные атрибуты.</p><h3>Почему просьба быть осторожнее не помогает</h3><p>Естественная реакция инженера — добавить в системный промпт указание бережно относиться к персональным данным. Измерения показывают, что это не работает: модели переобобщают и начинают выдавать либо всё, либо ничего, вместо того чтобы принимать решение с учётом контекста.</p><p>Вывод авторов прямой: проблема не решается ни лучшим промптингом, ни увеличением масштаба модели, потому что требуется собственно рассуждение о контексте, в котором система сейчас работает.</p><h3>Что действительно даёт эффект</h3><p>Вторая работа как раз про это. Авторы сначала просят модель явно рассуждать о том, какие сведения уместны для текущей задачи, а затем закрепляют это обучением с подкреплением. На синтетическом наборе всего из 700 примеров с разнообразными контекстами и нормами раскрытия им удалось заметно сократить неуместное раскрытие, не потеряв в качестве решения задач, причём для моделей разных размеров и семейств.</p><p>Ценнее всего то, что улучшение переносится: обучение шло на синтетике, а результат подтвердился на устоявшемся бенчмарке с человеческой разметкой, оценивающем утечки в действиях и вызовах инструментов. Практический смысл для тех, кто строит систему поверх готовой модели, тот же, что и на двух предыдущих слоях: контроль границ реализуется в обвязке, а не выпрашивается у модели формулировками.</p><h2>Что забрать с собой</h2><p>Три слоя выглядят разнородно, но подчиняются одному правилу: свойство, которое вам нужно от системы, обеспечивается кодом вокруг модели, а не выбором модели. Маршрутизация даёт цену и приватность инфраструктуры: данные не покидают периметр. Автоматические проверки отказов дают устойчивость. Явный контроль границ информации даёт приватность самих данных пользователя, независимо от того, где физически стоит модель.</p><p>Проверить это на своём проекте несложно: посмотрите, сколько времени команда потратила за квартал на сравнение моделей и сколько на то, что находится между пользователем и моделью. Если первое число заметно больше, вы, скорее всего, оптимизируете не тот слой.</p><p>Материалы разбора: <a href="https://www.schneier.com/news/archives/2026/07/why-an-ai-harness-may-matter-more-than-the-latest-model.html">интервью Шнайера об обвязке и локальных моделях</a>, <a href="https://devops.com/why-reliability-guardrails-are-needed-in-every-ai-coding-pipeline/">проверки надёжности в конвейере с ИИ-кодом</a> и <a href="https://www.schneier.com/blog/archives/2026/08/llms-and-contextual-integrity.html">обзор двух работ о контекстной целостности</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>TeamCity 2026.2 вывел Pipelines из EAP и открыл CI ИИ-агентам через MCP</title>
      <link>https://tproger.ru/news/teamcity-2026-2-vyvel-pipelines-iz-eap-i-otkryl-ci-ii-agentam-che</link>
      <comments>https://tproger.ru/news/teamcity-2026-2-vyvel-pipelines-iz-eap-i-otkryl-ci-ii-agentam-che?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/teamcity-2026-2-vyvel-pipelines-iz-eap-i-otkryl-ci-ii-agentam-che</guid>
      <description><![CDATA[<p>TeamCity 2026.2: YAML-пайплайны стали штатной функцией Cloud и On-Premises, агенты получили три MCP-инструмента, а AI Assistant принимает ключ Anthropic, OpenAI или Gemini.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/teamcity-2026-2-vyvel-pipelines-iz-eap-i-otkryl-ci-ii-agentam-che">TeamCity 2026.2 вывел Pipelines из EAP и открыл CI ИИ-агентам через MCP</a>»</p>]]></description>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[JetBrains]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Sep 2026 05:40:05 GMT</pubDate>
      <content:encoded><![CDATA[<p>JetBrains 2 сентября <a href="https://blog.jetbrains.com/teamcity/2026/09/teamcity-20262/">выпустила</a> TeamCity 2026.2. Главное в релизе: пайплайны, которые описываются YAML-файлом в репозитории и собираются в визуальном редакторе, вышли из программы раннего доступа и стали штатной функцией TeamCity Cloud и On-Premises для проектов любого размера. Вместе с этим сервер получил три MCP-инструмента для работы ИИ-агентов с пайплайнами, а встроенный AI Assistant научился работать с собственным ключом поддерживаемого провайдера: Anthropic, OpenAI, Google Gemini или совместимой с OpenAI локальной модели.</p><p>Для команд на TeamCity это означает, что пайплайны можно переводить из экспериментов в основные сборки, а тем, кто подключает к CI агентов вроде Junie или Claude Code, при подключении через OAuth больше не нужно выпускать персональный токен вручную: MCP-сервер TeamCity получил авторизацию OAuth с PKCE. Об этом сообщил в блоге JetBrains Дмитрий Коровин. Одновременно вышли исправления для двух предыдущих мажорных версий On-Premises: 2025.11.8 и 2026.1.4.</p><ul><li>Pipelines введены как EAP в TeamCity 2025.07; в 2026.2 они общедоступны в Cloud и On-Premises.</li><li>В пайплайнах появились выбор ветки в режиме редактирования, предупреждение о защищённых ветках, запуск job при упавшем upstream, кнопка Promote, отладка отдельной job и пайплайны без репозитория.</li><li>MCP получил teamcity_pipeline_get, teamcity_pipeline_post и teamcity_pipeline_delete; изменяющие инструменты работают только в Brave mode, который включается вручную.</li><li>AI Assistant поддерживает свой ключ (BYOK): Anthropic, OpenAI, Google Gemini и совместимые с OpenAI локальные модели; сам помощник требует лицензии Enterprise.</li><li>Kotlin DSL можно выполнять на билд-агентах, а не на сервере; плагин для IDE получил CLI и запуск сборок с незакоммиченными изменениями.</li></ul><h2>Что изменилось в пайплайнах</h2><p>Pipelines появились в TeamCity 2025.07 как функция раннего доступа: сразу в Cloud и по запросу в On-Premises. С тех пор, по словам JetBrains, команда закрывала разрыв с классическими build configurations: добавила поддержку build features, шаги для .NET и возможность связывать пайплайны в цепочки сборок. Релиз 2026.2 объявляет пайплайны общедоступными на обеих поставках. Разработка при этом продолжается, дальнейшие планы вынесены в дорожную карту продукта.</p><p>Если YAML пайплайна хранится в Git, теперь в режиме редактирования можно выбирать ветку репозитория и задавать для каждой ветки собственный сценарий. Для защищённых веток интерфейс предупреждает, что правки из UI напрямую не запушить, и предлагает сохранить их в другую ветку.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-09-03/e63d0f12-bec7-4b96-af7a-8b141b2f6bef.webp" alt="Выбор ветки в режиме редактирования пайплайна TeamCity" /><figcaption>Выбор ветки в режиме редактирования пайплайна. Скриншот: JetBrains</figcaption></figure><p>В зависимостях между job появился переключатель Run job even if upstream fails: пайплайн доходит до конца даже после ошибки, а сам прогон при этом остаётся помеченным как упавший. JetBrains приводит очевидный сценарий: шаги очистки и уведомлений, которые должны выполниться всегда.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-09-03/2d1f66f8-bed6-41c5-be74-601d5b50f802.webp" alt="Переключатель Run job even if upstream fails в настройках зависимости" /><figcaption>Настройка запуска job при упавшем upstream. Скриншот: JetBrains</figcaption></figure><p>Кнопка Promote, которая запускает нижнюю часть цепочки от уже завершённой сборки, теперь работает и для пайплайнов. Пример из анонса: успешный прогон Build Docker image можно продвинуть в конфигурацию Upload to DockerHub и повторно задеплоить артефакт без пересборки. Отдельную job теперь можно отлаживать, не выходя из режима редактирования и не запуская весь пайплайн: лог и терминал открываются внизу редактора.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-09-03/66cc9d49-fdb1-4dc8-9008-dc0e9b46bf7a.webp" alt="Отладка отдельной job в редакторе пайплайна TeamCity" /><figcaption>Отладка одной job без запуска всего пайплайна. Скриншот: JetBrains</figcaption></figure><p>Ещё одно изменение: пайплайн можно создать без привязанного VCS root, выбрав при создании вариант Without repository. Раньше сценарии, которые ничего не выкачивают из репозитория, были доступны только в build configurations.</p><h2>Как ИИ-агенты получают доступ к CI</h2><p>MCP-эндпоинт, через который агенты используют сервер TeamCity как источник инструментов, появился в версии 2026.1. В 2026.2 к нему добавлены три инструмента для пайплайнов: teamcity_pipeline_get, teamcity_pipeline_post и teamcity_pipeline_delete. Чтобы агент не удалил пайплайн случайно, post и delete доступны только в Brave mode, который включается вручную; по умолчанию агент может только читать.</p><p>Авторизация MCP переведена на OAuth с PKCE. Раньше для подключения агента приходилось выпускать personal access token и прописывать его в конфигурации ИИ-окружения; при OAuth-подключении это не нужно, а ручной токен остаётся способом выдать агенту ограниченные права, например только на чтение. Плагин для IntelliJ IDEA стал поставляться вместе с CLI TeamCity и регистрирует MCP-сервер сам, так что интеграция с Junie или сторонними агентами, по словам JetBrains, требует минимум ручной настройки.</p><p>AI Assistant, встроенный помощник для разбора сборок и отладки CI, поддерживает Bring Your Own Key: в разделе Admin | AI Assistant вводится ключ разработчика, после чего запросы уходят в Anthropic, OpenAI, Google Gemini или в совместимую с OpenAI модель, в том числе развёрнутую локально. По <a href="https://www.jetbrains.com/help/teamcity/ai-assistant.html">документации</a>, AI Assistant требует активной лицензии Enterprise, в том числе триальной, и недоступен на Professional; для команд, у которых нет доступа к провайдеру JetBrains AI, свой ключ это способ подключить ту модель, до которой доступ есть.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-09-03/5cd97b1e-5638-4483-b31f-38e59a37ee3c.webp" alt="Настройка AI Assistant в TeamCity с ключом Anthropic" /><figcaption>Выбор провайдера в настройках AI Assistant. Скриншот: JetBrains</figcaption></figure><h2>Что ещё вошло в релиз</h2><ul><li>Повтор упавшей зависимости на месте. На вкладке Dependencies в настройках build configuration появилась группа Retry Settings: при включённом Use custom retry settings и заданном числе попыток TeamCity задерживает нижнюю сборку и повторяет упавшую зависимость, не перезапуская всю цепочку.</li><li>Плагин для IDE показывает результаты тестов TeamCity прямо в IDE и умеет запускать удалённые сборки с локальными изменениями, которые ещё не закоммичены.</li><li>Разработчики на Kotlin Multiplatform, установившие плагин в IDEA или Android Studio, могут получить бесплатный тариф TeamCity Cloud с лимитом 30 000 build credits в месяц для автоматически сгенерированных пайплайнов, которые тестируют и собирают iOS-приложения; плагин также упрощает интеграцию с TestFlight.</li><li>Build feature Pull Requests для GitHub умеет сопоставлять pull request по исходной ветке, а не по ссылке на ветку: связанные PR в разных репозиториях с разными номерами собираются в одной цепочке.</li><li>Для проектов с настройками в Kotlin DSL в удалённом репозитории можно выбрать, где выполняется этот код: на сервере или на билд-агентах. Выполнение на агентах JetBrains называет менее ограниченным и более безопасным, но предупреждает, что у обоих вариантов есть компромиссы, описанные в документации.</li></ul><h2>Что делать команде на TeamCity</h2><ol><li>Если пайплайны использовались в EAP, снятие статуса раннего доступа означает, что их можно переводить на основные сборки; полный список изменений JetBrains держит в разделе <a href="https://www.jetbrains.com/help/teamcity/what-s-new-in-teamcity.html">What's New</a> документации.</li><li>Тем, кто остаётся на предыдущих мажорных версиях On-Premises, вышли обновления 2025.11.8 и 2026.1.4 с исправлениями ошибок.</li><li>Перед тем как дать агенту право менять пайплайны, оценить, нужен ли Brave mode: по умолчанию изменяющие MCP-инструменты выключены.</li><li>Если в проекте Kotlin DSL из удалённого репозитория, свериться с документацией по режимам компиляции до переключения на агенты.</li></ol><p>Цены и условия лицензирования в анонсе не упоминаются. Релиз выходит через несколько дней после того, как JetBrains <a href="https://tproger.ru/news/jetbrains-raskryla-detali-vzloma-cadence-nepropatchennyj-teamcit">раскрыла детали взлома</a> своего сервиса Cadence через непропатченный TeamCity, и на следующий день после <a href="https://tproger.ru/news/teamcity-poluchil-oidc-plagin-oblachnye-klyuchi-v-ci-zamenyayut-korot">выхода OIDC-плагина</a>, который заменяет долгоживущие облачные ключи в CI короткими токенами. Следующий ориентир для пайплайнов, по словам компании, задаёт дорожная карта TeamCity.</p><p>Источники: <a href="https://blog.jetbrains.com/teamcity/2026/09/teamcity-20262/">TeamCity 2026.2: Pipelines General Availability, BYOK for AI Assistant, and More (блог JetBrains)</a>, <a href="https://www.jetbrains.com/help/teamcity/what-s-new-in-teamcity.html">What's New in TeamCity (документация)</a></p><p>Изображение на обложке: Логотип: JetBrains</p>]]></content:encoded>
    </item>
    <item>
      <title>TeamCity получил OIDC-плагин: облачные ключи в CI заменяют короткие JWT</title>
      <link>https://tproger.ru/news/teamcity-poluchil-oidc-plagin-oblachnye-klyuchi-v-ci-zamenyayut-korot</link>
      <comments>https://tproger.ru/news/teamcity-poluchil-oidc-plagin-oblachnye-klyuchi-v-ci-zamenyayut-korot?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/teamcity-poluchil-oidc-plagin-oblachnye-klyuchi-v-ci-zamenyayut-korot</guid>
      <description><![CDATA[<p>JetBrains выпустила плагин, который делает TeamCity провайдером OIDC: сборки получают короткоживущие подписанные JWT вместо постоянных ключей AWS, GCP, Azure и Oracle Cloud. Требования, настройка, сроки жизни токенов, подводные камни ротации ключей.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/teamcity-poluchil-oidc-plagin-oblachnye-klyuchi-v-ci-zamenyayut-korot">TeamCity получил OIDC-плагин: облачные ключи в CI заменяют короткие JWT</a>»</p>]]></description>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[JetBrains]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 02 Sep 2026 01:35:23 GMT</pubDate>
      <content:encoded><![CDATA[<p>JetBrains 1 сентября <a href="https://blog.jetbrains.com/teamcity/2026/09/authenticating-teamcity-builds-with-oidc/">представила</a> TeamCity OIDC JWT Plugin: с ним сервер TeamCity становится провайдером идентификации и выдаёт каждой сборке подписанный короткоживущий JWT вместо постоянных ключей доступа к облаку. Для команд, у которых в переменных CI лежат AWS-ключи с бессрочным сроком действия, это способ убрать их совсем, как это давно умеют GitHub Actions и GitLab CI.</p><p>Повод для новости у JetBrains не самый удобный: в августе компания <a href="https://tproger.ru/news/jetbrains-raskryla-detali-vzloma-cadence-nepropatchennyj-teamcit">разбирала</a> взлом собственного сервиса Cadence через непропатченный TeamCity, где утекли в том числе облачные учётные данные. Автор публикации Игорь Бровцин формулирует проблему прямо: «статические учётные данные в средах CI/CD остаются значительным источником рисков безопасности и операционных издержек» (перевод редакции).</p><ul><li>Плагин делает TeamCity OIDC-провайдером: сборка получает JWT с issuer, audience и подписью, а облако проверяет его через JWKS.</li><li>Поддержаны AWS IAM, GCP Workload Identity Federation, Azure Entra ID, Oracle Cloud и Kubernetes 1.34 и новее.</li><li>Требуются TeamCity 2025.11.1 и новее и Java 17; алгоритмы RS256/384/512, PS256/384/512, ES256/384/512.</li><li>Токен выдаётся при старте сборки (действует до таймаута сборки плюс 10 минут) или по запросу через HTTP (5 минут, не настраивается).</li><li>Ротация ключа по умолчанию не отзывает уже выданные токены; для немедленной инвалидации нужно очистить JWK cache.</li></ul><h2>Как устроена цепочка доверия</h2><p>Схема стандартная для OIDC-федерации. TeamCity публикует документ .well-known/openid-configuration и набор публичных ключей JWKS. В облаке администратор регистрирует TeamCity как доверенного провайдера с конкретным issuer и audience. Сборка получает JWT, подписанный приватным ключом сервера, предъявляет его облаку, а то проверяет подпись по JWKS и обменивает токен на временные учётные данные с нужной ролью. Ключей в CI-конфигурации нет вообще: есть только правило «сборкам проекта X с такими claims можно роль Y».</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-09-02/1fd2bda9-e69c-4ca5-a24f-85a11ec1dc0a.webp" alt="Схема обмена: сборка TeamCity получает JWT, облачный провайдер проверяет его по JWKS и выдаёт временные учётные данные" /><figcaption>Поток OIDC-аутентификации между TeamCity и облачным провайдером. Источник: JetBrains</figcaption></figure><p>Есть два режима выдачи. Токен, выданный при старте сборки, действует до таймаута сборки плюс 10 минут. Токен, запрошенный по HTTP во время сборки, живёт, по README, «всегда 5 минут и не может быть изменён»: для длинных шагов его нужно запрашивать заново.</p><h2>Требования и настройка</h2><ul><li>TeamCity 2025.11.1 и новее, Java 17.</li><li>Алгоритмы подписи RSA (RS256, RS384, RS512, PS256, PS384, PS512) с ключом 2048, 3072 или 4096 бит и ECDSA (ES256, ES384, ES512).</li><li>Конфигурация в разделе Administration, Integrations, OIDC Tokens; в сборке добавляется build feature.</li><li>Для сервера, недоступного из интернета, OIDC-документы и JWKS можно вынести на публичный HTTPS-хост: облаку нужен доступ только к ним, а не к самому TeamCity.</li></ul><p>Последний пункт важен для российских установок: облачные провайдеры должны скачать JWKS по HTTPS, и если TeamCity живёт в закрытом контуре, плагин позволяет опубликовать только ключи. Кроме перечисленных облаков токен примет любой сервис, умеющий проверять JWT по JWKS; про другие провайдеры JetBrains не пишет, и их совместимость придётся проверять самостоятельно.</p><h2>Подводный камень ротации ключей</h2><p>README оговаривает: ротация ключа подписи по умолчанию не отзывает уже выданные токены. Старый публичный ключ остаётся в JWKS, пока не очищен JWK cache, поэтому при компрометации сервера нужно не только сменить ключ, но и явно сбросить кэш, а на стороне облака дождаться обновления JWKS. При коротком сроке жизни токенов окно риска небольшое, но оно есть.</p><p>Плагин не исправление уязвимости, а новый компонент: его установка меняет модель доступа, и уже работающие интеграции на статических ключах стоит переводить по одной, с откатом наготове.</p><h2>Что делать сегодня</h2><ol><li>Провести ревизию: где в TeamCity лежат постоянные облачные ключи и какие у них права.</li><li>Обновить сервер до 2025.11.1 и новее, поставить плагин из репозитория JetBrains на GitHub.</li><li>Настроить в облаке доверие к issuer TeamCity с узким условием по audience и claims проекта.</li><li>Перевести одну некритичную сборку, убедиться, что она получает временные учётные данные, затем удалить её статический ключ.</li><li>Записать процедуру ротации с очисткой JWK cache в runbook инцидентов.</li></ol><p>Плагин открыт и лежит в <a href="https://github.com/JetBrains/teamcity-oidc-jwt/blob/main/README.md">репозитории JetBrains</a>. Редакция проверит, войдёт ли он в стандартную поставку TeamCity и появится ли настраиваемый срок жизни HTTP-токена.</p><p>Источники: <a href="https://blog.jetbrains.com/teamcity/2026/09/authenticating-teamcity-builds-with-oidc/">Блог JetBrains: Authenticating TeamCity builds with OIDC</a>, <a href="https://github.com/JetBrains/teamcity-oidc-jwt/blob/main/README.md">README плагина teamcity-oidc-jwt</a></p><p>Изображение на обложке: JetBrains</p>]]></content:encoded>
    </item>
    <item>
      <title>Безопасный вайбкодинг: от автопилота к пилоту</title>
      <link>https://tproger.ru/articles/bezopasnyj-vajbkoding-ot-avtopilota-k-pilotu</link>
      <comments>https://tproger.ru/articles/bezopasnyj-vajbkoding-ot-avtopilota-k-pilotu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bezopasnyj-vajbkoding-ot-avtopilota-k-pilotu</guid>
      <description><![CDATA[<p>Как сделать вайбкодинг безопасным: почему AI-агенты в разработке требуют принципов авиационной безопасности, что такое вайблёрнинг и как сохранить контроль над кодом, CI/CD и архитектурой.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bezopasnyj-vajbkoding-ot-avtopilota-k-pilotu">Безопасный вайбкодинг: от автопилота к пилоту</a>»</p>]]></description>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 30 Apr 2026 04:25:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>Почему AI-агенты, пишущие код, требуют тех же принципов безопасности, что и автопилоты в авиации. И почему «вайблёрнинг» – это не опция, а необходимость.</p><p>Представьте, что вы руководитель разработки в финтехе. Ваша команда внедряет систему противодействия отмыванию денег FinCrime. Требования жёсткие: каждая транзакция проходит через цепочку правил, доля ложных срабатываний должна быть ниже 2%, а пропуск подозрительной транзакции это штраф регулятора и уголовное дело.</p><p>Сценарий дальше собирательный, не история конкретного банка и не про нас. Но паттерн воспроизводится везде, где код генерируется быстрее, чем его успевают осмыслить.</p><p>Разработчик использует AI-агент для генерации модуля скоринга. Агент пишет 400 строк кода за 15 минут. Код выглядит правильно. Тесты проходят. Разработчик не вникает в логику. Через три месяца аудит обнаруживает, что модуль скоринга содержит состояние гонки при параллельной обработке транзакций. При высокой нагрузке две транзакции от одного клиента обрабатываются одновременно, и вторая не видит результат первой. Суммарный оборот клиента занижается. Подозрительные паттерны не детектируются.</p><p>Что пошло не так? Агент написал код, который выглядел правильным. Но никто не понял этот код: разработчик не разобрался в модели параллелизма, ревью провёл другой агент с теми же слепыми зонами. CI проверил синтаксис и покрытие, но не бизнес-логику. А тестировщики и безопасники? Классический QA ловит то, что ловил всегда: синтаксис, покрытие, регрессии на happy-path. Race condition под нагрузкой не виден unit-тестами, его ловит либо специальный concurrent-сценарий, либо инженер, который понимает модель параллелизма и видит дефект при ревью. Раньше это закрывалось побочно: автор кода вынужден был держать модель выполнения в голове. Агент этот побочный продукт не производит.</p><p>Этот паттерн повторяется каждый раз, когда скорость генерации кода обгоняет скорость понимания.</p><h2>Kaggle и иллюзия продуктивности</h2><p>Другой пример – из мира ML-соревнований. На Kaggle появились «агентные» подходы к решению задач: участник запускает Claude или GPT в цикле, агент генерирует модели, обучает, отправляет решение, анализирует таблицу лидеров, генерирует следующую итерацию.</p><p>Проект KaggleClaw показал характерный паттерн: агент, оставленный без контроля, совершает <b>бесполезные повторные циклы.</b> Он не строит архитектуру решения – он перебирает вариации. Увеличить скорость обучения. Уменьшить скорость обучения. Добавить слой. Убрать слой. Каждая итерация потребляет вычислительные ресурсы, но не приближает к пониманию задачи.</p><p>Участник, который не вникает в данные и не строит ментальную модель задачи, <b>проигрывает</b> участнику, который потратил время на разведочный анализ данных вручную и понял структуру, и только потом подключил агента для ускорения проверенных гипотез.</p><p><b>Паттерн один и тот же:</b> агент ускоряет выполнение, но не заменяет понимание. Без понимания скорость превращается в дорогостоящее блуждание.</p><h2>Сформулируем проблему</h2><p>Вайбкодинг — парадигма разработки, при которой AI-агент пишет код по описанию на естественном языке: разработчик формулирует намерение, а агент реализует.</p><p><b>Но возникает фундаментальный риск:</b> чем больше кода пишет агент, тем меньше разработчик понимает кодовую базу. Возникает разрыв между ответственностью (человек отвечает за production) и компетенцией (агент писал код, человек его не понимает).</p><p>Например, в ходе усиления безопасности пет-проекта (FastAPI + React + Kubernetes) мы наблюдали этот разрыв в действии:</p><p>•   AI‑агент добавил 21 задачу в CI/CD‑пайплайн, но 8 из них оказались бесполезными — они лишь создавали видимость усиленной безопасности, не принося реальной пользы.</p><p>•   Агент трижды сломал CI нерабочими командами, каждый раз будучи уверенным в корректности.</p><p>•   Но ни разу не сказал «я не уверен» – даже когда использовал несуществующий API.</p><p>•   Пять параллельных агентов-ревьюеров не поймали ошибки друг друга, потому что у них слепые зоны одинаковы.</p><p>Это не проблема конкретного агента, а системная проблема парадигмы. «Вайбкодинг» превращает разработчика из архитектора в <b>оператора,</b> который вынужден верить на слово системе, превосходящей его в скорости, но уступающей в осознанности.</p><p>Может показаться, что перед нами новая нерешаемая проблема. Но…</p><h2>Авиация уже решала эту задачу</h2><p>Авиационная индустрия потратила 40 лет на решение точно такой же проблемы: как внедрить автоматизацию, не потеряв навыки операторов и не создав новые категории катастроф?</p><p>Ответы, найденные ценой человеческих жизней, напрямую применимы к вайбкодингу.</p><h2>Потеря навыков при автоматизации</h2><p><b>3 июня 2009 года.</b> Рейс Air France 447, Airbus A330, Атлантический океан. Самолёт входит в зону турбулентности. Трубки Пито (датчики скорости) обледеневают и дают противоречивые показания. Автопилот отключается — он не может работать без достоверных данных о скорости.</p><p>Пилоты растеряны. Они привыкли, что автопилот ведёт самолёт. За три с половиной минуты они не смогли диагностировать ситуацию и самолёт упал в океан. 228 человек погибли.</p><p><a href="https://bea.aero/en/investigation-reports/notified-events/detail/accident-to-the-airbus-a330-203-registered-f-gzcp-and-operated-by-air-france-occured-on-06-01-2009-in-the-atlantic-ocean">Расследование BEA</a> установило: <b>пилоты утратили навыки ручного пилотирования из-за чрезмерной зависимости от автоматизации.</b> Они не практиковали ручной полёт, потому что автопилот «и так справлялся».</p><p>В вайбкодинге это выглядит аналогично: разработчик привыкает, что агент пишет код, а когда в production возникает баг, который агент не может диагностировать (так как не помнит контекст предыдущих сессий), то разработчик не может найти проблему, потому что никогда и не понимал этот код…</p><p>После катастрофы AF447 авиакомпании ввели обязательные ручные полёты («hand-flying»). Это регулярные полеты, во время которых пилот самостоятельно контролирует траекторию полета, скорость и положение самолета в пространстве с помощью штурвала, педалей и рычагов <b>без автопилота,</b> чтобы не терять навыки.</p><p>Для вайбкодинга ручные полёты — это <b>вайблёрнинг:</b> регулярное чтение и понимание кода, сгенерированного агентом. Не для поиска багов, а для поддержания компетенции.</p><h2>Как экипаж научился говорить о проблемах</h2><p><b>28 декабря 1978 года.</b> <a href="https://www.ntsb.gov/investigations/AccidentReports/Reports/AAR7907.pdf">Рейс United Airlines 173, DC-8</a>, Портленд. У самолёта не выпускается шасси. Капитан зацикливается на этой проблеме, игнорируя показания топлива. Бортинженер дважды говорит «у нас заканчивается топливо» – капитан не реагирует. Самолёт падает в 10 км от аэропорта. Погибли 10 человек. Топливо закончилось.</p><p>После этой катастрофы NASA разработала CRM (Crew Resource Management) – методологию взаимодействия экипажа, при которой любой член обязан озвучивать сомнения, а командир обязан их слышать.</p><p>В вайбкодинге агент никогда не скажет «я не уверен», ведь у него нет сомнений — он всегда выдаёт ответ с одинаковой уверенностью, будь это проверенный паттерн или галлюцинация. Роль бортинженера, который сигнализирует о проблеме, должен брать на себя <b>человек</b> или <b>автоматизированные проверки в CI.</b></p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-04-29/d30473cb-7cf1-453a-829e-9908f72a253b.webp" alt="" /></figure><h2>Защитные ограничения и CI/CD</h2><p>Современные самолёты Airbus (A320 и новее) имеют систему защиты режима полёта – она не позволяет пилоту выйти за безопасные параметры. Даже если пилот полностью берёт управление на себя – самолёт не позволит превысить критический угол атаки.</p><p>В вайбкодинге CI/CD-пайплайн —  это такая же система ограничений для кода.</p><p>Уровни 1–5 ловят технические ошибки. Уровень 0 – единственный, который ловит логические и бизнес-ошибки. <b>Без уровня 0 все остальные уровни — это автопилот без пилота.</b></p><h2>Режим концентрации при опасных изменениях</h2><p>В авиации существует правило «стерильной кабины» (FAR 121.542): ниже 10 000 футов запрещены любые разговоры и действия, не относящиеся к полёту. Взлёт и посадка — самые опасные фазы.</p><p>При изменениях, затрагивающих безопасность (аутентификация, валидация ввода, криптография, работа с секретами, инфраструктура), нужна такая же концентрация:</p><p>•   	Никаких «быстро добавим и потом разберёмся».</p><p>•   	Каждое изменение безопасности проходит полный цикл: реализация – локальное тестирование – ревью – проверка.</p><p>•   	Агент объясняет каждое решение, разработчик подтверждает понимание.</p><h2>Чеклист перед коммитом</h2><p>Предполётный чек-лист — обязательная процедура. И даже пилот с 30 000 часами налёта не пропускает чек-лист. Но не потому что не помнит, а потому, что человеческая память ненадёжна, а цена ошибки слишком высока.</p><p>В вайбкодинге перед каждым коммитом нужен такой же обязательный цикл:</p><h2>Блокирующие проверки в CI</h2><p>В авиации существует TCAS (Traffic Collision Avoidance System) — система предупреждения столкновений. Это «последний рубеж» защиты в авиации. Если диспетчеры на земле и пилоты в небе что-то упустили и два самолета сближаются, именно эта система предотвращает катастрофу — даёт команду «набирай высоту» или «снижайся». Пилот <b>обязан</b> подчиниться, даже если диспетчер говорит иное. TCAS имеет абсолютный приоритет.</p><p>Если пилот не слушает TCAS, то случаются катастрофы. <a href="https://en.wikipedia.org/wiki/2002_%C3%9Cberlingen_mid-air_collision">1 июля 2002 года над Юберлингеном столкнулись</a> Boeing 757 и Ту-154. TCAS дал Boeing команду снижаться, а Ту-154 набирать высоту. Но диспетчер, не знавший, какие указания выдал TCAS, велел Ту-154 снижаться. Пилот послушал диспетчера вместо системы. Оба самолёта пошли вниз и столкнулись. 71 человек погиб.</p><p>Проверки безопасности в CI работают по тому же принципу:</p><p>Если задача в CI не блокирует деплой — она бесполезна. Как система предупреждения, которая «рекомендует, но не настаивает».</p><h2>Git как бортовой самописец</h2><p>Чёрные ящики записывают каждое действие пилота, каждый параметр полёта, каждое слово в кабине, а после инцидента проводится полная реконструкция событий для выявления причин аварии.</p><p>В вайбкодинге git-история и логи CI — это такие же чёрные ящики. Сообщения к коммитам должны фиксировать не только «что изменилось», но «почему» и «какие альтернативы были отвергнуты». Модель угроз — это задокументированные решения о принятых рисках.</p><h2>Регулярные тренировки без автопилота</h2><p>Пилоты проходят тренировки каждые шесть месяцев – включая отработку аварийных ситуаций в симуляторе. Даже если за 20 лет ни разу не было отказа двигателя – пилот регулярно тренируется на этот сценарий.</p><p>Вайблёрнинг — это такие же регулярные тренировки для разработчика:</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-04-29/1d975256-4c20-41df-8388-40985e344105.webp" alt="" /></figure><h2>Вайблёрнинг: определение</h2><p>Вайблёрнинг — парадигма, при которой процесс разработки с AI-агентом одновременно является процессом обучения разработчика. Агент не просто делает — он объясняет. Разработчик не просто принимает — он понимает.</p><h2>Как это выглядит на практике</h2><p><b>Без вайблёрнинга:</b></p><p><b>С вайблёрнингом:</b></p><p>Разница: во втором случае разработчик <b>узнал</b> про проблему обратного прокси. В следующем проекте он спросит про это сам, даже без агента.</p><h2>Ошибки агента — это учебный материал</h2><p>Когда агент ломает CI нерабочей командой, то это не провал, а урок:</p><p>За одну сессию разработки проекта, который упоминался ранее, мы зафиксировали 8 таких ошибок. Каждая – урок, каждая – правило в чеклисте.</p><h2>Модель зрелости</h2><h2>Уровень 0: Слепой вайбкодинг</h2><p>Агент пишет, разработчик принимает, деплой. Максимальный риск. Как автопилот без пилота.</p><h2>Уровень 1: Вайбкодинг с проверками CI</h2><p>Агент пишет, CI проверяет, деплой при зелёных проверках. Технические ошибки ловятся. Логические – нет.</p><h2>Уровень 2: Вайбкодинг с ревью</h2><p>Агент пишет и объясняет, агент-ревьюер проверяет, разработчик подтверждает. Лучше, но агент-ревьюер – это эхо-камера с теми же слепыми зонами.</p><h2>Уровень 3: Вайблёрнинг</h2><p>Агент пишет, объясняет, учит; CI-проверки; человеческое ревью; разработчик может объяснить каждую строку. Минимальный риск. Разработчик растёт в компетенции.</p><h2>Заключение</h2><p>Дискуссия об AI в разработке часто сводится к двум полюсам: «AI заменит разработчиков» или «AI бесполезен». Оба ошибочны.</p><p>Авиация нашла ответ 40 лет назад: автопилот не заменяет пилота и не бесполезен. Автопилот <b>усиливает</b> пилота: берёт рутину, снижает нагрузку, повышает точность. Но пилот остаётся: он понимает систему, следит за автопилотом, принимает решения и готов взять управление.</p><p>Вайбкодинг — это автопилот для разработки. Он мощный, полезный, но опасный без пилота.</p><p><b>Вайблёрнинг</b> — это методология, при которой пилот не теряет навыки из-за автопилота, а наоборот — наращивает их. Агент объясняет, разработчик учится. Ошибки агента становятся учебным материалом. Чеклисты превращают хаос в процесс. Проверки безопасности не позволяют ошибкам дойти до production.</p><p>Формула:</p><p>Цель – не отказ от агентов и не слепая вера в них. Цель – процесс, при котором каждый участник (человек, агент, CI) делает то, что умеет лучше всего. Как в хорошем авиационном экипаже: пилот и автопилот работают вместе, каждый усиливая другого.</p>]]></content:encoded>
    </item>
    <item>
      <title>Передача кода на аутсорс: роадмап для техлида в 2026</title>
      <link>https://tproger.ru/articles/peredacha-koda-na-autsors-roadmap-dlya-tehlida-v-2026</link>
      <comments>https://tproger.ru/articles/peredacha-koda-na-autsors-roadmap-dlya-tehlida-v-2026?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/peredacha-koda-na-autsors-roadmap-dlya-tehlida-v-2026</guid>
      <description><![CDATA[<p>Как техлиду передать код на аутсорс и не потерять контроль: транзитный период, CI/CD, доступы, архитектура и оффбординг команды.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/peredacha-koda-na-autsors-roadmap-dlya-tehlida-v-2026">Передача кода на аутсорс: роадмап для техлида в 2026</a>»</p>]]></description>
      <category><![CDATA[Управление проектами]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 24 Apr 2026 10:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Представьте, что вы нанимаете внешнюю команду разработчиков: бюджет выделен, договоры подписаны, вендор выбран. Вы выдаёте им учётки, кидаете ссылку на репозиторий, ждёте первых пулл-реквестов и… оказываетесь в зоне, где никто не понимает, кто за что отвечает, а разработку сложно контролировать.</p><p>Это будни рынка аутсорса, где старт нового контракта часто похож на русскую рулетку. Потому что есть один нюанс — передача проекта обычно воспринимается бизнесом просто как смена исполнителя, а не как отдельный инженерно-управленческий процесс.</p><h2>Этап 1: Транзитный период и базовая инфраструктура</h2><p>В нормальном мире у любого подключения внешней команды должен быть transition period (период перехода). Это полноценный проект со своими сроками, бюджетом, приоритетами и конечной целью. Технари это понимают, а вот бизнес не всегда. Руководство долгое время может считать, что выстраивать процессы онбординга — это пустая трата времени. А правда — в том, что без выстроенного транзитного периода никто системно не работает. Точнее, проект как-то едет, но исключительно на тимлидах с обеих сторон, компенсируя отсутствие внятной инженерной инфраструктуры постоянными созвонами.</p><p>Переход — это процесс, в финале которого внешняя команда зеркально встроена в ваши внутренние циклы разработки. По-хорошему, всё начинается с фиксации сроков и объёма передаваемого технического контекста. Затем со стороны заказчика выделяется человек с реальными полномочиями, который способен принимать решения в моменте, а не согласовывать выдачу VPN-сертификата три недели.</p><p>Следом настраивается инфраструктура. Все процессы, которые применяются к штатным сотрудникам — парольные политики, доступы к средам, пайплайны, правила написания тестов и документации, — должны абсолютно в таком же формате распространяться на внешнюю команду. Внешние разработчики должны восприниматься как часть единой команды.</p><h2>Этап 2: Внешняя команда входит в тот же инженерный контур</h2><p>Команду подрядчика часто подключают к проекту как внешний слой, который должен что-то быстро сделать и не мешать инхаусу. На практике экспертиза оседает снаружи, решения не фиксируются, а кодовая база делится на две части: свою и ту, куда без автора со стороны вендора лучше не заходить.</p><p>Рабочая схема выстраивается иначе:</p><ol><li>Единые инженерные процессы. Внешняя команда коммитит в общий Git, пишет документацию и покрывает изменения тестами ровно по тем же правилам, что и внутренние разработчики.</li><li>Общая организационная гигиена. Требования к безопасности, парольной политике, VPN-доступам и внутренним регламентам применяются к внешним разработчикам в таком же формате.</li><li>Сохранение контекста. Знания и архитектурные решения фиксируются в едином репозитории, чтобы проект не терял экспертизу после завершения контракта.</li></ol><p>То есть создается один и тот же рабочий контур для всех участников разработки.</p><h2>Этап 3: Синхронизация и работа со сбоями</h2><p>Когда доступы выданы, а внешняя команда начала коммитить в ваш репозиторий, наступает фаза проверки реальностью. Практика рынка показывает, что передача проекта почти никогда не идёт строго по первоначальному плану, но это уже их личное.</p><p>В этот момент проект вытягивает не усложнение регламентов, а базовая управленческая рутина:</p><ul><li>Валидация артефактов на входе. Если инхаус отгрузил доступы, дампы баз или документацию, внешняя команда проверяет их в течение первых суток. Задача — просто убедиться, что всё открывается и данных достаточно для старта. Оставить архивы без проверки — значит через неделю узнать, что разработка стоит из-за битых ссылок.</li><li>Короткие еженедельные статусы. Даже если таски в трекере исправно двигаются по доске, команды выделяют 15 минут в неделю на голосовую сверку. Это нужно для калибровки: одинаково ли заказчик и вендор понимают текущий план и нет ли скрытых блокеров.</li><li>Пересборка приоритетов. Когда происходит сбой (не готово нужное API, зависли права к смежной системе), команды не ищут виноватых, а принимают управленческое решение: что делаем прямо сейчас, чтобы выдержать основной дедлайн, а что осознанно откладываем на потом.</li></ul><p>Если пустить эту рутину на самотёк, транзитный период теряет чёткие границы. Он превращается в бесконечный фоновый процесс, который начинает тормозить основные продуктовые релизы.</p><h2>Этап 4: Фиксация завершения и обратный переход</h2><p>Типовая проблема аутсорса — передача проекта формально начинается, но технически никогда не заканчивается. Команда подрядчика уже пишет фичи, таски закрываются в спринтах, а фаза онбординга продолжает тянуться как бесконечный промежуточный режим с временными регламентами и обходными путями в инфраструктуре.</p><p>Нормальный финал перехода фиксируется явной границей. К этой точке команды собирают технический срез: что из инфраструктуры передано, какие пайплайны настроены, какие риски остались и что из документации не успели обновить. Эта черта проводится для того, чтобы перевести все незакрытые вопросы из статуса «проблемы перехода» в обычный продуктовый бэклог. С этого момента транзитный период закрыт.</p><p>Точно так же, как инженерная задача, управляется и обратный процесс — offboarding. Когда кодовую базу забирают обратно инхаус или передают другому вендору, отсутствие контрольных точек превращает передачу в свалку архивов. Часть функционала и контекста просто теряется между исполнителями. Аккуратная выгрузка инфраструктуры, логов и документации гарантирует, что проект не рассыплется на следующий день после отзыва VPN-сертификатов у старой команды.</p><h2>Что дальше</h2><p>После закрытия transition period вы получаете не изолированных наемников, а масштабируемое расширение собственного штата. Внешние инженеры пушат в ваш репозиторий, CI/CD автоматически гоняет тесты по вашим правилам, а архитектурные решения (ADR) остаются внутри корпоративной базы знаний. Проект переходит в фазу штатной продуктовой поставки, где полный контроль над исходниками и релизами принадлежит заказчику.</p><p>Масштабирование разработки работает, когда вендор понимает границы своей ответственности. Проекты, которые принимает или передает Centicore Group, закрывают транзитный период техническим срезом: что из инфраструктуры передано, какие пайплайны развернуты и где зафиксирован технический долг. В результате заказчик сохраняет полный контроль над исходниками и архитектурой (ADR), а внешние разработчики просто выдают прогнозируемый объем задач в рамках общих спринтов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Взлом Bitwarden CLI на npm: 1,5 часа кражи токенов и SSH-ключей</title>
      <link>https://tproger.ru/news/bitwarden-cli-na-npm-podmenili-na-1-5-chasa-versiya-2026-4-0-kra</link>
      <comments>https://tproger.ru/news/bitwarden-cli-na-npm-podmenili-na-1-5-chasa-versiya-2026-4-0-kra?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/bitwarden-cli-na-npm-podmenili-na-1-5-chasa-versiya-2026-4-0-kra</guid>
      <description><![CDATA[<p>Bitwarden CLI 2026.4.0 на npm 22 апреля около 1,5 часа содержал малварь, крадущую GitHub/npm-токены, SSH-ключи и конфиги ИИ-ассистентов. Что делать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/bitwarden-cli-na-npm-podmenili-na-1-5-chasa-versiya-2026-4-0-kra">Взлом Bitwarden CLI на npm: 1,5 часа кражи токенов и SSH-ключей</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Хакеры]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 24 Apr 2026 08:30:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Подменили @bitwarden/cli в npm на 1 час 33 минуты — за это окно <a href="https://www.bleepingcomputer.com/news/security/bitwarden-cli-npm-package-compromised-to-steal-developer-credentials/">успевали воровать</a> GitHub/npm-токены, SSH-ключи и конфиги ИИ-ассистентов Claude, Kiro, Cursor, Codex CLI и Aider у всех, кто зашёл поставить пакет. Окно атаки — с 17:57 до 19:30 по времени Нью-Йорка 22 апреля (с 00:57 до 02:30 МСК 23 апреля). Vault-пароли самого менеджера Bitwarden не трогали — взломали только npm-канал доставки CLI. Если ставили версию 2026.4.0 — считайте ключи с этой машины скомпрометированными и ротируйте их прямо сейчас.</p><ul><li>Скомпрометирована одна npm-версия @bitwarden/cli@2026.4.0. Окно атаки — 1 час 33 минуты 22 апреля 2026 года.</li><li>Vault-данные пользователей Bitwarden не затронуты. Пострадал только npm-канал доставки CLI и те, кто успел поставить эту сборку.</li><li>Вектор — скомпрометированный action checkmarx/ast-github-action, который Bitwarden подтягивал в свой CI. По словам исследователей, это первый зафиксированный взлом пакета через npm trusted publishing.</li><li>Малварь таргетит ИИ-ассистенты Claude, Cursor, Codex CLI, Aider и AWS-based Kiro — отдельный модуль собирает их конфиги и API-ключи.</li><li>Если ставили — ротируйте npm/GitHub-токены, SSH-ключи и облачные креденшлы AWS/Azure/GCP; проверьте CI/CD-пайплайны и публичные репозитории со строкой «Shai-Hulud» в имени.</li></ul><h2>Что случилось с пакетом</h2><p>По <a href="https://thehackernews.com/2026/04/bitwarden-cli-compromised-in-ongoing.html">данным The Hacker News</a>, в ночь с 22 на 23 апреля 2026 года в npm-реестре появилась версия @bitwarden/cli@2026.4.0 с дополнительным файлом bw1.js внутри. Сборка была доступна 1 час 33 минуты — с 17:57 до 19:30 по времени Нью-Йорка, — после чего её сняли с публикации. Первыми на неё обратили внимание исследователи Socket, JFrog и OX Security. JFrog <a href="https://x.com/jfrog/">описал поведение</a> как «кражу GitHub/npm-токенов, содержимого .ssh, .env, истории shell, секретов GitHub Actions и облачных провайдеров с выгрузкой на внешние домены и в виде коммитов в GitHub».</p><p>Bitwarden подтвердил инцидент и уточнил, что «расследование не обнаружило признаков доступа к данным пользовательских хранилищ и компрометации продакшн-систем». По словам компании, доступ нарушителя был отозван, вредоносный релиз помечен как deprecated, по версии 2026.4.0 заводится отдельный CVE. Пострадавшие — только те, кто успел скачать пакет в полуторачасовом окне и выполнил его установку.</p><h2>Как устроен троян</h2><p>Механика по отчёту <a href="https://socket.dev/blog">Socket</a> проста, но многоступенчата. В package.json зловредной версии добавлен preinstall-хук, который запускает скрипт bw_setup.js. Тот проверяет наличие Bun — альтернативного JS-рантайма — и, если его нет, скачивает. Затем Bun-ом запускается обфусцированный загрузчик bw1.js. Bun тащат с собой не случайно: на машине жертвы его, скорее всего, нет, а корпоративный EDR (антивирус нового поколения для рабочих станций и серверов) реагирует на неожиданный бинарник хуже, чем на стандартный npm-скрипт. Preinstall-хук при этом срабатывает ещё до того, как код пакета формально «установлен».</p><ul><li>npm- и GitHub-токены из локальных конфигов и переменных окружения;</li><li>приватные SSH-ключи из ~/.ssh;</li><li>содержимое .env-файлов и историю shell (.bash_history, .zsh_history);</li><li>секреты GitHub Actions из переменных окружения CI;</li><li>креденшлы облачных провайдеров — AWS, Azure, Google Cloud;</li><li>конфиги и API-ключи ИИ-ассистентов Claude, Cursor, Codex CLI, Aider и AWS-based Kiro.</li></ul><p>Собранные данные шифруются AES-256-GCM и выгружаются двумя каналами. Основной — POST на домен audit.checkmarx[.]cx (конкретно путь /v1/telemetry), который притворяется инфраструктурой Checkmarx. Резервный — малварь создаёт публичные GitHub-репозитории в аккаунте жертвы и кладёт туда зашифрованный payload. В названиях репозиториев встречается строка «Shai-Hulud: The Third Coming» — отсылка к прошлогодней одноимённой кампании в npm. OX Security подчёркивает, что такой тайник (по терминологии безопасников — dead-drop) через GitHub опасен отдельно: утёкшие секреты становятся доступны любому, кто ищет по публичным репозиториям, — а системы защиты почти не следят за исходящим трафиком в GitHub.</p><p>Поверх этого в бинарнике есть модуль-червь: с украденным npm-токеном малварь находит все пакеты, которые жертва имеет право публиковать, и вбрасывает в них тот же payload. <a href="https://www.endorlabs.com/blog">Endor Labs называет</a> его «CanisterSprawl» и считает один из самых полных npm supply chain-пейлоадов на сегодняшний день: шесть разных поверхностей для сбора секретов, OIDC- и cloud-кража, самораспространение через npm-публикации и отдельный модуль для ИИ-ассистентов.</p><h2>Отдельный удар по ИИ-ассистентам</h2><p>Отдельный модуль малвари специально ищет артефакты ИИ-кодеров — API-ключи OpenAI и Anthropic из конфигов Claude, Cursor и Codex CLI, токены Aider, настройки AWS-based Kiro. Endor Labs считает, что это один из первых публично задокументированных случаев, когда supply chain-атака отдельной веткой целится на «кошельки разработчиков у ИИ». Ключ к Anthropic или OpenAI — это не только деньги на балансе аккаунта жертвы, но и возможность с его помощью заставить ИИ-ассистента писать закладки в код при следующих авто-запросах.</p><h2>Почему малварь пропускает русскую локаль</h2><p>Малварь завершается без выполнения, если в системе выставлена русская локаль. Socket отмечает три возможных причины: отдельный оператор, использующий общую инфраструктуру, отколовшаяся группа с идеологическими мотивами или эволюция самой кампании. На практике для российских разработчиков это не даёт защиты: большинство dev-машин, серверов и CI-раннеров работают с англоязычной локалью по умолчанию (обычно en_US.UTF-8), поэтому пропуск по локали чаще всего не срабатывает.</p><h2>Что делать, если могли установить 2026.4.0</h2><ul><li>Сначала убедитесь, что пакет действительно попал в ваши машины и раннеры: прогрепайте package-lock.json, pnpm-lock.yaml и yarn.lock на @bitwarden/cli версии 2026.4.0, посмотрите логи npm-установок в ночь на 23 апреля МСК.</li><li>Ротируйте все токены с этих машин: npm-токены, GitHub PAT (включая fine-grained), SSH-ключи, AWS access/secret keys и STS-сессии, Azure SP, GCP service accounts.</li><li>Замените секреты в GitHub Actions и других CI-системах, где пакет мог запускаться, — включая secrets, variables и OIDC-конфигурации.</li><li>Пройдитесь по API-ключам ИИ-ассистентов (Anthropic, OpenAI, Cursor, Aider) и отзовите их в кабинетах провайдеров; сверьте биллинг на предмет аномальных трат.</li><li>Проверьте публичные репозитории в своём GitHub-аккаунте: ищите имена в формате &lt;слово&gt;-&lt;слово&gt;-&lt;3 цифры&gt; (например, fremen-muaddib-042) со строкой «Shai-Hulud» в README и удалите.</li><li>Откатитесь на безопасную версию CLI — 2026.3.x или актуальную стабильную, которую Bitwarden опубликовал после инцидента. Ставьте её через npm i @bitwarden/cli@&lt;версия&gt;, а не через latest или диапазон.</li></ul><h2>Связь с Checkmarx и первый взлом через npm trusted publishing</h2><p>Накануне, 21 апреля, Checkmarx раскрыла собственный инцидент — компрометацию KICS Docker-образов, GitHub-расширений и пакета checkmarx/ast-github-action, который используется во многих CI-пайплайнах. По данным Endor Labs, репозиторий Bitwarden подтягивал именно этот action, и через него злоумышленники получили доступ к npm-каналу. Socket приводит прямые пересечения: тот же домен audit.checkmarx[.]cx, тот же паттерн обфускации __decodeScrambled с seed-значением 0x3039 — технический отпечаток, указывающий на одних и тех же авторов, — плюс тот же приём «украсть → выгрузить в GitHub → распространиться дальше».</p><p>Исследователь <a href="https://x.com/AdnanTheKhan">Аднан Хан утверждает</a>, что это первый зафиксированный случай компрометации пакета, использующего npm trusted publishing — механизм OIDC-публикации, при котором GitHub Actions обменивается на короткоживущий npm-токен без долгоживущих секретов в CI. Его как раз продвигали в ответ на регулярные утечки npm-токенов у мейнтейнеров. На деле trusted publishing оказался не панацеей: если нарушитель получает доступ к GitHub Actions-воркфлоу с правом публиковать пакет, OIDC-токен ему выдаёт сам npm. Атрибуция у исследователей — группа TeamPCP, уже засветившаяся на <a href="https://tproger.ru/news/volna-supply-chain-atak-na-pypi--razbiraem-litellm--telnyx-i-tri">взломах LiteLLM и Trivy</a>. Аккаунт TeamPCP в X на момент выхода материала заблокирован.</p><h2>Выводы для npm-экосистемы и supply chain</h2><p>Случай укладывается в серию ударов по цепочке доставки последних двух недель: <a href="https://tproger.ru/news/volna-supply-chain-atak-na-pypi--razbiraem-litellm--telnyx-i-tri">Trivy и LiteLLM на PyPI</a>, <a href="https://tproger.ru/news/supply-chain-ataki-2026--axios--pypi-i-prompt-injection---chto-pr">Axios и PyPI</a>, теперь Checkmarx и Bitwarden. Характерная деталь — защитный слой не спасает: trusted publishing, OIDC и короткоживущие токены не помогают, если злоумышленник уже получил доступ к CI-воркфлоу. Практический вывод: pin-версии в лок-файлах, отдельный CI-аккаунт с минимальными правами, еженедельная ревизия CI-секретов и мониторинг собственного GitHub на появление незнакомых публичных репозиториев. Инвентаризация секретов, которые ходят через CI/CD, перестала быть теоретическим упражнением.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что такое CI/CD: непрерывная интеграция и доставка</title>
      <link>https://tproger.ru/articles/chto-takoe-ci-cd--nepreryvnaya-integraciya-i-dostavka</link>
      <comments>https://tproger.ru/articles/chto-takoe-ci-cd--nepreryvnaya-integraciya-i-dostavka?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-takoe-ci-cd--nepreryvnaya-integraciya-i-dostavka</guid>
      <description><![CDATA[<p>CI/CD — это практика автоматической сборки, тестирования и доставки кода. Разбираем, что такое CI и CD, как устроен пайплайн и с чего начать внедрение.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-takoe-ci-cd--nepreryvnaya-integraciya-i-dostavka">Что такое CI/CD: непрерывная интеграция и доставка</a>»</p>]]></description>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 29 Mar 2026 05:28:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>Каждый разработчик знает это ощущение: код на локальной машине работает идеально, но стоит выкатить его на сервер — что-то ломается. Или команда из пяти человек неделями не может смержить ветки, потому что конфликты накопились до неуправляемого состояния. Именно для решения этих проблем и появилась практика CI/CD — один из главных столпов современного DevOps.</p><p><b>CI/CD (Continuous Integration / Continuous Delivery)</b> — это набор практик и инструментов, которые автоматизируют сборку, тестирование и доставку программного обеспечения. CI — непрерывная интеграция — обеспечивает автоматическую проверку каждого изменения кода. CD — непрерывная доставка или развёртывание — автоматизирует передачу протестированного кода в production-среду или на стейджинг. Вместе они образуют конвейер (пайплайн), который сокращает время от написания кода до его появления у пользователей с нескольких недель до нескольких минут.</p><p>- CI (Continuous Integration) — автоматическая сборка и тестирование при каждом коммите в репозиторий
- CD бывает двух видов: Continuous Delivery (код готов к деплою вручную) и Continuous Deployment (деплой полностью автоматический)
- Пайплайн состоит из этапов: build → test → deploy
- По данным DORA Report, команды элитного уровня деплоятся в 208 раз чаще и восстанавливаются после сбоев в 2604 раза быстрее по сравнению с командами низкого уровня
- Популярные инструменты: GitHub Actions, GitLab CI/CD, Jenkins, CircleCI, TeamCity
- Внедрение CI/CD можно начать за один день — даже для небольшого проекта</p><h2>Что такое CI — Continuous Integration</h2><p><b>Continuous Integration (непрерывная интеграция)</b> — это практика, при которой разработчики регулярно (обычно несколько раз в день) сливают изменения в общую ветку репозитория. Каждое такое слияние автоматически запускает сборку проекта и прогон тестов. Если что-то сломалось — система немедленно уведомляет разработчика.</p><p>До появления CI команды работали по модели «интегрируй редко, страдай долго»: каждый разработчик неделями писал код в своей ветке, а потом несколько дней разгребал конфликты при слиянии. Мартин Фаулер, один из авторов концепции, описал это явление как «integration hell» — ад интеграции.</p><h3>Как работает непрерывная интеграция</h3><ol><li>Разработчик пишет код и делает коммит в репозиторий (Git)</li><li>CI-сервер замечает изменение через webhook или периодический polling</li><li>Запускается пайплайн: скачивается код, устанавливаются зависимости, проект компилируется</li><li>Прогоняются автоматические тесты — юнит-тесты, интеграционные, линтер</li><li>Результат сообщается разработчику: зелёный (всё хорошо) или красный (есть ошибки)</li></ol><h3>Зачем нужна CI</h3><ul><li>Ошибки обнаруживаются сразу после коммита, а не через неделю — исправить их несравнимо проще</li><li>Исчезает «страх интеграции»: разработчики делают маленькие коммиты и сливают ветки часто</li><li>Актуальная сборка всегда доступна для тестирования QA-командой</li><li>Код-ревью становится осмысленным: рецензент видит, что тесты прошли</li><li>По данным Puppet State of DevOps Report, команды с CI тратят значительно меньше времени на исправление багов</li></ul><blockquote>Основное правило CI: если сборка сломана — её починка становится приоритетом номер один для всей команды. Нельзя добавлять новый код в сломанную ветку.</blockquote><h2>Что такое CD — Continuous Delivery и Continuous Deployment</h2><p>Аббревиатура CD скрывает два разных понятия, которые часто путают. Разберём каждое из них.</p><h3>Continuous Delivery — непрерывная доставка</h3><p><b>Continuous Delivery (непрерывная доставка)</b> — это практика, при которой код всегда находится в состоянии, готовом к развёртыванию в production. После прохождения всех автоматических проверок релиз выполняется <i>вручную</i> — нажатием кнопки или командой. Это даёт команде контроль над тем, когда именно изменения попадают к пользователям.</p><h3>Continuous Deployment — непрерывное развёртывание</h3><p><b>Continuous Deployment (непрерывное развёртывание)</b> — следующий уровень автоматизации: каждый коммит, прошедший все тесты, автоматически попадает в production без какого-либо ручного вмешательства. Именно так работают крупные технологические компании: Amazon в 2011 году делал деплой в production в среднем каждые 11,6 секунды, а сегодня масштаб ещё выше. Netflix выкатывает изменения тысячи раз в день.</p><p>Разница между Delivery и Deployment — это один шаг: ручной или автоматический триггер финального деплоя. Оба подхода требуют зрелой CI-практики и надёжных тестов. Continuous Deployment подходит для продуктов с хорошим покрытием тестами и возможностью быстрого отката. Continuous Delivery — для продуктов, где релиз требует согласования или происходит по расписанию.</p><ul><li>Continuous Delivery: CI прошла → код готов → команда деплоит вручную → production</li><li>Continuous Deployment: CI прошла → код автоматически деплоится → production</li></ul><h2>Как устроен CI/CD пайплайн</h2><p><b>Пайплайн (pipeline)</b> — это последовательность автоматизированных шагов, которые код проходит от коммита до production. Каждый шаг называется стейджем (stage) или джобой (job). Если любой шаг завершается с ошибкой, пайплайн останавливается и разработчик получает уведомление.</p><h3>Типичные этапы пайплайна</h3><ol><li>Source — триггер: push в репозиторий или открытие Pull Request</li><li>Build — сборка проекта: компиляция, установка зависимостей, создание артефакта (JAR, Docker-образ, бинарник)</li><li>Test — автоматические тесты: юнит-тесты, интеграционные тесты, линтер, проверка покрытия</li><li>Security — статический анализ на уязвимости (SAST), проверка зависимостей (SCA)</li><li>Staging — деплой на тестовое окружение, smoke-тесты, end-to-end тесты</li><li>Deploy — деплой в production (автоматический при Continuous Deployment, ручной при Continuous Delivery)</li></ol><h3>Пример: GitLab CI/CD (.gitlab-ci.yml)</h3><p>Конфигурация пайплайна хранится прямо в репозитории в виде YAML-файла. Вот минимальный рабочий пример для Node.js-проекта:</p><h3>Пример: GitHub Actions (.github/workflows/ci.yml)</h3><h2>Популярные инструменты CI/CD</h2><p>Рынок CI/CD-инструментов обширен. Вот краткий обзор самых популярных решений по данным Stack Overflow Developer Survey 2024.</p><h3>GitHub Actions</h3><p>Встроенный инструмент GitHub, запущенный в 2019 году. Сегодня — наиболее популярный выбор среди новых проектов: 60% разработчиков на GitHub используют Actions для CI/CD. Конфигурация в YAML-файлах внутри репозитория. Богатый маркетплейс готовых actions (более 20 000). Для публичных репозиториев GitHub Actions полностью бесплатен без ограничений. Для приватных — 2000 минут в месяц на бесплатном плане.</p><h3>GitLab CI/CD</h3><p>Встроен в платформу <a href="https://tproger.ru/articles/chto-takoe-mikroservisy--arhitektura--plyusy-i-minusy--primery">GitLab</a> и считается одним из самых мощных решений. Поддерживает параллельные пайплайны, матричные сборки, review apps, встроенный container registry. Популярен в корпоративной среде и при self-hosted инфраструктуре. Конфигурация в файле .gitlab-ci.yml.</p><h3>Jenkins</h3><p>Ветеран рынка — open-source проект, берущий начало от Hudson (2004). В 2011 году сообщество создало форк под именем Jenkins, который сегодня является отраслевым стандартом. По-прежнему широко используется в крупных компаниях, которые начали с ним ещё до появления облачных альтернатив. Огромная экосистема плагинов (более 1800). Требует самостоятельного хостинга и настройки, что сегодня считается его главным минусом. Конфигурация через Jenkinsfile (Groovy DSL) или веб-интерфейс.</p><h3>CircleCI</h3><p>Облачный сервис с акцентом на скорость и параллелизм. CircleCI поддерживает разбиение тестов на параллельные потоки, что сокращает время прогона. Популярен среди стартапов и продуктовых команд. Конфигурация в файле .circleci/config.yml. Бесплатный план включает 30 000 кредитов в месяц (примерно 6000 минут на базовом Docker-окружении).</p><h3>TeamCity</h3><p>Продукт JetBrains — популярен в командах, работающих с JVM-стеком (Java, Kotlin, Scala). Умеет автоматически определять шаги сборки без написания конфигурации, имеет мощный веб-интерфейс и детальную аналитику сборок. Доступен в облачной и self-hosted версии. Бесплатен для небольших команд (до 3 build-агентов и 100 конфигураций сборки).</p><h2>Как внедрить CI/CD в проект: пошаговая инструкция</h2><p>Внедрение CI/CD не требует немедленной перестройки всего процесса. Начните с малого — добавьте автоматический запуск тестов при каждом коммите. Этот первый шаг уже даст ощутимую пользу.</p><h3>Шаг 1. Настройте репозиторий и напишите тесты</h3><p>CI без тестов бессмысленна. Если тестов нет — начните с покрытия хотя бы критических сценариев. Убедитесь, что проект можно собрать из чистой среды одной командой (например, npm install &amp;&amp; npm test). Если это не работает у вас локально — не заработает и в CI.</p><h3>Шаг 2. Выберите инструмент CI/CD</h3><p>Для начинающих рекомендуем <b>GitHub Actions</b> — если код уже на GitHub, дополнительная регистрация не нужна. Создайте файл .github/workflows/ci.yml прямо в репозитории. Для GitLab-проектов — <b>GitLab CI/CD</b> с файлом .gitlab-ci.yml. Оба инструмента имеют обширную документацию и готовые шаблоны.</p><h3>Шаг 3. Создайте минимальный пайплайн</h3><p>Закоммитьте этот файл. Перейдите во вкладку «Actions» на GitHub — вы увидите первый запущенный пайплайн. Зелёная галочка означает, что тесты прошли.</p><h3>Шаг 4. Добавьте линтер и code quality</h3><p>Добавьте в пайплайн запуск линтера (ESLint для JS, pylint/flake8 для Python, golangci-lint для Go). Это поможет поддерживать единый стиль кода без ручных проверок. Настройте автоматическую проверку на pull request — тогда рецензент сразу видит, что стиль соблюдён.</p><h3>Шаг 5. Настройте деплой на стейджинг</h3><p>Когда CI работает стабильно, добавьте автоматический деплой на staging-окружение при каждом успешном прогоне в ветке main. Это реализует Continuous Delivery. Для деплоя используйте секреты (Secrets) в настройках репозитория — никогда не храните пароли и ключи прямо в YAML-файле. После того как команда убедится в надёжности процесса, можно переходить к Continuous Deployment.</p><h3>Чек-лист готовности CI/CD</h3><ul><li>Проект собирается из чистой среды одной командой</li><li>Есть автоматические тесты с покрытием &gt;60%</li><li>Пайплайн запускается при каждом push и pull request</li><li>Сломанная сборка блокирует слияние ветки</li><li>Секреты хранятся в переменных окружения CI, не в коде</li><li>Команда получает уведомления о статусе сборки</li><li>Есть процедура отката деплоя при проблемах</li></ul><h2>Связанные технологии</h2><p>CI/CD неразрывно связан с другими DevOps-практиками. <a href="https://tproger.ru/articles/chto-takoe-git-i-github--rukovodstvo-dlya-nachinayushhih">Git</a> — основа любого CI/CD-процесса: без системы контроля версий невозможно отслеживать изменения и запускать пайплайны. <a href="https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c">Docker</a> и контейнеры обеспечивают воспроизводимую среду сборки и деплоя: то, что работает в CI, гарантированно работает в production. <a href="https://tproger.ru/articles/chto-takoe-mikroservisy--arhitektura--plyusy-i-minusy--primery">Микросервисная архитектура</a> хорошо сочетается с CI/CD: каждый сервис имеет собственный пайплайн и деплоится независимо.</p><h2>Выводы</h2><p>CI/CD — это не магия и не прерогатива крупных компаний. Это инженерная дисциплина, доступная любой команде и любому разработчику-одиночке. Автоматическая проверка кода при каждом коммите, быстрый фидбек об ошибках, воспроизводимые сборки — всё это снижает риски, ускоряет разработку и делает деплой рутинным событием, а не стрессом.</p><p>По данным многолетних исследований DORA (DevOps Research and Assessment), команды с высоким уровнем CI/CD-зрелости деплоятся в 208 раз чаще, имеют в 7 раз меньше процент неудачных изменений и восстанавливаются после инцидентов в 2604 раза быстрее по сравнению с командами с низким уровнем автоматизации.</p><h3>С чего начать прямо сейчас</h3><ol><li>Откройте любой свой GitHub-репозиторий и создайте файл .github/workflows/ci.yml</li><li>Добавьте в него установку зависимостей и запуск тестов (см. пример выше)</li><li>Сделайте коммит — перейдите во вкладку Actions и посмотрите на первый пайплайн</li><li>Настройте уведомления: GitHub умеет слать письма при красной сборке</li><li>Постепенно добавляйте шаги: линтер, деплой на staging, security-проверки</li></ol><p>Если вы ещё не работали с системами контроля версий — начните с изучения <a href="https://tproger.ru/articles/chto-takoe-git-i-github--rukovodstvo-dlya-nachinayushhih">Git и GitHub</a>: без них CI/CD невозможен. А если уже готовы к контейнеризации — изучите <a href="https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c">Docker</a>: связка Docker + CI/CD является стандартом современной разработки.</p><p>Если хотите увидеть, как CI/CD встраивается в общую картину DevOps, посмотрите <a href="https://tproger.ru/articles/roadmap-devops-inzhenera-v-2026-godu--chto-uchit-i-v-kakom-poryadke">план обучения DevOps-инженера</a>. Там показано, какие темы нужно закрыть до пайплайнов и что логично учить после них.</p>]]></content:encoded>
    </item>
    <item>
      <title>GitHub Actions убивает вашу команду — и вот почему</title>
      <link>https://tproger.ru/translations/github-actions-ubivaet-vawu-komandu---i-vot-pochemu</link>
      <comments>https://tproger.ru/translations/github-actions-ubivaet-vawu-komandu---i-vot-pochemu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/github-actions-ubivaet-vawu-komandu---i-vot-pochemu</guid>
      <description><![CDATA[<p>Бывший инженер CircleCI разбирает все проблемы GitHub Actions — от крашей логов до ловушки YAML. Узнайте, почему Buildkite лучше для продакшена.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/github-actions-ubivaet-vawu-komandu---i-vot-pochemu">GitHub Actions убивает вашу команду — и вот почему</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Организация разработки]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 28 Mar 2026 05:33:42 GMT</pubDate>
      <content:encoded><![CDATA[<p>Автор этого текста — Иэн Данкан, один из первых инженеров <a href="https://circleci.com/">CircleCI</a>. За свою карьеру он перепробовал практически все CI-системы, которые существуют: <a href="https://www.jenkins.io/">Jenkins</a>, <a href="https://www.travis-ci.com/">Travis CI</a>, <a href="https://circleci.com/">CircleCI</a>, <a href="https://semaphoreci.com/">Semaphore</a>, <a href="https://www.drone.io/">Drone</a>, <a href="https://concourse-ci.org/">Concourse</a>, <a href="https://en.wikipedia.org/wiki/Wercker">Wercker</a>, <a href="https://www.jetbrains.com/teamcity/">TeamCity</a>, <a href="https://www.atlassian.com/software/bamboo">Bamboo</a>, <a href="https://docs.gitlab.com/ee/ci/">GitLab CI</a>, <a href="https://aws.amazon.com/codebuild/">CodeBuild</a> и другие, названия которых милосердно стёрлись из памяти. Его вердикт: <a href="https://github.com/features/actions">GitHub Actions</a> — это не хорошо. Даже не «нормально». У него есть доля рынка ровно по одной причине — он уже там, прямо в вашем репозитории. Как плесень на стенах съёмной квартиры: вы не выбирали её, но она идёт в комплекте.</p><blockquote>Если вы используете <a href="https://nixos.org/">Nix</a>, присмотритесь к <a href="https://garnix.io/">Garnix</a> — он анализирует ваш flake, определяет, что нужно собрать, и делает это. Никакого YAML. Лучший CI-конфиг — это отсутствие CI-конфига. Но эта статья не для вас. Эта статья — для всех остальных.</blockquote><h2>Часть I: Нисхождение</h2><h2>Просмотрщик логов, или Куда уходит ваш день</h2><p>Билд упал. Красный крестик. Вы нажимаете на него и попадаете... нет, не в логи. Вы попадаете на страницу Checks Summary. Оттуда — в Workflow Runs. Оттуда — в Jobs. Каждый шаг свёрнут. Каждая страница — это новый спиннер. Три-четыре клика, чтобы добраться до собственно ошибки. Это не отладка — это квест.</p><p>Просмотрщик логов, надо отдать ему должное, стабильно роняет браузер. Не один раз, не случайно — воспроизводимо, надёжно. Откройте лог длинного билда, попробуйте поискать текст — Chrome ляжет. Это не баг, это фича: система предлагает вам отдохнуть от мониторов.</p><p>На длинных логах скроллбар становится декоративным. Он есть, он выглядит как скроллбар, но прокрутить до конца вы не сможете. Приходится скачивать raw-логи и открывать в текстовом редакторе, как будто на дворе 2003 год и вы только что поставили Gentoo.</p><p>Кнопка «Назад» — это рулетка. Вы ожидаете вернуться на PR, но попадаете на случайную страницу GitHub Actions, которую видите впервые в жизни.</p><p>А теперь — отладка. Вы пушите коммит, ждёте, смотрите логи. Что-то падает. Добавляете run: env. Пушите снова. Ждёте. Двадцатиминутный цикл обратной связи ради однострочного изменения. Повторяете четырнадцать раз. Ваш вечер закончился.</p><blockquote>В этом опыте есть что-то медитативное — ритуал кликов и ожидания, почти религиозный по своей бессмысленности.</blockquote><h2>Ловушка YAML</h2><p>Любая CI-система рано или поздно сводится к «куче YAML-файлов». Но YAML в GitHub Actions — это нечто особенное. Свой язык выражений, своя объектная модель контекста, свои правила интерполяции строк. Это уже не конфигурация — это программирование. Только без отладчика, без типов и без чувства собственного достоинства.</p><p>Синтаксис ${{ }} — это танец. Неправильно поставили кавычку? Ждите четыре минуты, пока раннер запустится, чтобы узнать, что ваша строка была молча проглочена. Этот язык выражений «рос в темноте, без присмотра» — слишком сложный для конфига, слишком ограниченный для настоящего языка программирования.</p><h2>«А как же маркетплейс!»</h2><p>GitHub Actions Marketplace — это npm для CI. Комьюнити-экшены разного качества: shell-скрипты с Dockerfile и мечтой.</p><p>uses: some-stranger/cool-action@v2 — вы только что дали незнакомцу доступ к вашему репозиторию, секретам и среде сборки. Можно, конечно, пригвоздить версию к SHA. Никто этого не делает.</p><p>Энергетика ночного рынка: каждый лоток обещает решить вашу проблему, а некоторые продавцы преследуют совсем другие цели.</p><h2>Вы не владеете своими вычислениями</h2><p>Вы арендуете раннеры у Microsoft — медленные, ограниченные в ресурсах, не поддающиеся настройке. Это породило целую индустрию стартапов: <a href="https://namespace.so/">Namespace</a>, <a href="https://blacksmith.sh/">Blacksmith</a>, <a href="https://actuated.dev/">Actuated</a>, <a href="https://runs-on.com/">Runs-on</a>, <a href="https://buildjet.com/">BuildJet</a> — компании, которые существуют исключительно потому, что штатные раннеры GitHub Actions непригодны для продакшена.</p><p>Self-hosted раннеры решают проблему вычислений, но вы по-прежнему пишете YAML для GitHub Actions — это как поставить новый двигатель в машину, которая загорается каждый раз, когда вы включаете радио.</p><p>Microsoft — это место, куда амбициозные инструменты для разработчиков приходят, чтобы стать корпоративными SKU.</p><h2>Мелочи, которые накапливаются</h2><ul><li>actions/cache — ключи кеша непонятные, промахи молчаливые, вытеснение непрозрачное.</li><li>Reusable workflows нельзя вкладывать друг в друга, и у них нет чистого доступа к контексту вызывающего воркфлоу.</li><li>GITHUB_TOKEN permissions — лабиринт. permissions: write-all — это кувалда, а fine-grained permissions — это пазл на 500 деталей без картинки на коробке.</li><li>Concurrency controls — топорные. Отменить текущий запуск? Одна строка. Что-нибудь более тонкое? Нет.</li><li>Секреты нельзя использовать в условиях if: — обоснованное ограничение безопасности, но с точки зрения DX — катастрофа.</li></ul><p>Каждая из этих мелочей по отдельности — переживаемая. Но вместе они составляют убедительный аргумент в пользу того, чтобы просто уйти и не вернуться.</p><h2>«Просто напиши баш-скрипты»</h2><p>Искушение велико: просто засунуть всё в run: и написать большой shell-скрипт.</p><p>И это работает! А потом скрипт растёт. Условия, функции, парсинг аргументов, второй скрипт, обработка ошибок, логирование, «ну и чуть-чуть параллелизма».</p><p>Проходит три месяца — и вот у вас 800 строк баша, которые переизобретают параллельное выполнение задач при помощи wait и PID-файлов.</p><p>Race condition в cleanup-trap только на ядре Linux 6.x, вы в отпуске, телефон звонит.</p><blockquote>Вы не избежали CI. Вы построили CI-систему. Просто она хуже.</blockquote><p>Bash хорош как клей. Но он не система сборки. Не тестовый фреймворк. Не оркестратор. Каждый раз, когда кто-то говорит «просто напиши баш-скрипт», где-то в мире рождается ещё один 800-строчный ci.sh.</p><h2>Часть II: Выход</h2><h2>Просмотрщик логов, который не убивает браузер</h2><p>У <a href="https://buildkite.com/">Buildkite</a> просмотрщик логов — это веб-страница, которая показывает логи и не падает. Звучит как минимальное требование к продукту, но после GitHub Actions это ощущается как роскошь.</p><ul><li>ANSI-цвета работают — вывод тестового фреймворка приходит в первозданном виде, а не в виде кашицы из escape-последовательностей.</li><li>Аннотации — богатый Markdown-вывод прямо на странице билда.</li><li>Отладка: агент крутится на вашем железе, вы можете зайти на машину по SSH. Как нормальный человек, а не как археолог, расшифровывающий логи по слоям.</li></ul><h2>YAML, который знает своё место</h2><p>YAML в <a href="https://buildkite.com/">Buildkite</a> описывает пайплайн: шаги, команды, плагины. Это структура данных, а не язык программирования. Когда нужна логика — пишите скрипт на нормальном языке. Запускайте локально. Как человек, у которого есть достоинство.</p><blockquote>Оркестрацию — в конфиг, логику — в код. Buildkite уважает эту границу.</blockquote><h2>Вы владеете своими вычислениями</h2><p>Агент <a href="https://buildkite.com/">Buildkite</a> — это один бинарник на ваших машинах. Ваш облачный провайдер, ваш дата-центр, ваше странное кастомное железо.</p><p>Никакой побочной индустрии «Buildkite, только быстрее» — просто поставьте машины помощнее.</p><p>GitHub Actions выдаст вам стандартную Ubuntu-виртуалку с эмоциональной теплотой зала ожидания в районной поликлинике.</p><h2>Динамические пайплайны</h2><p>Шаги пайплайна — это данные. Вы можете генерировать их динамически в рантайме.</p><p>Скрипт смотрит на монорепо, определяет, что изменилось, и загружает именно те шаги, которые нужны. Никаких захардкоженных матриц, никаких спагетти из if: contains(...).</p><h2>По поводу плагинов</h2><p>Честно говоря, структурно плагины Buildkite похожи на маркетплейс GitHub Actions.</p><p>Но: тонкие shell-хуки вместо целых Docker-образов, меньше поверхности атаки. И главное — всё запускается на вашем железе, так что радиус поражения — под вашим контролем.</p><h2>Маленькие радости</h2><p>В Buildkite можно поставить кастомные эмодзи рядом с шагами пайплайна — :parrot:, :docker:, что угодно.</p><p>Объективно — бесполезная мелочь. Но она рассказывает вам о людях, которые создали этот продукт.</p><p><a href="https://github.com/features/actions">GitHub Actions</a> — это продукт, спроектированный комитетом, который ни разу не задал вопрос: «А пользователю от этого радостно?»</p><h2>Заключение</h2><p><a href="https://github.com/features/actions">GitHub Actions</a> победил не потому, что он хорош, а потому что он стоит по умолчанию. Internet Explorer от мира CI.</p><p>Если у вас маленькая команда и простое приложение — он сойдёт. Серьёзно, не переезжайте ради принципа.</p><p>Но если у вас продакшен-системы, монорепо, билды дольше пяти минут — присмотритесь к <a href="https://buildkite.com/">Buildkite</a>.</p><blockquote>GitHub Actions — это самая простая CI-система для старта. Buildkite — это лучшая CI-система для жизни.</blockquote><p>Если ваш CI воюет с вами больше, чем помогает — проблема не в вас. Проблема в инструменте.</p><blockquote>Это литературный перевод и адаптация статьи Иэна Данкана (Ian K. Duncan) <a href="https://www.iankduncan.com/engineering/2026-02-05-github-actions-killing-your-team">GitHub Actions is Killing Your Team</a>. Мнение автора оригинала может не совпадать с мнением редакции.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Как пакет для работы с нейросетями стал стилером: полный разбор атаки на LiteLLM</title>
      <link>https://tproger.ru/news/kak-paket-dlya-raboty-s-nejrosetyami-stal-stilerom--polnyj-razbor-</link>
      <comments>https://tproger.ru/news/kak-paket-dlya-raboty-s-nejrosetyami-stal-stilerom--polnyj-razbor-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Картофельный Повелитель]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/kak-paket-dlya-raboty-s-nejrosetyami-stal-stilerom--polnyj-razbor-</guid>
      <description><![CDATA[<p>Версии LiteLLM 1.82.7 и 1.82.8 содержали стилер. Разбор атаки TeamPCP: хронология, технический анализ, IoC и чек-лист действий. Проверьте свои системы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/kak-paket-dlya-raboty-s-nejrosetyami-stal-stilerom--polnyj-razbor-">Как пакет для работы с нейросетями стал стилером: полный разбор атаки на LiteLLM</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 27 Mar 2026 04:44:10 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если между 24 и 25 марта 2026 года вы обновляли LiteLLM — проверьте версию прямо сейчас. Ваши API-ключи от OpenAI, Anthropic и облачных провайдеров могли утечь.</p><p><a href="https://github.com/BerriAI/litellm">LiteLLM</a> — это open-source прокси для работы с API различных LLM-провайдеров: OpenAI, Anthropic, Azure, Bedrock и ещё сотней других. Библиотека позволяет переключаться между моделями через единый интерфейс с автоматическими фоллбэками, ретраями и трекингом расходов. При <b>97 миллионах загрузок в месяц</b> (около 3,4 млн в день) это один из самых популярных инструментов в AI-инфраструктуре.</p><p>В скомпрометированных версиях 1.82.7 и 1.82.8, опубликованных на PyPI, обнаружили встроенный стилер учётных данных. Он крал SSH-ключи, токены облачных сервисов, API-ключи и пароли, а затем расползался по Kubernetes-кластерам.</p><p><b>Ключевое:</b> Версии LiteLLM 1.82.7 и 1.82.8 на PyPI содержали стилер, крадущий SSH-ключи, облачные токены и API-ключи. Версия 1.82.8 запускала вредоносный код при каждом старте Python — даже без импорта библиотеки. Если вы устанавливали LiteLLM 24 марта 2026 года — <a href="https://tproger.ru/#remediation">проверьте свои системы</a>. Последняя чистая версия — 1.82.6.</p><p>Но эта атака — не изолированный инцидент. Это финал пятидневной <b>supply chain атаки</b> (атаки через цепочку поставок — внедрение вредоносного кода в легитимный пакет через компрометацию его инфраструктуры). За ней стоит группировка <b>TeamPCP</b> — ранее неизвестная группа, которая за последнюю неделю марта целенаправленно атаковала инструменты безопасности и разработки. Кампания началась с компрометации сканера уязвимостей Trivy и через цепочку украденных CI/CD-креденшалов дотянулась до LiteLLM.</p><p>Разбираем всю цепочку атаки от начала до конца — подробнее, чем где-либо ещё.</p><h2>Хронология: пять дней, три вендора, пять экосистем</h2><p>Чтобы понять, как LiteLLM оказался скомпрометирован, нужно отмотать на пять дней назад. Атакующие не ломали LiteLLM напрямую — они добрались до него через цепочку компрометаций, каждая из которых давала доступ к следующей цели.</p><h3>19 марта: Trivy — точка входа</h3><p>Всё началось с <a href="https://github.com/aquasecurity/trivy">Trivy</a> — open-source сканера уязвимостей от Aqua Security, которым пользуются тысячи компаний для проверки контейнеров и кода.</p><p>Атакующие использовали скомпрометированные учётные данные мейнтейнера, чтобы:</p><ul><li>Опубликовать вредоносный релиз <b>Trivy v0.69.4</b>, который прошёл через стандартную release-машинерию и попал в GHCR, ECR Public, Docker Hub, deb/rpm-пакеты</li><li>Подменить <b>76 из 77 тегов</b> aquasecurity/trivy-action на вредоносные коммиты</li><li>Заменить все 7 тегов aquasecurity/setup-trivy</li></ul><p>Вредоносный код в GitHub Actions сканировал память процесса Runner.Worker, собирал креденшалы, шифровал данные AES+RSA и отправлял на подставной домен scan.aquasecurtiy[.]org — обратите внимание на опечатку в слове «security». Если прямая эксфильтрация не удавалась, малварь создавала публичный репозиторий tpcp-docs через GitHub-токен жертвы и сливала данные туда.</p><h3>20–22 марта: npm-червь и дефейс</h3><p>Уже на следующий день украденные токены пошли в дело. Атакующие запустили <b>самораспространяющегося npm-червя</b>: 28 пакетов в @EmilGroup, 16 в @opengov, плюс отдельные пакеты в других скоупах. Червь крал npm-токены из скомпрометированных окружений, проверял, к каким пакетам они дают доступ, поднимал patch-версию, подставлял оригинальный README для маскировки и переиздавал пакет с вредоносной начинкой.</p><p>К 22 марта та же инфраструктура начала обслуживать Kubernetes-скрипт с <b>разделением жертв по геолокации</b>. На иранских системах деплоился DaemonSet с контейнером kamikaze, который удалял файловую систему хоста и перезагружал ноду. На остальных — устанавливал персистентный бэкдор.</p><p>В тот же день атакующие дефейснули <b>44 репозитория внутренней GitHub-организации Aqua Security</b> (aquasec-com), переименовав их с префиксом tpcp-docs- и описанием «TeamPCP Owns Aqua Security».</p><h3>23 марта: Checkmarx</h3><p>Кампания добралась до <b>Checkmarx</b> — ещё одного крупного вендора в сфере безопасности приложений. Были скомпрометированы:</p><ul><li>Checkmarx/kics-github-action — сканер инфраструктурного кода</li><li>Checkmarx/ast-github-action — GitHub Action для платформы Checkmarx</li><li>Расширения VS Code в реестре Open VSX: ast-results v2.53.0 (около 36 000 загрузок) и cx-dev-assist v1.7.0 (около 500 загрузок)</li></ul><p>Паттерн тот же: стилер креденшалов, привязанный к домену checkmarx[.]zone, с фоллбэком на публичный репозиторий docs-tpcp для эксфильтрации.</p><h3>24 марта: LiteLLM</h3><p>В <b>10:52 UTC</b> на PyPI появилась версия LiteLLM 1.82.8. Соответствующий тег или релиз на GitHub отсутствовал — пакет был загружен напрямую, в обход стандартного процесса. По <a href="https://www.reversinglabs.com/blog/teampcp-supply-chain-attack-spreads">данным ReversingLabs</a>, был скомпрометирован GitHub-аккаунт сооснователя и CEO LiteLLM Криша Дхолакии — предположительно, через CI/CD-пайплайн, где Trivy использовался <b>без пиннинга версии</b>.</p><p>Через три часа команда безопасности PyPI поставила проект на карантин. Скомпрометированные версии были удалены. Последняя чистая версия — <b>1.82.6</b>. Но при 3,4 миллионах загрузок в день даже три часа — это огромное окно.</p><p>Мейнтейнеры LiteLLM <a href="https://docs.litellm.ai/blog/security-update-march-2026">опубликовали security-апдейт</a>, подтвердив компрометацию и рекомендовав всем пользователям обновиться до версии 1.82.6 или выше (после снятия карантина). Issue #24512 на GitHub, описывающий уязвимость, был закрыт — предположительно, самим атакующим через скомпрометированный аккаунт.</p><h2>Как работает вредоносный код</h2><p>Теперь разберём, что именно попадало на машины жертв. LiteLLM оказался скомпрометирован в двух версиях, и они существенно различаются по механизму запуска.</p><h3>Версия 1.82.7: инъекция в proxy_server.py</h3><p>В версии 1.82.7 вредоносный код был внедрён в файл litellm/proxy/proxy_server.py. Малварь запускалась только при реальном использовании LiteLLM Proxy в приложении. Если пакет был установлен, но прокси-сервер не запускался, код мог не сработать.</p><h3>Версия 1.82.8: .pth-файл — запуск без импорта</h3><p>Версия 1.82.8 принципиально опаснее. В wheel-пакет был добавлен файл litellm_init.pth размером 34 628 байт, содержащий <b>дважды закодированный</b> в base64 вредоносный код.</p><p>.pth-файлы — малоизвестная особенность Python. Согласно <a href="https://docs.python.org/3/library/site.html">документации модуля site</a>, исполняемые строки в .pth-файлах выполняются автоматически при каждом запуске интерпретатора. Не при импорте библиотеки, а при запуске <b>любого</b> Python-процесса в окружении, где установлен пакет.</p><p>Это означает: достаточно было выполнить pip install litellm==1.82.8, и <b>каждый последующий запуск Python</b> на этой машине активировал стилер. Не нужно писать import litellm — даже python -c "print('hello')" запускал вредоносный код.</p><h3>Три стадии: сбор, шифрование, эксфильтрация</h3><p><b>Стадия 1 — сбор.</b> Скрипт прочёсывает машину и собирает:</p><ul><li>SSH-ключи и конфигурации (~/.ssh/)</li><li>.env-файлы с секретами</li><li>Креденшалы AWS (Access Key, Secret Key), GCP (ADC), Azure</li><li>Конфигурации Kubernetes (~/.kube/config)</li><li>Docker-конфиги (~/.docker/config.json)</li><li>Пароли баз данных</li><li>Историю шелла (bash_history, zsh_history)</li><li>Файлы криптокошельков</li><li>Все переменные окружения</li><li>Данные с облачных metadata-эндпоинтов (IMDS)</li></ul><p><b>Стадия 2 — шифрование.</b> Собранные данные упаковываются в tar-архив и шифруются гибридной схемой: случайный сессионный ключ <b>AES-256-CBC</b> для данных, зашифрованный захардкоженным <b>4096-битным RSA</b>-публичным ключом.</p><p><b>Стадия 3 — эксфильтрация.</b> Зашифрованный архив отправляется POST-запросом на models.litellm[.]cloud (домен не имеет отношения к настоящему litellm.ai) с заголовком X-Filename: tpcp.tar.gz.</p><h3>Горизонтальное распространение в Kubernetes</h3><p>Если на машине обнаружен токен сервисного аккаунта Kubernetes, малварь переходит в режим горизонтального распространения (lateral movement):</p><ol><li>Читает <b>все секреты кластера</b> во всех неймспейсах</li><li>Создаёт привилегированный pod на <b>каждой ноде</b> в kube-system на основе образа alpine:latest</li><li>Каждый pod монтирует <b>корневую файловую систему хоста</b></li><li>Устанавливает персистентный бэкдор в /root/.config/sysmon/sysmon.py</li><li>Регистрирует systemd user service для автозапуска</li></ol><p>Таким образом, компрометация одного pip-пакета превращается в <b>полную компрометацию всего Kubernetes-кластера</b>.</p><h3>Персистентность и бэкдор</h3><p>На локальной машине малварь создаёт:</p><ul><li>~/.config/sysmon/sysmon.py — скрипт-бэкдор</li><li>~/.config/systemd/user/sysmon.service — systemd unit для автозапуска</li></ul><p>После установки бэкдор периодически обращается к https://checkmarx[.]zone/raw, скачивает файл в /tmp/pglog и выполняет его содержимое. Это даёт атакующим возможность удалённо выполнять произвольный код на скомпрометированных машинах в любой момент.</p><h2>Как обнаружили: баг в малвари устроил fork-бомбу</h2><p>Ирония истории в том, что атаку обнаружили благодаря <b>ошибке самих хакеров</b>.</p><p>Команда <a href="https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/">FutureSearch</a> столкнулась с проблемой случайно: MCP-плагин в IDE Cursor подтянул LiteLLM как транзитивную зависимость. Вредоносный .pth-файл запускал дочерний Python-процесс через subprocess.Popen. Но поскольку .pth-файлы срабатывают при каждом запуске интерпретатора, дочерний процесс тоже запускал малварь, та порождала ещё один процесс — и так далее.</p><p>Результат — <b>экспоненциальная fork-бомба</b>, которая мгновенно съедала всю оперативную память и вешала систему. Без этого бага стилер мог бы работать незамеченным значительно дольше.</p><blockquote>Мы были взломаны… тысячи людей, вероятно, прямо сейчас под атакой</blockquote><h2>Что делать, если вы затронуты</h2><p>Если в ваших проектах, CI/CD-пайплайнах или на рабочих машинах устанавливался LiteLLM 24 марта или позже — проверьте версию:</p><p>Если обнаружена версия 1.82.7 или 1.82.8:</p><ol><li><b>Удалите пакет и очистите кэши:</b> pip cache purge, rm -rf ~/.cache/uv</li><li><b>Проверьте наличие бэкдора:</b> файлы ~/.config/sysmon/sysmon.py и ~/.config/systemd/user/sysmon.service</li><li><b>В Kubernetes:</b> аудит kube-system на наличие подов node-setup-*, проверка секретов на несанкционированный доступ</li><li><b>Ротация всех креденшалов:</b> SSH-ключи, облачные токены (AWS, GCP, Azure), API-ключи, пароли БД, .env-файлы</li><li><b>Сетевые логи:</b> проверьте обращения к models.litellm[.]cloud, checkmarx[.]zone, scan.aquasecurtiy[.]org</li><li><b>Восстановление:</b> не ограничивайтесь удалением пакета — пересобирайте системы из известных чистых образов с закреплёнными (pinned) зависимостями</li></ol><p>На момент публикации публичных подтверждений массовой эксплуатации украденных ключей не зафиксировано, однако учитывая трёхчасовое окно и объём загрузок, число затронутых окружений может исчисляться тысячами.</p><h2>Индикаторы компрометации (IoC)</h2><p><b>Вредоносные домены:</b></p><ul><li>models.litellm[.]cloud — C2 для LiteLLM</li><li>checkmarx[.]zone — C2, используемый для персистентности и Checkmarx-атаки</li><li>scan.aquasecurtiy[.]org — C2 для Trivy-атаки</li></ul><p><b>Файлы на диске:</b></p><ul><li>litellm_init.pth в site-packages/</li><li>~/.config/sysmon/sysmon.py</li><li>~/.config/systemd/user/sysmon.service</li><li>/tmp/pglog</li><li>/tmp/.pg_state</li></ul><p><b>Kubernetes-артефакты:</b></p><ul><li>Поды с именами node-setup-* в kube-system</li><li>Контейнеры с именами kamikaze или provisioner</li></ul><p>Инциденту присвоен идентификатор <b>CVE-2026-33634</b>. Полный список IoC в формате CSV доступен в <a href="https://github.com/DataDog/security-labs-pocs">репозитории Datadog Security Labs</a>.</p><h2>Частые вопросы</h2><h3>Что такое LiteLLM и зачем его используют?</h3><p>LiteLLM — это open-source Python-библиотека и прокси-сервер, который предоставляет единый интерфейс для работы с более чем 100 LLM-провайдерами (OpenAI, Anthropic, Azure, AWS Bedrock и другие). Библиотека позволяет переключаться между моделями без изменения кода, автоматически обрабатывает фоллбэки и ретраи, отслеживает расходы. По данным PyPI, пакет загружается около 3,4 миллионов раз в день.</p><h3>Какие версии LiteLLM скомпрометированы?</h3><p>Скомпрометированы версии <b>1.82.7</b> и <b>1.82.8</b>, опубликованные на PyPI 24 марта 2026 года. Обе версии удалены. Последняя безопасная версия — <b>1.82.6</b>. Версия 1.82.8 опаснее: она запускает вредоносный код при каждом старте Python через механизм .pth-файлов, тогда как 1.82.7 активируется только при использовании прокси-сервера.</p><h3>Как проверить, затронут ли я?</h3><p>Выполните pip show litellm для проверки версии и find ~/.cache/uv -name "litellm_init.pth" для поиска вредоносного файла в кэше. Также проверьте наличие бэкдора: файлы ~/.config/sysmon/sysmon.py и ~/.config/systemd/user/sysmon.service. В Kubernetes ищите поды node-setup-* в namespace kube-system.</p><h3>Кто стоит за атакой?</h3><p>Атака приписывается группировке <b>TeamPCP</b>, которая за последнюю неделю марта 2026 года провела серию supply chain атак на инструменты разработки и безопасности: сканер уязвимостей Trivy (Aqua Security), GitHub Actions и расширения VS Code от Checkmarx, npm-пакеты, и в финале — LiteLLM. Инциденту присвоен идентификатор CVE-2026-33634.</p><h3>Что такое .pth-файл и почему он опасен?</h3><p>Файлы с расширением .pth, размещённые в директории site-packages, автоматически обрабатываются модулем site Python при каждом запуске интерпретатора. Исполняемые строки в таких файлах выполняются без явного импорта библиотеки. В случае LiteLLM 1.82.8 файл litellm_init.pth содержал дважды закодированный в base64 вредоносный скрипт, который запускался при каждом вызове python в скомпрометированном окружении.</p><h2>Выводы</h2><p>Ирония инцидента — в том, что LiteLLM по определению хранит API-ключи ко всем LLM-провайдерам организации. Атакующие выбрали пакет, который гарантированно имеет доступ к самым ценным секретам.</p><blockquote>Одна зависимость. Одна цепная реакция. Пять экосистем supply chain скомпрометированы менее чем за месяц</blockquote><p>TeamPCP целенаправленно атаковали инструменты безопасности — сканер уязвимостей, анализатор инфраструктурного кода, прокси для LLM. Эти инструменты по своей природе имеют широкий доступ, и компрометация одного из них даёт атакующим доступ ко всем секретам, которые этот инструмент должен был защищать.</p><p>Устанавливать пакеты из публичного реестра без проверки хешей и без lock-файлов — значит фактически отдать root-доступ любому, кто сможет скомпрометировать аккаунт мейнтейнера. Как ёмко выразилась Ноэлль Мурата, старший инженер по безопасности в Xcape: «Это цифровой эквивалент того, чтобы съесть бутерброд, найденный в метро, и удивиться пищевому отравлению».</p><p>Подробный технический анализ от Datadog Security Labs доступен <a href="https://securitylabs.datadoghq.com/articles/litellm-compromised-pypi-teampcp-supply-chain-campaign/">здесь</a>. Оригинальный отчёт FutureSearch — <a href="https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/">здесь</a>. Официальный security-апдейт LiteLLM — <a href="https://docs.litellm.ai/blog/security-update-march-2026">здесь</a>.</p><p><b>Проверьте свои зависимости сегодня.</b> Команды для аудита — <a href="https://tproger.ru/#remediation">в разделе выше</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Headless WordPress: архитектура с Next.js, GraphQL и Cloudflare</title>
      <link>https://tproger.ru/articles/headless-wordpress--arhitektura-s-next-js--graphql-i-cloudflare</link>
      <comments>https://tproger.ru/articles/headless-wordpress--arhitektura-s-next-js--graphql-i-cloudflare?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Пехота]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/headless-wordpress--arhitektura-s-next-js--graphql-i-cloudflare</guid>
      <description><![CDATA[<p>Разбираем headless WordPress на практике: Next.js, Cloudflare Workers, GraphQL и архитектура быстрых и масштабируемых сайтов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/headless-wordpress--arhitektura-s-next-js--graphql-i-cloudflare">Headless WordPress: архитектура с Next.js, GraphQL и Cloudflare</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[WordPress]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[CDN]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 26 Mar 2026 11:29:45 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Почему WordPress?</h2><p>WordPress часто не любят backend-разработчики, и у каждого на это есть свои причины. Кому-то не нравится функциональный стиль разработки, кто-то критикует form-builder и экосистему плагинов. У других WordPress как CMS и PHP как язык программирования до сих пор ассоциируются со стереотипами 10–15-летней давности - будто они устарели и уступают современным технологиям.</p><p>При этом реальность такова, что и PHP, и WordPress - отличные и современные инструменты, которые очень хорошо выполняют свои задачи. Опустим PHP - статья не об этом. Что же можно сказать про WordPress как про продукт и как CMS?</p><p>WordPress по‑прежнему остаётся самой популярной системой управления контентом. Согласно данным команды WordPress, платформа обслуживает более 43% всех веб-сайтов и занимает долю в 61% на рынке CMS. Также статистика показывает, что WordPress используется примерно на 59% сайтов, где известна CMS (это около 42% всего веба).</p><p>Данные были взяты из официального блога WordPress и сайта w3techs.com:</p><ul><li><a href="https://wordpress.com/blog/2025/04/17/wordpress-market-share/" rel="nofollow">https://wordpress.com/blog/2025/04/17/wordpress-market-share/ </a></li><li><a href="https://w3techs.com/technologies/overview/content_management" rel="nofollow">https://w3techs.com/technologies/overview/content_management</a></li><li><a href="https://w3techs.com/technologies/details/cm-wordpress" rel="nofollow">https://w3techs.com/technologies/details/cm-wordpress</a></li></ul><p>При этом, традиционный WordPress объединяет CMS, шаблоны на PHP и монолитные темы. Такая связка усложняет разработку с использованием современных JS фреймворков, а также затрудняет независимое масштабирование фронтенда и бэкенда, и оптимизацию производительности и безопасности. Жёсткая связка страниц, устаревшие PHP‑функции и не самый удобный девелоперский опыт часто заставляют команды искать альтернативы.</p><p>Headless WordPress решает эти проблемы: CMS становится админ-панелью для управления контентом, а отдельный фронтенд отвечает за UI. Такое разделение обязанностей даёт несколько преимуществ: четкое разделение ответственности, независимое масштабирование интерфейса и CMS, упрощенную локальную разработку и CI/CD. CMS превращается в API‑ориентированное хранилище, а современные фреймворки вроде Next.js берут на себя маршрутизацию и рендеринг.</p><h2>Headless WordPress с использованием WPGraphQL</h2><p>Чтобы использовать WordPress как headless‑CMS, нужен API. Также есть интересный пост про headless wordpress в их <a href="https://wordpress.com/blog/2025/03/20/headless-wordpress/" rel="nofollow">официальном блоге</a>.</p><p>В WordPress из коробки есть REST API, но для frontend и mobile приложений часто удобнее использовать GraphQL. <a href="https://wordpress.org/plugins/wp-graphql/" rel="nofollow">WPGraphQL</a> - это open source плагин, который добавляет GraphQL API в WordPress. Используя WPGraphQL, мы получаем:</p><ul><li>Гибкие запросы к таким сущностям, как посты, страницы, произвольным типам постов, таксономиям и пользователям.</li><li>Систему расширений которая позволяет расширять функционал GraphQL бекенда и таким образом поддерживать популярные плагины, тем самым позволяя возвращать дополнительные поля которые не относятся к стандартным полям Wordpress.</li><li>GraphQL API, который даёт очень удобный формат для интеграции фронтенд фреймворков таких как Next.js, Astro и SvelteKit.</li><li>Оптимизацию производительности, поскольку клиент запрашивает только нужные поля и данные делая один запрос вместо группы REST запросов + отдельный фронтенд забирает на себя часть запросов.</li></ul><p>В дополнение к доступному функционалу WPGraphQL можно добавлять дополнительные плагины-расширения, такие как <a href="https://wordpress.org/plugins/add-wpgraphql-seo/" rel="nofollow">WPGraphQL Yoast SEO</a> и <a href="https://woographql.com/" rel="nofollow">WooGraphQL</a> (WPGraphQL для WooCommerce). Таким образом добавив несколько плагинов в базовую инсталляцию CMS можно из коробки получить полностью функциональный GraphQL бекенд, который может покрыть запросы для блога, сео функционал, онлайн-магазин и тд.</p><p>Важно отметить, что изначальная идея использовать WPGraphQL пришла из статьи в блоге <a href="https://vercel.com/kb/guide/wordpress-with-vercel" rel="nofollow">Vercel</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/838bc085-bfe5-4888-a326-6dcc00b0aaf5.webp" alt="Сравнение традиционного WordPress и headless WordPress: монолитная CMS с PHP темами против архитектуры с WPGraphQL API и Next.js фронтендом" /><figcaption>Традиционный WordPress vs Headless WordPress: разделение CMS и frontend через API (WPGraphQL + Next.js)</figcaption></figure><h2>Фронтенд на Next.js</h2><p><a href="https://nextjs.org/" rel="nofollow"> Next.js</a> - production-ready React-фреймворк, который разрабатывается компанией Vercel. Многие используют его по умолчанию для разных headless‑проектов. Наш пример headless-wordpress не исключение. Фреймворк предлагает удобную <a href="https://nextjs.org/docs/pages/building-your-application/routing" rel="nofollow">маршрутизацию</a> на базе файловой системы, где любой файл в папке pages автоматически становится маршрутом и поддерживает несколько стратегий рендеринга:</p><ul><li>Server‑side rendering (SSR) позволяет генерировать HTML при каждом запросе.</li><li>Статическая генерация (включая [Incremental Static Regeneration])</li><li>React Server Components, стратегия которая дает гибкость в балансировании производительности и кэширования.</li></ul><p>Это делает Next.js хорошей платформой для работы с GraphQL API и рендеринга страниц React‑компонентами. Если у вас нет опыта с <a href="http://nex.js">Next.js</a> и React, то это не повод не попробовать набросать POC в свободное время. Современные <a href="http://next.js">Next.js</a> и React templates + хороший AI agent помогут адаптировать UI под GraphQL для вас.</p><h2>Почему Cloudflare?</h2><p>Vercel очень часто является платформой по умолчанию для Next.js‑приложений. Более того Next.js адаптирован для запуска из коробки на серверах Vercel. При этом нужно добавить, что идея этой статьи не в том чтобы как-то компрометировать Vercel. Что же нужно знать про Cloudflare чтобы обратить внимание на этот сервис с точки зрения альтернативы для хостинга Next.js?</p><p>Согласно <a href="https://w3techs.com/technologies/details/cn-cloudflare" rel="nofollow">статистике</a>, реверс-прокси сервисы Cloudflare используются примерно на 21,9% всех сайтов в интернете, а это более 82% сайтов, где используется прокси‑сервисы в принципе. Такая распространённость говорит о масштабе, надежности и глобальном охвате сервиса. Но Cloudflare - это не только reverse-proxy. Компания разрабатывает целую группу облачных сервисов, включая такие сервисы, как Cloudflare Pages - альтернатива Github Pages, Workers - Serverless functions (по аналогии с AWS Lambda), Контейнеры, Очереди, AI сервисы, R2 Object Storage, и другие. В дополнение ко всему, компания предоставляет такие сервисы, как защита сайта (site-protection), VPN и капча (human-detection captcha). Такое разнообразие сервисов делает сервис очень распространенным.</p><h2>Лимиты бесплатного тарифа Cloudflare</h2><p>Одним из самых интересных аргументов в пользу Cloudflare можно считать их бесплатный тариф. Защита от DDoS, Universal SSL и глобальную CDN доступны бесплатно. Также бесплатный тариф включает большинство из вышеперечисленных облачных сервисов. Например, Cloudflare Workers, который можно использовать для хостинга Next.js-проектов, бесплатно даёт 100,000 запросов в день. Или R2 object storage - альтернатива S3 по умолчанию дает 10GB пространства, которое можно использовать для хранения статики или других данных. Этого более чем достаточно чтобы поэкспериментировать на выходных с новым стеком и вполне достаточно для того, чтобы бесплатно хостить ваш проект до тех пор пока у вас не пойдет серьезный трафик. Ниже приведена таблица с некоторыми из Cloudflare сервисов и что включено в бесплатный тариф.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/826d92c6-cecd-4d70-a2ee-78733a324a70.webp" alt="Таблица сервисов Cloudflare (Workers, KV, D1, R2 и др.) с лимитами бесплатного тарифа и их назначением" /><figcaption>Cloudflare free tier: сервисы и лимиты, достаточные для запуска headless WordPress + Next.js проекта. Взято с https://dev.to/ioniacob/which-cloudflare-services-are-free-2025-free-tier-guide-53jl.</figcaption></figure><h2>Запуск Serverless функций на edge-серверах</h2><p>Cloudflare Workers позволяют запускать серверлесс‑код по всей сети Cloudflare. Ниже приведено изображение показывающее как работает Edge CDN, когда например статика продублирована на все доступные сервера и таким образом пользователь получает ресурсы с самого близлежащего сервера.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/6c12d101-f282-4d1a-8d7a-b4119fabdfda.webp" alt="Схема работы CDN: пользователи обращаются к ближайшим edge-серверам, которые кешируют контент и уменьшают нагрузку на origin-сервер" /><figcaption>Как работает CDN: пользователь получает контент с ближайшего edge-сервера, снижая задержку и нагрузку на origin. Источник: https://www.cloudflare.com/learning/cdn/what-is-a-cdn/</figcaption></figure><p>Эта картинка хороша тем, что аналогично CDN статике на этих же серверах можно запускать и Workers (Lambda) функции, тем самым ускоряя вашу инфраструктуру еще больше.</p><p>Одной из интересных особенностей Workers-функций является отсутствие cold-starts. Любой cloud provider обычно подымает docker container или виртуализированное окружение в момент первого запуска программы, а это всегда задержка. Минусом Workers-функций является тот факт что их Runtime API требует чтобы код мог использовать их Web platform APIs. А это в свою очередь ограничивает выбор языка программирования: Javascript, Typescript и WebAssembly. Но благодаря такому подходу Workers используют изолированную модель запуска  и могут быть прогреты еще до момента запуска кода этого воркера. Прогрев начинается еще на этапе TLS-соединения между клиентом и серверами Cloudflare. Полный текст статьи можно почитать в их <a href="https://blog.cloudflare.com/eliminating-cold-starts-with-cloudflare-workers/" rel="nofollow">блоге</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/4bcd2a0a-5161-46f5-984c-87f4097411dc.webp" alt="Схема работы Cloudflare Workers: прогрев (warmup) и загрузка воркера происходят во время TLS handshake до выполнения HTTP-запроса" /><figcaption>Как Cloudflare Workers устраняют cold-start: прогрев воркера происходит ещё на этапе TLS-соединения.</figcaption></figure><p>Воркеры выполняются на edge-серверах, которые находятся ближе всего к пользователям, тем самым уменьшая задержку и разгружая origin‑сервер (в нашем случае WordPress backend). По аналогии с другими cloud-провайдерами, код внутри Workers Runtime может использовать другие сервисы Cloudflare, такие как:</p><ul><li><a href="https://developers.cloudflare.com/workers/runtime-apis/cache/" rel="nofollow">Cache API</a> - позволяет читать и записывать данные в глобальный edge‑кэш через caches.default, что удобно для кэширования GraphQL‑ответов или страниц Next.js.</li><li><a href="https://developers.cloudflare.com/kv/" rel="nofollow">Workers KV</a> - распределенное key‑value‑хранилище для конфигурации и небольших наборов данных; можно хранить и получать данные глобально с низкой задержкой.</li><li><a href="https://developers.cloudflare.com/workers/configuration/cron-triggers/" rel="nofollow">Cron Triggers</a> - можно сопоставить cron‑выражение с обработчиком scheduled(), чтобы запускать периодические задачи, например, уборку кэша или обновление данных. Триггеры выполняются на малоиспользуемых машинах, максимизируя эффективность.</li></ul><p>Наличие доступа к дополнительным сервисам, таким как базы данных (D1), объектное хранилище (R2), очереди и AI даёт свободу строить более сложные и гибкие архитектуры, что очень полезно в дальнейшем на больших масштабах.</p><h2>OpenNext: мост между Next.js и Cloudflare</h2><p>Самостоятельный деплой Next.js на разные платформы непрост, поскольку среда исполнения Vercel отличается от других. Можно поднять Next.js на Node‑сервере, но его работа отличается от edge‑режима Vercel. OpenNext - это проект с открытым исходным кодом, который адаптирует Next.js для разных серверлесс‑платформ. Важно сказать что у Next.js нет нативного способа само разворачивания на других платформах, кроме Vercel; существующие отдельные адаптеры разрознены и сложны в поддержке. <a href="https://opennext.js.org/" rel="nofollow">OpenNext</a> объединяет усилия в одном адаптере, переводя выход сборки Next.js в формат, совместимый с основными облачными платформами. Проект поддерживают сообщество SST (AWS), команда Cloudflare и Netlify. Соответственно, с помощью OpenNext можно развернуть Next.js на Cloudflare Workers, сохраняя SSR, статическую генерацию и API‑маршруты.</p><p>Cloudflare‑адаптер устанавливается через @opennextjs/cloudflare. Далее следует установить<a href="https://developers.cloudflare.com/workers/wrangler/"> Wrangler</a>, настроить wrangler.toml с вашим Account ID и создать open-next.config.ts для управления кэшем и ассетами. Адаптер собирает приложение Next.js под среду Cloudflare, создает edge‑воркер и конфигурирует кэш для статики и ISR‑страниц (например, используя R2). После публикации Git‑интеграция Cloudflare автоматически разворачивает приложение при каждом пуше в GitHub или GitLab, а для pull‑request создает превью.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/ffd3d8f8-9e94-4ee2-b1b8-7b7d075a9bbd.webp" alt="Логотипы OpenNext, Cloudflare, AWS Amplify и Netlify, показывающие поддержку деплоя Next.js на разные cloud-платформы" /><figcaption>OpenNext как единый адаптер для деплоя Next.js приложений на разные платформы: Cloudflare, AWS и Netlify</figcaption></figure><h2>Кэширование и уровни производительности</h2><p>Архитектура headless WordPress + Next.js + Cloudflare обычно включает несколько уровней кэша:</p><ol><li>Кэш браузера - стандартный HTTP‑кэш на стороне клиента.</li><li>Кэш edge‑рантайма - Cache API Cloudflare Workers сохраняет HTML‑страницы или GraphQL‑ответы рядом с пользователем; при попадании в кэш контент отдаётся мгновенно, а промахи идут к воркеру или origin.</li><li>Кэш ISR Next.js - технология Incremental Static Regeneration сохраняет отрендеренные страницы на сервере и обновляет их по запросу, снижая нагрузку на WordPress API.</li><li>Кэш GraphQL - API WPGraphQL может реализовывать кэширование по времени или тегам (например, через WPGraphQL Smart Cache), чтобы управлять сроком жизни ответов.</li></ol><p>Эта многоуровневая иерархия кэша обеспечивает, что большинство запросов вообще не доходят до вашего WordPress‑сервера, повышая производительность и снижая нагрузку.</p><p>Пример конечной архитектуры показан на изображении ниже.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/37141150-e160-423b-a8cd-3784117e6499.webp" alt="" /><figcaption>Архитектура headless WordPress + Next.js на Cloudflare: edge-рендеринг, многоуровневый кэш и взаимодействие с WPGraphQL</figcaption></figure><h2>Автоматизация периодических задач</h2><p>Headless‑сайтам часто требуются периодические действия - например, обновление кэша ISR или синхронизация данных. Cron Triggers Cloudflare позволяют планировать запуск воркера по cron‑выражению. Обработчик scheduled() срабатывает по расписанию и подходит для обслуживания и получения сторонних данных. Триггеры выполняются на малоиспользуемых машинах по всему миру и легко управляются через Wrangler или панель Cloudflare.</p><h2>Модернизация PHP‑стека с Roots toolkit</h2><p>Хотя headless WordPress переносит рендеринг на JavaScript, CMS всё ещё нужно поддерживать. В качестве бонуса хочется порекомендовать экосистему <a href="https://roots.io/" rel="nofollow">Roots</a>, которая предлагает современный инструментарий для разработки на WordPress:</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/27e070e5-39c8-425b-8142-b0b2ce0af69d.webp" alt="Скриншот сайта Roots с описанием инструментов для разработки WordPress: Bedrock, Sage, Trellis и Acorn" /><figcaption>Roots — современный инструментарй для разработки WordPress с использованием Composer, Blade и автоматизированного деплоя. Источник: Roots - https://roots.io/</figcaption></figure><ul><li><a href="https://roots.io/bedrock/" rel="nofollow">Bedrock</a> - шаблон WordPress, которая устанавливает ядро, плагины и темы через Composer. Таким образом Bedrock дает современную для PHP проектов структуру проекта, улучшает структуру папок, использует концепты Двенадцать факторов для конфигурации приложения с помощью .env‑файлы и тд. Более того, управление зависимостями через Composer повышает надежность и позволяет делать деплой приложения на разные сервера без страха что-то забыть или упустить.</li><li><a href="https://roots.io/sage/" rel="nofollow">Sage</a> - стартовая тема WordPress, использующая Blade от Laravel для шаблонов и интегрирующая Tailwind CSS. Sage автоматически генерирует theme.json из конфигурации Tailwind, поддерживает live preview блокового редактора с Vite и позволяет создавать компоненты на Blade. Это помогает фронтенд‑разработчикам отойти от устаревших подходов для разработки тем Wordpress с нуля.</li><li><a href="https://roots.io/trellis/" rel="nofollow">Trellis</a> - DevOps‑инструмент на базе Ansible, который поднимает серверы и автоматизирует деплой. Trellis предоставляет LEMP‑стек (Ubuntu 24.04, Nginx, PHP 8.3, MariaDB), выполняет деплой без downtimes и из коробки поддерживает SSL‑сертификаты. CLI помогает создавать и настраивать серверы, а также разворачивать проекты с атомарными релизами и откатами.</li><li><a href="https://roots.io/acorn/" rel="nofollow">Acorn</a> - интеграция, позволяющая использовать функционал Laravel в WordPress. С Acorn становятся доступны такие инструменты как Blade‑шаблоны, миграции, роутинг, кэширование и Artisan‑подобный CLI внутри WordPress. Это позволяет разработчикам строить плагины и фичи WordPress с использованием современных PHP‑подходов и современного фреймворка .</li></ul><p>Эти инструменты показывают, что экосистема WordPress продолжает развиваться и хорошо сочетается с современными подходами. Иными словами, WordPress - отличное решение, если знать, как его правильно готовить.</p><h2>Собираем всё вместе</h2><p>Архитектура приложения headless WordPress + Next.js + Cloudflare выглядит приблизительно так:</p><ol><li>WordPress (headless) - работает на традиционном сервере или в контейнере. Редакторы управляют контентом в админке. WPGraphQL и его расширения предоставляют GraphQL‑endpoint с данными, SEO и другой информацией, например данными о магазине.</li><li>Next.js фронтенд - React‑приложение, которое получает данные через GraphQL, рендерит страницы на сервере (SSR) или статически (ISR/SSG) и обрабатывает маршрутизацию и взаимодействие с клиентом. Код хранится в Git и автоматически разворачивается благодаря Git‑интеграции Cloudflare.</li><li>Cloudflare Workers - размещают приложение Next.js на edge через OpenNext. Workers исключают cold-starts и работают по аналогии с CDN как можно ближе к пользователю. Они также выполняют кэширование, обрабатывают API‑маршруты и запускают cron‑задачи.</li><li>Кэш на edge и в браузере - несколько уровней кэша гарантируют быструю отдачу статики и отрендеренных страниц. KV, R2 или D1 могут хранить дополнительные данные вроде сессий или объектов.</li></ol><h2>Заключение</h2><p>Headless‑архитектура объединяет универсальность WordPress и гибкость современных JavaScript‑фреймворков. Экспонируя контент через WPGraphQL и потребляя его в Next.js, можно получить больше контроля над рендерингом и тем самым улучшить производительность. Размещение фронтенда на Cloudflare Workers через OpenNext позволяет приблизить фронтенд код к пользователям, устраняет cold-starts, позволяет использовать free-tier и продвинутые уровни кэширования. Инструменты вроде Bedrock, Sage, Trellis и Acorn модернизируют PHP/Wordpress‑сторону и делают CMS такой же удобной в работе, как и современный Next.js/React-фронтенд. Вместе эти технологии создают мощный стек для создания быстрых, масштабируемых и безопасных сайтов, будь то хакатон, pet‑проект или серьёзный продакшн.</p>]]></content:encoded>
    </item>
    <item>
      <title>Trivy: полный чек-лист по защите CI/CD и разбор инцидента</title>
      <link>https://tproger.ru/articles/ataki-na-trivy--kak-skaner-uyazvimostej-stal-vektorom-ataki-i-chto</link>
      <comments>https://tproger.ru/articles/ataki-na-trivy--kak-skaner-uyazvimostej-stal-vektorom-ataki-i-chto?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Свидетель пятничного деплоя]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ataki-na-trivy--kak-skaner-uyazvimostej-stal-vektorom-ataki-i-chto</guid>
      <description><![CDATA[<p>Разбор двух атак на Trivy в феврале-марте 2026: CVE-2026-28353, ретроактивное отравление тегов GitHub Actions, CanisterWorm. Как проверить проект и защитить CI/CD.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ataki-na-trivy--kak-skaner-uyazvimostej-stal-vektorom-ataki-i-chto">Trivy: полный чек-лист по защите CI/CD и разбор инцидента</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 22 Mar 2026 08:48:29 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Что произошло: компрометация Trivy в 2026 году</h2><p>В марте 2026 <b>Trivy</b> — один из наиболее популярных open-source сканеров уязвимостей — был скомпрометирован дважды за три недели. Пострадали тысячи CI/CD-пайплайнов по всему миру. Если ваш проект использует Trivy или связанные с ним GitHub Actions, эта информация критически важна для защиты вашей инфраструктуры.</p><h2>Хронология инцидентов: две атаки за три недели</h2><h3>Первая атака: CVE-2026-28353 и hackerbot-claw</h3><p>Даты: 21–28 февраля 2026</p><p>Злоумышленники эксплуатировали критическую уязвимость в GitHub Actions-воркфлоу через механизм <b>pull_request_target</b>. Автономный бот <b>hackerbot-claw</b> автоматически создал Pull Request #10252, что позволило выполнить произвольный код в контексте с доступом к секретам репозитория. Через эту атаку было скомпрометировано VSCode-расширение Trivy, а вредоносная версия v1.8.12 попала в Open VSIX Registry.</p><p>Инцидент получил идентификатор <b>CVE-2026-28353</b> с максимальной оценкой критичности <b>CVSS 10.0</b>. Это означает полную компрометацию конфиденциальности, целостности и доступности системы. Причём исходный disclosure discussion (#10265) был удалён во время второго инцидента, что вызвало критику сообщества за недостаточную прозрачность в обработке уязвимостей.</p><h3>Вторая атака: TeamPCP и ретроактивное отравление тегов</h3><p>Дата: 19 марта 2026</p><p>Группа <b>TeamPCP</b> использовала учётные данные, украденные в первом инциденте, и опубликовала вредоносный релиз <b>v0.69.4</b>. Однако главная особенность этой атаки — <b>ретроактивное отравление тегов</b>: атакующие переместили (force-push) 76 из 77 существующих тегов релизов так, чтобы они указывали на вредоносный код.</p><p>Это означает, что даже если вы использовали «старую стабильную версию», вы также могли получить малварь. Команды, которые зафиксировали версии через теги, оказались под ударом, поскольку теги были изменены задним числом. Полезная нагрузка обеих атак была направлена на кражу секретов CI/CD: GitHub-токенов, npm-токенов, API-ключей и других данных из GitHub Secrets.</p><h3>Каскадный эффект: CanisterWorm</h3><p>Ситуация усугубилась каскадным эффектом: украденные npm-токены запустили <b>CanisterWorm</b> — самораспространяющегося червя, который заразил от 28 до 47 пакетов в npm-реестре.</p><h2>Как проверить свой проект на компрометацию: инструкция</h2><p>Если вы использовали Trivy или связанные GitHub Actions в период с февраля по март 2026 года, по умолчанию считайте, что ваш пайплайн скомпрометирован. Выполните следующие проверки в указанном порядке.</p><h3>1. Проверьте версии Trivy и GitHub Actions</h3><p>Откройте ваши workflow-файлы (.github/workflows/*.yml) и найдите использования trivy-action и setup-trivy. Обратите особое внимание на версии.</p><p><b>Статус версий на момент публикации (22.03.2026, 14:30 GMT+3):</b></p><figure><img src="https://media.tproger.ru/user-uploads/134134/2026-03-22/aa57f0fb-e90f-4282-9da5-d17718ce7cbe.webp" alt="Статус версий Trivy и связанных расширений на момент публикации" /><figcaption><br /></figcaption></figure><h3>2. Проанализируйте логи CI/CD на подозрительную активность</h3><p>Вредоносный код выполнял запросы к внешним серверам для эксфильтрации данных. При анализе логов workflow-запусков обращайте внимание на следующие индикаторы компрометации:</p><ul><li>Необъяснимые HTTP-запросы к неизвестным доменам или IP-адресам.</li><li>Запросы к canister-контейнерам на блокчейне Internet Computer (ICP), это характерный признак CanisterWorm.</li><li>Странное поведение переменных окружения, особенно GITHUB_TOKEN и NPM_TOKEN.</li><li>Подозрительные base64-кодированные строки в выводе, которые могут маскировать полезную нагрузку.</li></ul><h3>3. Проверьте npm-пакеты на заражение CanisterWorm</h3><p>Если ваши npm-токены были скомпрометированы, злоумышленники могли опубликовать через них вредоносные версии ваших пакетов. CanisterWorm самораспространяется: каждый заражённый пакет пытается заразить другие пакеты, к которым имеет доступ.</p><p>Используйте инструменты для сканирования ваших npm-пакетов на наличие вредоносного кода, зарубежные кибербез-издания рекомендуют <b>Socket.dev</b> или <b>Snyk</b>.</p><p>Особое внимание стоит уделить пакетам, опубликованным или обновлённым в период <b>с 19 по 22 марта 2026 года</b> — именно в это время происходила первичная волна распространения CanisterWorm.</p><h3>4. Проведите аудит учётных данных и токенов</h3><p>Надо определить, какие секреты были доступны скомпрометированным workflow. Проверьте следующие категории токенов:</p><p><b>GITHUB_TOKEN</b> — автоматически предоставляется workflow → доступ к репозиторию и коду<br /><b>NPM_TOKEN</b> — публикация npm-пакетов → публикация вредоносных версий<br /><b>DOCKER_USERNAME/PASSWORD</b> — публикация контейнеров → компрометация образов<br /><b>AWS_ACCESS_KEY_ID/SECRET</b> — доступ к облаку → несанкционированный доступ к инфраструктуре</p><h2>Как защитить CI/CD пайплайн: практическое руководство</h2><h3>1. Немедленно ротируйте все секреты</h3><p>Делать надо при наличии хотя бы минимальной вероятности компрометации. Не ждите подтверждения: к тому моменту злоумышленники уже могут использовать ваши токены для дальнейших атак.</p><p><b>Последовательность действий:</b><b></b></p><ol><li>Сгенерируйте новые токены для всех сервисов (GitHub, npm, Docker Hub, AWS и других).</li><li>Обновите секреты в настройках репозитория</li><li>Проверьте, что новые токены работают корректно (запустите тестовый workflow).</li><li>Отзовите старые токены.</li></ol><h3>2. Закрепляйте версии GitHub Actions через SHA-хеши</h3><p>Вместо тегов используйте <b>неизменяемые ссылки по SHA-хешу</b>. Это один из наиболее эффективных методов защиты от атак на зависимости.</p><p>Для получения SHA-хеша конкретной версии перейдите на страницу релиза или используйте команду git ls-remote для получения хеша конкретного тега.</p><h3>3. Реализуйте принцип минимальных привилегий для GITHUB_TOKEN</h3><p>По умолчанию GITHUB_TOKEN имеет достаточно широкие права доступа. Ограничьте их до минимально необходимых для каждого конкретного workflow:</p><ul><li>Отключите запись, если workflow только читает данные</li><li>Используйте блок permissions в каждом workflow для явного указания требуемых прав</li><li>Не передавайте токен в шаги, которым он не нужен</li></ul><h3>4. Защитите pull_request_target</h3><p>Этот тип триггера особенно опасен: workflow выполняется в контексте базовой ветки с доступом к секретам. Если вам необходим pull_request_target, применяйте следующие меры защиты:</p><p><b>Никогда не выполняйте код из PR</b> в контексте с секретами — сначала проверяйте источник. <br /><br /><b>Используйте явные проверки</b> на доверенные источники перед выполнением кода. <br /><br /><b>Рассмотрите альтернативные паттерны</b> запуска workflow, например pull_request вместо pull_request_target. <br /><br /><b>Изолируйте привилегированные операции</b> в отдельные workflow с ограниченным доступом.</p><h3>5. Настройте мониторинг и оповещения</h3><p>Настройте мониторинг на все критичные точки входа в ваш CI/CD процесс:</p><ul><li>Уведомления о необычных workflow-запусках — особенно в нерабочее время или из незнакомых источников.</li><li>Алерты на подозрительные исходящие запросы из CI/CD (особенно на неизвестные домены и IP).</li><li>Контроль публикаций пакетов — отслеживайте, кто, когда и откуда публикует пакеты в ваши реестры.</li></ul><p>А ещё чистите зубы, мойте руки с мылом и надевайте шапку.</p><h2>Технические детали для юных детективов: как сработали атаки на Trivy</h2><h3>Бот hackerbot-claw</h3><p>Инцидент начался 27 февраля 2026 года, когда автономный бот hackerbot-claw создал Pull Request #10252 в репозитории Trivy. Бот эксплуатировал workflow с использованием pull_request_target, который позволял выполнить произвольный код в контексте с доступом к секретам репозитория.</p><p>Результат атаки — скомпрометированное VSCode-расширение Trivy. Версия 1.8.12, попавшая в Open VSIX Registry, содержала вредоносный код, который выполнял следующие действия:</p><ol><li>Собирал конфиденциальные данные из среды разработки пользователя.</li><li>Эксфильтрировал украденные данные на командный сервер злоумышленников.</li><li>Создавал персистентный бэкдор для повторного доступа.</li></ol><p>NVD зарегистрировала инцидент как <b>CVE-2026-28353</b> с оценкой CVSS 10.0 — максимально возможной оценкой, указывающей на полную компрометацию информационной безопасности.</p><h3>Ретроактивное отравление тегов</h3><p>Группа TeamPCP получила write-доступ к репозиторию Trivy через скомпрометированные учётные данные, украденные в первом инциденте.</p><p>Ключевая инновация атаки — ретроактивное отравление тегов. Атакующие не просто опубликовали новую вредоносную версию — они переместили 76 из 77 существующих тегов так, чтобы те указывали на вредоносный код. Это означает, что под удар попадает любой пользователь, который:</p><ul><li>Использовал trivy-action@latest</li><li>Использовал конкретную версию через тег</li><li>Фиксировал зависимости через теги</li></ul><h3>CanisterWorm: блокчейн как командный сервер</h3><p>Отдельного внимания заслуживает CanisterWorm — малварь, распространившаяся через скомпрометированные npm-токены.</p><p><b>Ключевые особенности CanisterWorm:</b></p><ol><li>Использование блокчейна Internet Computer (ICP) как C2-сервера — децентрализованная инфраструктура, устойчивая к традиционным методам блокировки доменов и IP-адресов.</li><li>Автоматическое распространение — каждый заражённый пакет пытается заразить другие пакеты в экосистеме.</li><li>Кража токенов из среды разработчиков и CI/CD окружения для расширения сферы влияния.</li><li>Персистентный бэкдор для повторного несанкционированного доступа.</li></ol><h2>FAQ / TLDR</h2><h3>Как проверить, использовал ли я скомпрометированную версию Trivy?</h3><p>Проверьте ваши workflow-файлы в .github/workflows/*.yml на наличие версий v0.69.4 для Trivy или любых версий для trivy-action от 19 марта 2026 года. Также проверьте логи CI/CD на подозрительную активность: исходящие запросы к неизвестным доменам, особенно к canister-контейнерам на ICP.</p><h3>Что делать, если я обнаружил компрометацию?</h3><p>Немедленно ротируйте все секреты, которые передавались в workflow, отдельное внимание уделите GITHUB_TOKEN и NPM_TOKEN. Проверьте npm-пакеты на заражение CanisterWorm с помощью Socket.dev или Snyk. Проведите аудит всех публикаций в реестры за период с февраля по март 2026 года.</p><h3>Почему атака на сканер уязвимостей особенно опасна?</h3><p>Инструменты безопасности работают с максимальными привилегиями в инфраструктуре. Они имеют доступ к коду, секретам и конфиденциальным данным. Компрометация инструмента безопасности даёт злоумышленнику всё то, что этот инструмент защищает — секреты CI/CD, код и доступ к инфраструктуре.</p><h3>Как защититься от атак на зависимости в будущем?</h3><p>Используйте SHA-хеши вместо тегов для закрепления версий зависимостей. <br /><br />Применяйте принцип минимальных привилегий для всех токенов в CI/CD.<br /><br />Настройте регулярную ротацию секретов. <br /><br />Мониторьте исходящий трафик из CI/CD на предмет аномалий. <br /><br />Проводите регулярный аудит зависимостей и их источников.</p><p>Материал подготовлен по открытым данным.</p><p><b>Основные источники:</b> CrowdStrike, StepSecurity, Socket.dev, Ars Technica, Apache Foundation, Aikido Security, The Hacker News, NVD (CVE-2026-28353), GitHub Discussion #10265, Chainguard.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как готовить Dockerfile: больше, чем FROM и RUN</title>
      <link>https://tproger.ru/articles/kak-gotovit-dockerfile--bolwe--chem-from-i-run</link>
      <comments>https://tproger.ru/articles/kak-gotovit-dockerfile--bolwe--chem-from-i-run?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Лесных Анна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-gotovit-dockerfile--bolwe--chem-from-i-run</guid>
      <description><![CDATA[<p>Cобираем Dockerfile для продакшена: от простейшего рабочего варианта до оптимизированного и безопасного multi-stage-решения.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-gotovit-dockerfile--bolwe--chem-from-i-run">Как готовить Dockerfile: больше, чем FROM и RUN</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 19 Mar 2026 10:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Я работаю в <a href="https://express42.com/?utm_source=web&amp;utm_medium=tproger&amp;utm_campaign=ockerfile">«Экспресс 42»</a> — подразделении «Фланта», которое консультирует компании по внедрению и использованию практик DevOps-методологии.</p><p>В этой статье я расскажу, как подготовить Dockerfile — основу любого контейнерного образа: как избежать типичных ошибок и сделать Dockerfile максимально подходящим для продакшена.</p><h2>Что такое Dockerfile</h2><p>Готовое приложение должно стабильно собираться и работать в любых условиях. Этого можно добиться, если поместить код приложения и все необходимые ему компоненты (ОС, библиотеки, фреймворки) в изолированную среду — контейнер.</p><p>Для приложения важно, чтобы контейнер, в котором оно запускается, всегда собирался правильно и единообразно. Чтобы этого добиться, нужно подготовить специальную инструкцию — Dockerfile. В этом файле описывают, какой базовый образ взять за основу, какое ПО установить, какие команды выполнить при запуске приложения и так далее.</p><p>Dockerfile можно составить по-разному, и даже самые примитивные его варианты могут работать, но это не значит, что их стоит использовать. Давайте вместе пройдём путь от самого простого Dockerfile до состояния production ready.</p><h2>1. Лишь бы запустилось</h2><p>Представим, что мы написали приложение на Go, которое нужно поскорее залить в продакшен. Подготовим простейший Dockerfile:</p><p>Тут я взял последнюю версию образа Golang, скопировал весь проект, установил зависимости, собрал и запустил бинарник.</p><p>Внешне всё хорошо: образ собирается, приложение запускается. Но на самом деле у меня получился типичный результат из серии «минимум усилий — максимум проблем». И вот почему:</p><ul><li>Получившийся образ очень тяжёлый — весит 1,3 ГБ. В него попали папка .git, README, тесты и другие файлы, которые засоряют рантайм.</li><li>Сборка непредсказуема, так как для базового образа Golang используется тег latest — завтра версия Go может измениться, и контейнер уже не будет идентичен текущему.</li><li>Каждая новая сборка занимает 5–10 минут, потому что каждый билд начинается с нуля, а кеши слоев инвалидируются из-за появления новых файлов.</li><li>Коллегам будет непонятно, кто собирал образ и зачем, — история сборок непрозрачная, так как нет меток (LABEL).</li><li>Есть риски безопасности — команды в контейнере запускаются с правами пользователя root, поэтому любое уязвимое приложение получает права администратора внутри контейнера.</li></ul><p>Получается, что первая версия Dockerfile работает, но плохо. Контейнер собрался, но его нельзя использовать в проде. Попробуем сделать образ менее крупным и более предсказуемым.<br /></p><h2>2. Первые улучшения: воспроизводимая сборка</h2><p>Чтобы версия Golang не менялась от сборки к сборке, пропишем в Dockerfile конкретную версию. Это также сделает образ воспроизводимым и уменьшит его объём.</p><p>Добавим метки LABEL, чтобы было понятно, что это за образ и кто его поддерживает. Также благодаря меткам этот Dockerfile будет проще найти в registry.</p><p>Определим рабочую директорию (WORKDIR) для организации файлов внутри контейнера и заменим go mod tidy на go mod download. Дело в том, что tidy в Docker — плохая идея, потому что он меняет манифесты зависимостей, может модифицировать go.mod/go.sum. Это делает билд непредсказуемым: вы каждый раз рискуете получить чуть другой результат. go mod download лишён этого недостатка — он просто скачивает зависимости строго по зафиксированным манифестам.</p><p>И напоследок выделим в отдельный файл (.dockerignore) всё то, что не должно попадать в образ.</p><p>Вот что получилось:</p><p>Хорошие новости: образ стал весить меньше, стал воспроизводимым, а благодаря меткам и выделенной директории с ним стало удобнее работать. Но есть и плохая: образ по-прежнему не дотягивает до production ready.</p><ul><li>Для запуска образа нужен только бинарник, а в моём случае в финальном образе остаются исходники и кеш. Сборку и запуск лучше разделить, чтобы не тянуть в итоговый образ лишнее.</li><li>Я добавил .dockerignore, но он не идеален: в образ по-прежнему попадают тесты, временные файлы, а возможно, и конфиденциальная информация, например токены, ключи.</li><li>Я не выделил отдельного пользователя, от которого запускается контейнер, а значит, не решил проблему запуска от root, которая была ещё на прошлом этапе.</li></ul><p>Итак, как видим, необходимо оптимизировать сборку и запуск образа, а также обеспечить его безопасность.</p><h2>3. Multi-stage build: разделяем сборку и запуск образа</h2><p>Прежде всего, избавимся от лишнего: чтобы в финальный образ не попадали исходники и кеш, применим multi-stage-подход к созданию Dockerfile. Он предполагает, что сборка и запуск образа происходят на разных стадиях (stages). Таким образом, все зависимости и необходимые для сборки файлы останутся только на первой стадии.</p><p>Чтобы решить проблему с root, добавим группу пользователей и конкретного пользователя, от имени которого будет запускаться приложение.</p><p>Также учтём потребности приложения в runtime-зависимостях и конфигурации. Наше приложение работает с PostgreSQL, поэтому добавим в образ клиент postgresql17-client — он понадобится для запуска миграций через psql перед стартом приложения. А ещё приложение использует токен для авторизации API-запросов — пока передадим его через переменную окружения API_TOKEN.</p><p>В итоге Dockerfile будет выглядеть так:</p><p>Разберём, что ещё было сделано, чтобы оптимизировать образ. На этапе сборки я:</p><ul><li>зафиксировал зависимости — скачал их строго по зафиксированному go.sum;</li><li>собрал бинарник для Linux, чтобы сборка всегда проходила верно, даже если builder-образ изменится или сборка будет кросс-платформенной;</li><li>явно задал имя бинарника через флаг -o myapp  — это гарантирует, что имя файла всегда совпадёт с тем, на которое ссылаются COPY и ENTRYPOINT, даже если имя модуля в go.mod отличается от названия приложения;</li><li>сделал Go-бинарник независимым от системных библиотек, что позволит избежать проблем с совместимостью;</li><li>использовал ENTRYPOINT вместо CMD — теперь ./myapp нельзя случайно переопределить при docker run, а переданные аргументы будут добавляться к команде, а не заменять её.</li></ul><p>На этапе подготовки финального образа теперь:</p><ul><li>итоговый образ минимальный и не содержит компилятора Go;</li><li>копируется только бинарник, а не все файлы проекта;</li><li>явно указано, что нужно приложению для запуска (PostgreSQL-клиент);</li><li>кеш пакетного менеджера apk не создаётся и не увеличивает размер образа.</li></ul><p>Мы решили проблемы, которые выделили на предыдущем этапе. Dockerfile вроде бы готов к продакшену, но на всякий случай пройдёмся по файлу ещё раз. На этапе запуска можно заметить, что в ENV зашит секретный токен — из-за этого образ точно не пройдёт аудит безопасности, так как конфиденциальные данные нельзя хранить в коде.</p><p>Кроме того, контейнеру не помешает HEALTHCHECK — без него Docker не узнает, отвечает приложение или зависло. Также, поскольку Dockerfile уже достаточно объёмный и сложный, можно добавить комментарии к элементам, которые важны для поддержки, но со временем перестанут быть очевидными. И последнее: так как образ предназначен для продакшена, лейблы можно подогнать под стандарты OCI, принятые в большинстве компаний.</p><h2>4. Финальный рывок: контейнер, которому можно доверять</h2><p>По традиции учтём недочёты предыдущего этапа и исправим Dockerfile.</p><p>Что изменилось:</p><ul><li>Я подогнал лейблы под стандарты OCI — теперь они соответствуют правилам, принятым в корпоративной среде.</li><li>Добавил аргументы BUILD_TIME и VERSION, чтобы время сборки и версия образа динамически добавлялись в метаданные из CI/CD. Это позволит не редактировать Dockerfile вручную при каждом релизе и сделает его более управляемым и прозрачным для аудита.</li><li>Объединил инструкции RUN в одну строку, чтобы сделать образ более компактным и улучшить читабельность.</li><li>Добавил комментарии и инструкции для указания порта и проверки доступности контейнера.</li><li>Определил запуск и поведение контейнера через ENTRYPOINT и CMD.</li></ul><p>Теперь в нашем Dockerfile не хранятся чувствительные данные, и он наконец соответствует всем формальным требованиям для продакшена.</p><h2>Вместо заключения: почему лучшие практики не всегда следует исполнять</h2><p>Сейчас мало кто работает с Dockerfile в терминале — чаще всего это делается через оркестратор, Kubernetes или как минимум Docker Compose. Поэтому, создавая Dockerfile, стоит помнить, что он не существует в отрыве от инфраструктуры. В таких условиях некоторые компоненты передаются в файл извне, а то, что считается лучшей практикой, не всегда применимо в реальности.</p><p>Так, в нашем случае передача порта, проверки доступности и параметры запуска могут быть определены в конфигурации инфраструктуры, например в docker-compose.yaml или в манифесте Deployment. Поэтому, чтобы не дублировать инструкции, можно удалить EXPOSE, HEALTHCHECK и CMD.</p><p>Вот наш итоговый оптимизированный, стабильный, multi-stage Dockerfile:</p><p>В этой статье мы ограничимся таким Dockerfile, однако при желании его можно ещё улучшить: например, вместо версии базового образа использовать хеш контейнера из registry, подключить <a href="https://hadolint.com/" rel="nofollow">hadolint</a> для автоматического линтинга, написать README с инструкциями по сборке и запуску, унести секреты в специальное хранилище, добавить проверку на уязвимости.</p>]]></content:encoded>
    </item>
    <item>
      <title>1 месяц, 1 эксперт и сокращение расходов в 30 раз: как мы разработали и внедрили свой ASOC в Банке</title>
      <link>https://tproger.ru/articles/1-mesyac--1-komanda-i-sokrashhenie-rashodov-v-30-raz--kak-my-razrab</link>
      <comments>https://tproger.ru/articles/1-mesyac--1-komanda-i-sokrashhenie-rashodov-v-30-raz--kak-my-razrab?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Екатерина Соколова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/1-mesyac--1-komanda-i-sokrashhenie-rashodov-v-30-raz--kak-my-razrab</guid>
      <description><![CDATA[<p>ОТП Банк собрал систему, которая использует разные подходы оценки безопасности DevSecOps при создании каждого Pull Request — ещё до слияния с основной веткой. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/1-mesyac--1-komanda-i-sokrashhenie-rashodov-v-30-raz--kak-my-razrab">1 месяц, 1 эксперт и сокращение расходов в 30 раз: как мы разработали и внедрили свой ASOC в Банке</a>»</p>]]></description>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 05 Feb 2026 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>⭐</b> <b>Участник Продуктовой Премии Tproger 2025 — проголосовать за кейс <a href="https://tprg.ru/OUDg">можно по ссылке</a></b></p><p><i>Проблемы безопасности, найденные на финальных этапах эксплуатации/продакшен, обходятся до тридцати раз* дороже, чем найденные в процессе активной разработки. </i></p><p>ОТП Банк спроектировал и внедрил систему, которая применяет различные практики подходов оценки безопасности DevSecOps при создании каждого Pull Request — ещё до слияния с основной веткой.</p><p>За месяц один опытный инженер спроектировал систему, а потом в течение 3 месяцев совместно с коллегами внедрил систему, которая снизила затраты на устранение проблем безопасности до 30 раз и существенно разгрузила нагрузку с команд разработчиков.</p><p><i>* согласно<a href="https://www.ibm.com/reports/data-breach"> IBM Cost of a Data Breach Report</a> и<a href="https://csrc.nist.gov/publications/detail/sp/800-30/rev-1/final"> NIST Guide for Conducting Risk Assessments</a></i></p><h2>Задача: найти уязвимости до их попадания в продакшен</h2><p><b>Бизнес-задача </b>— снизить репутационные риски компании и операционные затраты на исправление проблем информационной безопасности. Чем позже находится уязвимость, тем дороже её устранение: если баг в коде пропустили на этапе разработки, его обнаружат уже в продакшене, когда придётся откатывать релизы и экстренно патчить систему.</p><p><b>Техническая задача </b>— создать автоматический сканер по всем практикам DevSecOps, который выявляет проблемы безопасности на самом раннем этапе: при создании Pull Request для слияния с основной веткой репозитория. Система должна работать независимо от платформы, выдерживать повышенные нагрузки и автоматически создавать задачи на устранение найденных проблем.</p><p>В банке уже были инструменты оценки безопасности проектов. Мы хотели создать систему, которая стала бы единой точкой входа для всех типов сканеров, плюс добавить оркестрацию и интеграцию с другими системами.</p><h2>Параметры проекта</h2><p><b>Срок создания архитектуры:</b> 1 месяц</p><p><b>Срок разработки:</b> 3 месяца от постановки задачи до релиза</p><p><b>Технологический стек:</b> Python, Docker Compose, PostgreSQL, LDAP, LLM</p><p><b>Статус:</b> внутренняя разработка, активно развивается</p><h2>Архитектура: модульная система на Docker</h2><p>Система представляет набор сервисов на Docker Compose, которые можно развернуть на любой машине на базе ОС *nix.</p><p><i>* - любой из возможных префиксов существующих ОС, построенных на базе Unix.</i></p><p><b>Архитектура построена по модульному принципу:</b></p><p>→ Модуль обработки/записи событий от внешних систем</p><p>→ Модуль управления очередью очереди событий</p><p>→ Модуль управления состоянием событий</p><p>→ Модули для каждой практики DevSecOps</p><p>→ Модули сервисных процедур</p><p>→ Модули работы с таблицами базы данных</p><p>→ Модуль автоматического создания задач в job-tracker</p><p>→ Ядро системы</p><p><b>Описание функционала: </b></p><p>Pull Request создан/изменён</p><p>Внешними системами созданы WEB-hooks</p><p>→ Каждый модуль системы отвечает за конкретную практику DevSecOps/сервисную процедуру</p><p>→ Ядро обеспечивает координацию работы модулей и реализацию логики системы в целом</p><p>→ Результаты записываются в единую базу данных на основе PostgreSQL</p><p>→ Логи работы системы и её компонентов передаются в БД или внешний агрегатор событий</p><p>→ Автоматическое создание задач на устранение проблем</p><p>→ Аутентификация через LDAP</p><p>→ Дедубликация уязвимостей</p><figure><img src="https://media.tproger.ru/user-uploads/113485/2026-01-28/49ffa5c8-8b6c-4f2b-8e1c-0dfffd3eb982.webp" alt="" /></figure><p>Ядро системы управляет соответствующими модулями выявления проблем с безопасностью, а также прочими сервисными процедурами. Каждый сервис является самостоятельным и отвечает за функционал по конкретной практике DevSecOps. Это даёт независимость от платформы и возможности горизонтального и вертикального масштабирования.</p><p>Модульная архитектура была выбрана, потому что это удобно и потенциально выгодно для горизонтального расширения, есть возможность создания контуров High Availability. Каждый модуль можно масштабировать отдельно под нагрузку.</p><h2>Пять ключевых возможностей сканера</h2><p><b>1. Проверка на этапе Pull Request</b></p><p>Система срабатывает автоматически при попытке слить код с основной веткой. Разработчик создаёт PR — сканер запускается и анализирует изменения на все известные уязвимости.</p><p>В едином инструменте разработчика видны статусы прохождения Quality Gate. Ссылки на отчёты находятся прямо в Git-системе, а цвет отчёта сразу говорит о наличии проблем.</p><p><b>2. Полная автоматизация без участия команды</b></p><p>Вся проверка происходит без действий со стороны разработчиков или DevSecOps-инженеров. Не нужно запускать сканы вручную, отслеживать результаты или формировать отчёты. Система сама находит проблемы, записывает их в базу и создаёт задачи на устранение с указанием ответственных лиц.</p><p>Не требуется привлечение команд для настройки pipeline. Автоматическое создание задач включает проверку на дублирование — если задача на такую же уязвимость уже есть, новую не создаём.</p><p><b>3. Интеграция со сторонними инструментами</b></p><p>Сканер может работать с внешними сканерами безопасности и агрегаторами событий. Это позволяет встроить его в существующую инфраструктуру банка без перестройки процессов. Логи системы передаются в PostgreSQL или внешние системы мониторинга.</p><p>В BI на дашборде можно получить информацию по статусам сканирования всех проектов. Менеджеры могут получить общую картину состояния безопасности по каждому проекту Банка.</p><p><b>4. Работа под высокой нагрузкой</b></p><p>Система выдерживает одновременную проверку множества Pull Request без деградации производительности. Модульная архитектура позволяет масштабировать сервисы горизонтально — добавлять новые контейнеры под нагрузку, или вертикально — увеличивать ресурсы существующих.</p><p><b>5. Фильтрация ложных срабатываний через LM</b></p><p>Статические анализаторы кода часто выдают false positive — помечают безопасный код как небезопасный, но в реальности это не так. Это создаёт шум и заставляет разработчиков тратить время на проверку несуществующих проблем. Для решения этой задачи в систему интегрировали специализированную языковую модель, которая анализирует контекст и отсеивает ложные срабатывания.</p><p>Отчёт о найденных уявимостях содержит только релевантную информацию.</p><p><b>6. Модификация пояснений к уявзимостям через LM</b></p><p>Статические анализаторы кода часто предоставляют инструкцию по устранению выявленных уязвимостей в неинтуитивном/неструктурированном виде. Это создаёт трудности для разработчиков и увеличивает time-to-market для создаваемых программных продуктов в целом. Для решения этой задачи в систему интегрирована большую специализированная языковая модель, которая оптимизирует текст и делает инструкция более понятной и эффективной.</p><p>Задачи содержат эффективные инструкции по устранению выявленных уязвимостей в коде.</p><p><b>7. Дайджест по уязвимостям</b></p><p>Статические анализаторы кода обычно предоставляют развёрнутую информацию  по выявленным уязвимостям, часто они содержат неревантную для устранения информацию. Это повышает нагрузку на разработчиков, что является неэффективным подходом. Для решения этой задачи в система создаёт дайджест с найденными уязимостями и отдельной ссылкой на полной отчёт сканера.</p><p>В отчёте есть дайджест по найденным уязвимостям с понятным описанием. Разработчик сразу видит, что критично, а что можно отложить.</p><h2>Главные трудности в реализации</h2><h4>🔴 Сложность логики выявления артефактов сканирования</h4><p>Нужен был подробный анализ логики внешних систем безопасности, чтобы корректно извлекать и интерпретировать результаты их работы. Каждый сканер выдаёт данные в своём формате, с разной степенью детализации.</p><p><b>✅ Решение: </b>Провели анализ выходных данных всех используемых инструментов и создали унифицированные модули парсинга. Каждый модуль преобразует специфичный формат внешнего сканера в единую структуру для записи в PostgreSQL.</p><h4>🔴 Специфика работы разных сканеров</h4><p>Инструменты DevSecOps работают по-разному: одни проверяют зависимости, другие — статический код, третьи — конфигурации. Нужно было объединить их в единую систему без потери функциональности.</p><p><b>✅ Решение:</b> Разработали модульную архитектуру, где каждый сервис отвечает за конкретную практику DevSecOps и работает независимо. Это позволило легко добавлять новые типы проверок без переписывания всей системы.</p><h4>🔴 Отсутствие информации о состоянии процессов</h4><p>Внешние системы не всегда предоставляют актуальную информацию о статусе проверок в режиме реального времени. Сложно понять, завершился ли скан или ещё выполняется.</p><p><b>✅ Решение: </b>Настроили систему событий (events), которая отслеживает изменения состояний во внешних инструментах и синхронизирует данные.</p><h4>🔴 Отсутствие стандартизации в выполнении операций в CI/CD</h4><p>Современные системы CI/CD предоставляют обширный выбор в реализации того или иного шага, будь то сборка проекта или пуш готового образа. Есть сложность в интерпретации выполняемых операций и предсказания ожидаемого типа артефакта на выходе, например, образ или биллютень используемых в разработке сторонних компонентов.</p><p><b>✅ Решение: </b>Создали отдельные модули анализа и парсинга этапов CI/CD, что позволило гарантировано определить scope применимых практик DevSecOps, тем самым повысить эффективность оценки уровня безопасности проекта в целом.</p><h2>Результаты: экономия и качество кода</h2><p>Снижение расходов на устранение проблем безопасности до 30 раз за счёт раннего анализа — исправить уязвимость на этапе PR в разы дешевле, чем после релиза в продакшен.</p><p><b>Главные эффекты для бизнеса: </b>повышение качества кода продукта через постоянные автоматические проверки, снижение репутационных рисков компании за счёт предотвращения утечек и инцидентов безопасности, снижение технического долга команд разработки, улучшение процессов разработки через встраивание security practices в ежедневный workflow.</p><p>Полная автоматизация освободила разработчиков и DevSecOps-инженеров от рутинной работы по запуску сканов и анализу результатов. Система работает сама — от триггера PR до создания задачи на исправление.</p><h2>Планы развития</h2><ol><li>Интегрировать в систему процессы выявления проблем безопасности при разработки собственных LM;</li><li>Интегрировать в систему процессы выявления проблем безопасности при разработки агентов AI;</li><li>Интегрировать в систему процессы выявления проблем безопасности при внедрении LLM;</li><li>Интеграция с системой класса ASPM;</li><li>Интеграция с собственной системой уведомления;</li><li>Внедрение метрик health-check для оценки состояния работоспособности системы и её компонентов.</li></ol><p><i>Реклама. АО «ОТП Банк», ИНН 7708001614, erid: 2W5zFHcyG5F</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Сертификат на процессы, а не на версию: Cloud.ru решил давнюю боль облаков для госсектора</title>
      <link>https://tproger.ru/news/sertifikat-na-processy--a-ne-na-versiyu--cloud-ru-rewil-davnyuyu-bo</link>
      <comments>https://tproger.ru/news/sertifikat-na-processy--a-ne-na-versiyu--cloud-ru-rewil-davnyuyu-bo?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Неопознанный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/sertifikat-na-processy--a-ne-na-versiyu--cloud-ru-rewil-davnyuyu-bo</guid>
      <description><![CDATA[<p>Cloud.ru первым в России сертифицировал процессы безопасной разработки ФСТЭК, ускорив обновления облаков для госсектора без пересертификации</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/sertifikat-na-processy--a-ne-na-versiyu--cloud-ru-rewil-davnyuyu-bo">Сертификат на процессы, а не на версию: Cloud.ru решил давнюю боль облаков для госсектора</a>»</p>]]></description>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 03 Feb 2026 10:15:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Cloud.ru стал первым облачным провайдером в России, который построил полноценный конвейер безопасной разработки (РБПО) и прошел независимую внешнюю сертификацию ФСТЭК России по ГОСТ Р 56939-2024. Это позволяет выпускать обновления сертифицированных продуктов быстрее, чем при классической схеме посборочной сертификации.</p><h2>Почему это важно</h2><p>Госсектор и критическая инфраструктура требуют сертифицированных решений, но классическая сертификация — это сертификация конкретной версии продукта. Любое обновление означает повторную внешнюю сертификацию: около 10 месяцев ожидания и затраты от 2 млн рублей. Облачные продукты обновляются постоянно, поэтому заказчики из госсектора оказываются перед выбором: устаревший, но сертифицированный софт или актуальный, но без сертификата.</p><p>Сертификат РБПО работает иначе: ФСТЭК проверяет не конкретную сборку, а сам конвейер разработки — CI/CD-пайплайн с интегрированными проверками безопасности на каждом этапе. Сертификация подтверждает наличие и фактическое выполнение всех процессов РБПО: управление уязвимостями, контроль цепочки поставок, анализ исходного кода, тестирование безопасности и управление изменениями. Требования охватывают весь жизненный цикл — от проектирования архитектуры до внедрения и сопровождения.</p><p>Аудиторы проводят интервью с командами разработки, анализируют технологические артефакты и оценивают реальное выполнение практик — сам факт наличия регламентов не является подтверждением соответствия.</p><h2>Что это дает клиентам</h2><p>Сертификация подтверждает, что продукты Cloud.ru соответствуют актуальным требованиям регуляторов и могут применяться в проектах с повышенными требованиями к информационной безопасности:</p><ul><li>в государственных информационных системах</li><li>на платформе «ГосТех»</li><li>в цифровых платформах госкорпораций</li><li>в организациях с требованиями РРПО и ФСТЭК России</li></ul><p>Областью применения сертификата РБПО является Cloud.ru Evolution Stack — модульная платформа для создания частного, гибридного или распределенного облака. В сентябре 2025 года Evolution Stack получил сертификат ФСТЭК России №4979, который подтверждает соответствие требованиям к средствам технической защиты информации (4 уровень доверия) и к средствам виртуализации и контейнеризации (4 класс защиты).</p><p>Новый сертификат РБПО дополняет сертификат №4979: теперь обновления платформы не требуют повторной внешней сертификации каждой версии.</p><h2>Контекст</h2><p>На российском рынке облаков для госсектора конкуренция растет, и наличие сертификатов становится базовым требованием, а не преимуществом. Cloud.ru выстроил полный цикл РБПО и прошел независимую внешнюю сертификацию — пока единственный среди облачных провайдеров.</p>]]></content:encoded>
    </item>
    <item>
      <title>Аренда облака за рубежом в 2026 году: 5 провайдеров с оплатой в рублях</title>
      <link>https://tproger.ru/articles/arenda-oblaka-za-rubezhom-v-2026-godu--5-provajderov-s-oplatoj-v-rublyah</link>
      <comments>https://tproger.ru/articles/arenda-oblaka-za-rubezhom-v-2026-godu--5-provajderov-s-oplatoj-v-rublyah?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/arenda-oblaka-za-rubezhom-v-2026-godu--5-provajderov-s-oplatoj-v-rublyah</guid>
      <description><![CDATA[<p>Собрали пять провайдеров, которые дают облачную инфраструктуру за рубежом и при этом работают с российскими компаниями на понятных условиях.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/arenda-oblaka-za-rubezhom-v-2026-godu--5-provajderov-s-oplatoj-v-rublyah">Аренда облака за рубежом в 2026 году: 5 провайдеров с оплатой в рублях</a>»</p>]]></description>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CDN]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 Jan 2026 14:52:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Компании, которые работают на международных рынках или планируют выход за пределы России, сталкиваются с типичным набором задач: нужно развернуть инфраструктуру рядом с конечными пользователями, контролировать требования местных регуляторов по локализации данных, дать минимальные задержки для сервисов.</p><p>Гиперскейлеры предлагают стандартные решения, но если нужна кастомизация — вариантов мало. Местные провайдеры за рубежом работают по своим правилам: оплата строго в валюте, поддержка на английском, а специфику российских команд понимают не всегда.</p><p>Разобрали пять провайдеров, которые предоставляют облачную инфраструктуру за рубежом и при этом работают с российскими компаниями на понятных условиях.</p><h2>Критерии сравнения</h2><p>При выборе провайдера для размещения за рубежом нужно учитывать несколько параметров:</p><h4>География присутствия</h4><p>Чем ближе дата-центр к региону ведения бизнеса, тем ниже задержки в работе сервисов и выше скорость отклика для конечных пользователей. Размещение инфраструктуры в конкретной юрисдикции помогает соблюдать требования местных законов о хранении и обработке данных. Если вы планируете расширение на другие рынки, имеет смысл сразу выбрать провайдера с широкой сетью присутствия — это ускорит запуск в новых регионах.</p><h4>Процесс оплаты и виды договоров</h4><p>В какой валюте принимают платежи, с каким юрлицом (российским или зарубежным) заключается договор. От этого зависят бухгалтерские процессы и налоговые нюансы.</p><h4>Форматы предоставления ресурсов</h4><p>Облачные серверы (shared или dedicated vCPU) или выделенные физические серверы. Виды услуг — Public Cloud, Private Cloud, инфраструктура с GPU для машинного обучения, VDI-решения, S3-хранилища, managed ITdatabases.</p><p>Чем шире набор услуг у провайдера, тем больше вероятность закрыть все потребности по инфраструктуре через одного подрядчика — это даёт единое окно управления и одного ответственного за все компоненты системы.</p><h4>Техподдержка</h4><p>Язык общения и время отклика. Для команд без свободного английского русскоязычная поддержка сокращает время решения инцидентов.</p><h2>ITGLOBAL.COM — облачный провайдер 12 дата-центров в 10 странах</h2><p>Компания развернула 12 облачных площадок в локациях от Торонто до Шэньчжэня. География присутствия включает Нидерланды (Амстердам), ОАЭ (Дубай), Бразилию (Сан-Паулу), Центральную Азию (два ЦОДа в Казахстане Алматы, и один <a href="https://itglobal.com/ru-ru/company/data-center/east-telecom-ya-dc-data-centr-v-uzbekistane/?utm_source=tproger&amp;utm_medium=cdc&amp;utm_campaign=geo-top-providers-26">дата-центр в Узбекистане</a>, в Ташкенте, Китай (Шэньчжэнь), Северную Америку (Торонто и Нью-Джерси), Беларусь (Минск) и Россию (2 дата-центра в Москве). Облачные площадки размещены в проверенных сетях дата-центров Cologix, Equinix, IXcellerate и других партнёров; используемые дата-центры соответствуют стандарту Uptime Institute Tier III.</p><p>20 января 2026 года провайдер запускает <a href="https://itglobal.com/ru-ru/company/data-center/data-czentr-v-kitae-seaarea-shenzhen/?utm_source=tproger&amp;utm_medium=cdc&amp;utm_campaign=geo-top-providers-26">новую облачную площадку в Китае</a> на базе дата-центра SeaArea Shenzhen, расположенного в районе Лунган (Шэньчжэнь). Дата-центр входит в инфраструктуру Henggang Data в Южном Китае, соответствует уровню Tier III, устойчив к землетрясениям до 8 баллов и обеспечивает круглосуточную поддержку. Расположение в Шэньчжэне, рядом с Гонконгом, даёт удобную сетевую связность в регионе; близость к производственным кластерам и площадкам вендоров сокращает логистику и ускоряет ввод оборудования, что упрощает масштабирование инфраструктуры.</p><p>Формат работы построен под российские компании: можно заключить договор с российским или зарубежным юр.лицом ITGLOBAL.COM, оплачивать услуги в рублях, евро, долларах, юанях или криптовалюте. Русскоязычная техподдержка работает круглосуточно и входит в стоимость. Если команде нужен привычный процесс взаимодействия без языковых барьеров и разницы в понимании SLA — здесь это реализовано.</p><h3>Что можно развернуть</h3><p>На базе зарубежных площадок доступен полный стек облачных сервисов: публичное облако на VMware или vStack, частное облако на VMware, аренда инфраструктуры с GPU, аренда удалённых рабочих столов (VDI и 3D VDI), S3-хранилище, хостинг ERP-систем, решения для аварийного восстановления и георезервирования. Провайдер готов кастомизировать конфигурации под проект — это скорее исключение для зарубежного рынка, где обычно предлагают только пакетные решения.</p><p>Дополнительно есть услуги по администрированию инфраструктуры, а также дают набор продуктов и сервисов, чтобы усилить информационную безопасность.</p><h3>Когда это работает</h3><p>Типичные сценарии для развертывания <a href="https://itglobal.com/ru-ru/services/virtual-infrastructure/oblako-v-zarubezhnyh-czodah/?utm_source=tproger&amp;utm_medium=cdc&amp;utm_campaign=geo-top-providers-26">облака в зарубежных ЦОДах</a>: открытие представительства в новой юрисдикции с требованиями по локализации персональных данных, запуск дополнительной зоны присутствия для сервисов, чувствительных к задержкам (например, онлайн-сервисы или финтех-приложения для пользователей в Европе или Азии), реализация DR-планов с хранением резервных копий за пределами основной площадки.</p><h3>Партнерские возможности</h3><p>ITGLOBAL.COM предлагает <a href="https://itglobal.com/ru-ru/partners/geograficheskoe-partnerstvo/?utm_source=tproger&amp;utm_medium=cdc&amp;utm_campaign=geo-top-providers-26">географический сценарий партнёрства.</a> Он обеспечивает партнёрам быстрый выход на зарубежные рынки и возможность предоставления облачных услуг за рубежом. Масштабирование в новые регионы реализуется за счёт использования готовой распределенной инфраструктуры и экспертизы ITGLOBAL.COM.</p><p>Партнёры могут выступать реселлерами и продавать услуги ITGLOBAL.COM под собственным брендом, привлекая международных клиентов, сопровождая проекты и получая партнёрские скидки от базовых цен провайдера. Такой сценарий подходит технологическим компаниям с международной клиентской базой и локальным интеграторам, выходящим на новые рынки.</p><p>Для запуска или расширения собственного облачного бизнеса на зарубежных рынках может быть реализована модель White‑Label. Сценарий подходит облачным провайдерам, телеком‑операторам и инсорсинговым компаниям, расширяющим географию присутствия.</p><p>Для крупных проектов по запросу партнёра возможен запуск облачной площадки в нужной стране, если текущие локации не закрывают требуемую географию.</p><h2>2. Hostkey — хостинг-провайдер с собственным парком серверов</h2><p><a href="https://hostkey.ru/vps/oblachnyj-server/">Hostkey</a> работает на рынке 14 лет, управляет более чем 5000 серверами в дата-центрах России, Нидерландов и США. Формат работы ориентирован на российских клиентов: оплата в рублях картами российских банков, техподдержка на русском языке с откликом до 15 минут, возможность заключить договор с российским юр.лицом.</p><h3>Что предлагает провайдер</h3><p>Линейка начинается с VPS (виртуальные серверы с разделяемыми ресурсами) и VDS с выделенным vCPU — подходит для проектов, где нужна предсказуемая производительность без влияния соседей по физическому серверу. Для задач машинного обучения или рендеринга доступны VDS с GPU. Если стандартные конфигурации не подходят, можно собрать индивидуальную сборку или взять выделенный сервер.</p><p>Все виртуальные серверы управляются через API и контрольную панель — есть HTML5-консоль, управление питанием, переустановка ОС или установка системы с собственного ISO. Из коробки доступны предустановленные приложения: панели управления (ispmanager, Plesk, cPanel), система автоматизации n8n, VoIP для геймеров TeamSpeak, таск-трекер Plane, видеоконференции Jitsi.</p><h3>Когда это работает</h3><p>Типичные сценарии: веб-сайты и сервисы с низкой нагрузкой (блоги, CRM, CMS), VPN-серверы, репозитории кода, тестовые среды для разработки. Если проект требует высокой нагрузки — есть конфигурации до 16 виртуальных ядер, 2 TB дискового пространства на NVMe и порт 1 Гбит/с с бесплатными 3 TB трафика в месяц.</p><p>Бесплатная базовая DDoS-защита работает на серверах в России и Нидерландах. Для проектов с повышенными требованиями к безопасности доступны расширенные пакеты защиты, включая уровень приложений. Это актуально для игровых серверов, финансовых сервисов или публичных API, которые регулярно становятся мишенью для атак.</p><h3>Партнёрская модель и нестандартные задачи</h3><p>Hostkey предлагает White-Label решения для реселлеров и партнёров — можно использовать инфраструктуру под собственным брендом с гибкой системой вознаграждений. Компания позиционирует себя как провайдера для нестандартных задач: когда требуется адаптировать конфигурацию под специфичные требования проекта, команда готова проектировать и настраивать решения с нуля.</p><h2>3. Timeweb Cloud — европейские VDS с фокусом на Германию и Нидерланды</h2><p>Провайдер работает с дата-центрами уровня Tier III в двух локациях: Франкфурт (Германия) и Амстердам (Нидерланды). Обе площадки соответствуют GDPR, ISO и PCI DSS, обеспечивают SLA 99,98% и связаны с крупными интернет-магистралями Европы. Оплата принимается в рублях, что упрощает расчёты для российских команд без конвертации валюты.</p><p>Архитектура построена на тройном резервировании с региононезависимостью — если одна зона недоступна, нагрузка перераспределяется без простоя. Управление происходит через собственную панель, API, CLI или Terraform — можно автоматизировать развёртывание инфраструктуры и интегрировать серверы в существующий CI/CD pipeline.</p><h3>Что предлагает провайдер</h3><p><a href="https://timeweb.cloud/services/servers-europe">Линейка VDS и VPS</a> начинается с минимальных конфигураций (1 vCPU, 1 GB RAM, 15 GB NVMe) и масштабируется под высоконагруженные проекты. Процессоры работают на частоте 3.3 ГГц, диски — NVMe, каналы — от 200 Мбит/с до 1 Гбит/с. Есть готовые сборки и конфигуратор для индивидуальной настройки под задачу.</p><p>Отдельная опция — Managed Kubernetes с развёртыванием кластера за 5 минут через панель, API или Terraform. Вся инфраструктура уже настроена, не нужно тратить время на конфигурирование базовых компонентов. В маркетплейсе доступны готовые пресеты для быстрого запуска типовых сервисов — это сокращает время от идеи до продакшена.</p><h3>Когда это работает</h3><p>Timeweb Cloud разделяет сценарии использования по локациям. Германия подходит для проектов, где важна строгая репутация и compliance: финансовые компании с высокой нагрузкой на регуляции, интернет-магазины для DACH-региона (Германия, Австрия, Швейцария), корпоративные сервисы вроде CRM или ERP, где клиенты ценят немецкие стандарты надёжности. Игровые серверы и стриминг для Центральной и Восточной Европы также получают стабильную задержку через франкфуртскую площадку.</p><p>Нидерланды ориентированы на более гибкие сценарии: финтех-стартапы с международными транзакциями, e-commerce с охватом всей Европы, игры и стриминг для Западной Европы с минимальным пингом, динамичные SaaS-проекты, где важна скорость запуска и масштабирования. Амстердам исторически выступает как хаб для глобальных магистралей, что даёт хороший отклик для пользователей за пределами ЕС.</p><h3>Техподдержка и тестирование</h3><p>Судя по отзывам клиентов, техподдержка отвечает в пределах 5-10 минут и решает задачи по делу — от продления SSL-сертификатов до помощи с развёртыванием. Язык поддержки — русский, что ускоряет коммуникацию для команд из России. Для новых проектов доступен грант на тест-драйв: провайдер помогает перенести существующий проект, настроить инфраструктуру и проверить стабильность работы до полного перехода.</p><h2>4. FirstByte — бюджетные VDS с широкой географией</h2><p>Провайдер работает с девятью локациями: Россия, Финляндия, Нидерланды, Германия, Франция, Испания, Болгария, США и Сингапур. Это даёт возможность выбрать площадку под конкретный регион присутствия — от Западной Европы до Юго-Восточной Азии. Все тарифы оплачиваются в рублях, техподдержка работает круглосуточно на русском языке через тикет-систему в личном кабинете.</p><h3>Что предлагает провайдер</h3><p><a href="https://firstbyte.ru/vps-vds/kvm-ssd-eu/">Линейка VPS и VDS</a> построена на процессорах Intel Xeon E5, оперативной памяти DDR4 и SSD-накопителях. Конфигурации масштабируются от минимальных (768 MB RAM, 5 GB SSD) до серьёзных рабочих нагрузок (до 32 GB RAM, 200 GB SSD). Каналы связи — 100-200 Мбит/с, защита от DDoS варьируется в зависимости от локации: L3/L4 в России, BlackHole в Финляндии, США и Сингапуре, базовая защита в европейских дата-центрах.</p><p>Управление автоматизировано через единый интерфейс: личный кабинет с биллинговым центром, обработка услуг без участия персонала, предустановка последних версий популярных CMS. Дополнительно доступны выделенные серверы, веб-хостинг, SSL-сертификаты и бесплатный DNS-хостинг на трёх серверах (DataPro Москва, OVH Страсбург, WebDC Москва) с автоматической балансировкой нагрузки.</p><h3>Когда это работает</h3><p>Типичные сценарии: разработка и тестирование проектов с ограниченным бюджетом, запуск небольших веб-сервисов или блогов в нужной географии, VPN-серверы для команд (хотя провайдер уточняет, что не несёт ответственности за работу VPN-сервисов), репозитории кода. Широкая география позволяет покрыть разные рынки одним провайдером — например, сервер в Хельсинки для Скандинавии, в Мадриде для Испании и Латинской Америки, в Сингапуре для Азии.</p><p>Для проектов с высокими нагрузками доступны выделенные серверы и конфигурации до 8 vCPU. Если нужно протестировать инфраструктуру перед оплатой — провайдер предоставляет тестовый доступ на 24 часа (условия уточняются у менеджеров).</p><h3>DNS-инфраструктура</h3><p>Бесплатный DNS-хостинг работает на трёх серверах в разных дата-центрах с автоматической балансировкой. При недоступности одного сервера запросы перенаправляются на другие с минимальным временем отклика. Поддерживаются все популярные типы DNS-записей для доменов в зонах от .RU и .РФ до .ONLINE и .TECH.</p><h2>5. 1cloud — российский провайдер с площадками в СНГ и Балтии</h2><p>Компания работает с шестью локациями: Санкт-Петербург, Москва, Астана, Алма-Ата, Минск и Таллин. География сфокусирована на России, Казахстане, Беларуси и Эстонии. Все дата-центры имеют сертификацию Tier III, европейская площадка в Таллине дополнительно лицензирована по стандарту PCI DSS с резервированием N+1 и схемой питания 2N.​</p><h3>Что предлагает провайдер</h3><p>Линейка включает VPS/VDS на базе Windows, Linux или FreeBSD с правами администратора и любой конфигурацией. Управление происходит через панель 1cloud с API для автоматизации процессов. Доступны пулы ресурсов с оборудованием разных типов и производительности — при создании виртуальной машины можно выбрать параметры аппаратной основы под конкретную задачу.​</p><p>Дополнительные сервисы: частное облако с упрощённым управлением IT-инфраструктурой через несколько кликов, облачное объектное хранилище с S3 и SWIFT API для раздачи статического контента и хранения бэкапов, бесплатный DNS-хостинг с управлением доменными зонами через панель или API, SSL-сертификаты от Globalsign (включая EV и WildCard), CDN для быстрой доставки контента, Anti-DDoS защита с доступностью 99,9875%.​</p><h3>Когда это работает</h3><p>Типичные сценарии: хостинг приложений в соответствии с ФЗ-152 о персональных данных (у провайдера есть лицензии ФСБ и ФСТЭК, полное сопровождение проекта опытными менеджерами), размещение данных платёжных карт в защищённом сегменте с сертификацией PCI DSS, развёртывание корпоративных сервисов с требованиями к локализации данных в России и СНГ.​</p><p>Московский ЦОД Dataspace получил сертификат Tier III Operations Gold от Uptime Institute — каждый критический элемент инфраструктуры зарезервирован и может быть заменён в горячем режиме без влияния на оборудование клиентов. Площадка в Астане работает на Hi-End оборудовании Dell, Huawei, Cisco, что обеспечивает высокую производительность для проектов с нагрузкой на вычисления.​</p><h3>Резервное копирование и архитектура</h3><p>Провайдер встроил резервное копирование в базовую функциональность облака — детали о стоимости и механизме работы описаны в документации. Общая архитектура 1cloud построена на комбинации аппаратного и программного обеспечения, которое обеспечивает надёжность и скорость работы сервисов. Балансировщик нагрузки и расширенное облачное хранилище находятся в разработке.</p><h2>Что выбрать</h2><p>Выбор провайдера зависит от того, где именно нужно разместить инфраструктуру и какие задачи решать. Если проект требует присутствия в конкретной стране Европы — Timeweb Cloud покрывает Германию и Нидерланды с compliance по GDPR. Для бюджетных тестовых сред с широкой географией подойдёт FirstByte. Hostkey даёт GPU-инфраструктуру и собственный парк оборудования с быстрой заменой при сбоях.</p><p>Когда речь о крупных проектах с требованиями к глобальному присутствию — ITGLOBAL.COM покрывает 11 дата-центров на трёх континентах. Это единственный провайдер из подборки с площадками от Северной Америки до Ближнего Востока и Латинской Америки. Возможность оплаты в рублях, евро, долларах, юанях или криптовалюте решает вопрос с валютными операциями, а выбор между российским и зарубежным юрлицом упрощает бухгалтерию.</p><p>Кастомизация конфигураций и готовность открыть выделенную площадку под крупный проект — формат работы, который на зарубежном рынке встречается редко. Для команд, которым нужна не просто аренда виртуальных машин, а партнёр с пониманием специфики российского бизнеса и гибкостью в решениях, это работает.</p>]]></content:encoded>
    </item>
    <item>
      <title>7 облаков, которые не падают в проде</title>
      <link>https://tproger.ru/articles/7-oblakov--kotorye-ne-padayut-v-prode</link>
      <comments>https://tproger.ru/articles/7-oblakov--kotorye-ne-padayut-v-prode?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/7-oblakov--kotorye-ne-padayut-v-prode</guid>
      <description><![CDATA[<p>Сравнение 7 российских облачных платформ: от быстрых PaaS-решений до отказоустойчивых IaaS и выделенных серверов. На что смотреть при выборе облака для продакшена.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/7-oblakov--kotorye-ne-padayut-v-prode">7 облаков, которые не падают в проде</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 23 Dec 2025 10:29:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этой подборке мы собрали российские облачные платформы и хостинг-решения, которые закрывают самые разные задачи — от быстрого старта стартапа до масштабирования нагруженных корпоративных сервисов. Здесь есть сервисы с упором на полную автономию, отказоустойчивость, гибкую инфраструктуру и мощные bare metal-конфигурации, чтобы вы могли выбрать именно ту платформу, которая подойдёт вашему проекту по мощности, надёжности и бюджету.</p><h2>1. H3LLO.CLOUD</h2><p><a href="https://h3llo.cloud/">H3LLO.CLOUD</a> — молодая, но амбициозная облачная платформа гиперскейлерского уровня, построенная с нуля без легаси и на передовом железе. Облако уже находится в боевой эксплуатации, с гарантированным SLA 99.97% и возможностью масштабирования клиентских нагрузок в 10 раз и более в моменте. Команда обещает бенчмарк на уровне 1 миллиарда запросов в секунду — подобную нагрузку держит только AWS. Пока кейсы клиентов в процессе подготовки, платформа уже показывает уверенную стабильность: с момента запуска не было зафиксировано ни одного падения нагрузки в проде. Под капотом — каналы до 800 Гбит/с, внутренние сети на 400 Гбит/с, балансировщик нагрузки, автоскейлинг (в разработке), быстрый отклик техподдержки (от нескольких минут до пары часов).</p><p>H3LLO.CLOUD предлагает IaaS и PaaS: виртуальные машины, объектное хранилище (S3), DNS, балансировщики, базы данных, Kubernetes, очереди и SOC — всё на собственной платформе без OpenStack. В архитектуре предусмотрено размещение в трёх дата-центрах: два в IXCellerate (Москва) и один собственный, до конца года появятся еще пять региональных площадок. Используются серверы последнего поколения HP Proliant Gen11 на процессорах Intel Gen6 и памяти DDR5 — это дороже, но в 3 раза быстрее, обеспечивая до 40% экономии для клиента.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/9a3ed893-3771-493b-b243-513a0e3a3c59.png" alt="" /><figcaption>скриншот интерфейса</figcaption></figure><p>Условия тарификации прозрачны: базовый набор ресурсов (2 vCPU, 4 ГБ RAM, 40 ГБ диска, белый IP, база данных, 100 ГБ S3 и Load Balancer) предоставляется на год бесплатно при пополнении баланса всего на 5000₽. Управление — через собственную панель с мониторингом, поддержка API и скриптов для автоматизации.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/d86a7432-6d5a-46d0-8937-14e048691381.png" alt="" /></figure><h2>2. L1veStack</h2><p><a href="https://l1vestack.ru/">L1veStack</a> — бессерверная PaaS-платформа, созданная для быстрого развёртывания, управления и масштабирования приложений на базе Docker-контейнеров. Это решение фокусируется на упрощении работы DevOps-инженеров и разработчиков: запуск микросервисов происходит за секунды, а мониторинг и настройка портов — через интуитивную панель. SLA платформы составляет 99.97%, показатели отказоустойчивости и масштабируемости соответствуют продакшен-нагрузкам. Кейсы клиентов находятся в процессе, однако инфраструктура уже стабильно работает в разных сценариях: от слабонагруженных Dev-сред до боевых систем с нестабильным трафиком.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/b7fc746e-8a06-47b0-9f2e-2ab0807ebceb.png" alt="" /><figcaption>скриншот панели проектов</figcaption></figure><p>L1veStack подходит для тех, кто ищет баланс между простотой VPS и возможностями облачной архитектуры. Платформа реагирует на пиковые нагрузки, адаптируясь под разные среды: dev, stage, прод и внутренние сервисы. Средний аптайм — 99.97%, масштабирование происходит гибко и без участия пользователя.</p><p>Цены прозрачны:</p><ul><li>1%vCPU (High Performance) — 0,45 ₽/час</li><li>MB RAM (DDR5) — 0,00085 ₽/час</li><li>GB SSD (3xReplicated) — 0,015 ₽/час</li><li>IPv4 Public IP — 0,015 ₽/час</li></ul><p>Сейчас проект в бете: все ресурсы предоставляются бесплатно, а ранние пользователи получат бонусы. Управление — через удобную визуальную панель со статусами контейнеров и настройкой в пару кликов.</p><h2>3. Incloud</h2><p><a href="https://incloud.ru/">Incloud</a> — облачная платформа для бизнеса любого масштаба, работающая на отказоустойчивом кластере VMware с использованием Enterprise-СХД NetApp и HPE 3PAR. Вся инфраструктура резервирована: дублируются сетевые устройства, питание обеспечивается двумя вводами от разных подстанций и собственными дизельными генераторами. Это гарантирует стабильность и защищённость сервисов, что подтверждается аптаймом 100% за последние 12 месяцев при SLA 99.95%.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/3ae34478-fae1-45ba-b9ac-a51cf0d35d2f.png" alt="" /><figcaption>тест платформы</figcaption></figure><p>На платформе развёрнуты десятки проектов малого и среднего бизнеса, в том числе NT-IT — IT-аутсорсер, обслуживающий клиентов с разнообразной инфраструктурой. До перехода в облако Incloud компании приходилось сталкиваться с разрозненными системами и частыми инцидентами у разных провайдеров. После миграции в Incloud удалось централизовать управление пулами ресурсов, сократить сроки запуска новых проектов с нескольких дней до часов и снизить число простоев до минимума. Инженеры NT-IT отмечают быстрый отклик поддержки и возможность гибкого масштабирования без расширения штата.</p><p>Incloud предоставляет IaaS и SaaS-решения, включая корпоративную почту Exchange, базы данных и 1С. Масштабирование происходит мгновенно за счёт резерва мощностей: в любой момент можно увеличить ресурсы под пиковую нагрузку. Среднее время реакции техподдержки на инциденты — 15 минут.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/d99d2e13-2e4a-4718-8bf0-872152e5eb31.png" alt="" /></figure><p>Тарифы прозрачны: базовый CPU — от 250 ₽, RAM — от 200 ₽ за 1 ГБ, диски — от 4 ₽ за 1 ГБ (SATA) до 12 ₽ (SSD/NVMe), резервные копии — 2 ₽ за 1 ГБ. Для производительных конфигураций CPU доступен от 500 ₽ за ядро и RAM — от 250 ₽. Калькулятор для расчёта доступен на <a href="https://incloud.ru/cloud">сайте</a>.</p><h2>4. Cloud.ru</h2><p><a href="https://cloud.ru/evolution">Cloud.ru Evolution</a> — это масштабируемая облачная платформа, построенная на собственных технологиях и открытых компонентах. Пользователям доступны десятки IaaS- и PaaS-сервисов: от виртуальных машин и управляемых баз данных до платформы для ML-задач и AI-инструментов. Облачная инфраструктура размещена в дата-центрах Tier III на территории РФ, соответствует требованиям 152-ФЗ и аттестована по УЗ-1. SLA — 99.95%.</p><p>Платформа работает по модели «pay-as-you-go» и предлагает гибкую архитектуру: Managed Kubernetes, бессерверные контейнеры, балансировщики нагрузки, геораспределённые хранилища и поддержку Terraform. Есть и физические выделенные серверы, и мощные вычислительные ресурсы с GPU. Новые пользователи получают грант в 4000 бонусов и доступ к free tier. В числе PaaS-инструментов — Kafka, Redis, PostgreSQL, ArenadataDB, Spark, Trino и платформа AI Factory с LLM, инференсом, агентами и обучением ML-моделей в распределённой среде. Панель управления объединяет весь стек облачных сервисов и даёт полный контроль над расходами, доступами и ресурсами.</p><p>Cloud.ru подходит как для построения базовой инфраструктуры проекта, так и для сложных AI- и data-driven-сценариев. Среди преимуществ — поддержка контейнеров, работа с Terraform и CLI, встроенные инструменты безопасности и быстрое масштабирование.</p><p>Узнать цену для своего сервиса можно через <a href="https://cloud.ru/calculator">калькулятор</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/c35eef73-0e6b-4244-90bc-03fd1088feee.png" alt="" /></figure><h2>5. Selectel</h2><p><a href="https://selectel.ru/services/cloud/private-cloud/">Частное облако Selectel</a> — решение для проектов со строгими требованиями к информационной безопасности и кастомизации. Оно может быть развернуто как на инфраструктуре Selectel, так и on-premise, с полным сопровождением инженеров 24/7, лицензированием по модели «за хост» и временем реакции на критические инциденты от 15 минут. Облако полностью совместимо с OpenStack и входит в реестр российского ПО.</p><p>Selectel проектирует архитектуру под конкретные задачи клиента: гибкая настройка железа (Intel Xeon, AMD EPYC, NVIDIA GPU), интеграция с СХД, конвергентное и гиперконвергентное хранение на базе Ceph. Возможны сценарии с геораспределённостью и гибридной инфраструктурой. Поддерживаются масштабируемые отказоустойчивые базы данных (PostgreSQL, Kafka, Redis и др.) и Managed Kubernetes до 1 500 нод с GPU-кластерами.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/78b63ed6-0f2f-4dc0-b5bb-ed26b39787c6.png" alt="" /><figcaption>информация с сайта</figcaption></figure><p>Компания также реализует меры защиты данных под любые регуляторные требования: 152-ФЗ, ФСТЭК №17/21, ГОСТ Р 57580, PCI DSS 4.0. Selectel помогает пройти аттестацию до К-1/УЗ-1 и развивать инфраструктуру с ежемесячными обновлениями и SLA до 99.98%. Это облако для тех, кому нужно не просто IaaS, а стабильная и безопасная цифровая среда, полностью адаптированная под бизнес.</p><p>Цены рассчитываются индивидуально.</p><h2>6. VK Cloud</h2><p><a href="https://cloud.vk.com/">VK Cloud</a> — универсальная облачная платформа, включающая широкий спектр IaaS- и PaaS-сервисов для разработки, хранения данных, масштабирования и построения отказоустойчивой cloud-native инфраструктуры. Платформа подходит как для стартапов, так и для крупных корпоративных заказчиков, предлагая гибкие условия подключения, бесплатную миграцию и сертифицированную безопасность.</p><p>VK Cloud предоставляет виртуальные серверы, сети, объектное хранилище, управляемые базы данных, Kubernetes-кластеры, а также решение VK Data Lakehouse для работы с большими данными. Вся инфраструктура размещена в дата-центрах уровня Tier III в России и соответствует требованиям 152-ФЗ, ГОСТ Р 57580, ISO, PCI DSS. Облачные серверы аттестованы по 152-ФЗ.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/d3b82010-3ce1-4100-9368-1d0717e9d4e9.png" alt="" /><figcaption>интерфейс</figcaption></figure><p>Платформа построена на OpenSource и российском ПО, обеспечивает единое резервируемое окружение, автоматическое масштабирование, плановые бэкапы и послеаварийное восстановление. SLA — 99,95% с финансовыми гарантиями. Поддержка 24/7 и «IT-служба одного окна» делают VK Cloud удобным выбором для любых сценариев.</p><p>Дополнительно: приветственный бонус 5000 ₽ для новых аккаунтов (до 12 000 ₽ — для юрлиц), гранты до 2 млн ₽ для стартапов и 10 000 ₽/мес. для благотворительных фондов.</p><h2>7. Timeweb.Cloud</h2><p><a href="https://timeweb.cloud/">Timeweb.Cloud</a> предлагает аренду выделенных серверов (bare metal) в дата-центрах уровня Tier III в России и Европе с гарантированным SLA до 99,98%. Это решение для тех, кто ищет высокую производительность, изолированную инфраструктуру и максимальную гибкость в управлении.</p><p>Вы получаете физический сервер полностью в своё распоряжение: root-доступ, KVM-консоль в панели управления, возможность установить любое ПО и ОС, а также подключать дополнительные процессоры, диски и шлюзы. Вся настройка доступна на уровнях сервера, железа и сети — вплоть до объединения в приватную сеть между регионами и провайдерами.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-03/27d92b8d-a909-41cd-9ad2-41d8ae3f7e92.png" alt="" /><figcaption>интерфейс</figcaption></figure><p>Timeweb.Cloud предоставляет мощные конфигурации на базе процессоров Intel Xeon Gold, AMD Ryzen 9 и EPYC, с NVMe-дисками и премиальными сборками от Supermicro и Gigabyte. Быстрый запуск готовых конфигураций — от 1 часа, индивидуальные — за 1 день.</p><p>Техподдержка — сильная сторона сервиса: персональный менеджер, ответы по телефону и в чате — за минуту, в тикетах — до 15 минут. Надёжность подтверждена соответствием 152-ФЗ, PCI DSS и ISO. Timeweb.Cloud — подходящее решение для разработчиков и бизнеса, которым нужно больше, чем просто «облако», и которые ценят контроль, мощность и поддержку.</p><h2>На что ориентироваться при выборе облака</h2><p>Универсального «идеального» облака не существует: платформа должна соответствовать именно вашим задачам. Для стартапов и быстрых MVP подойдут решения с простым управлением и гибкой тарификацией вроде L1veStack или H3LLO.CLOUD. Если ключевую роль играет отказоустойчивость и предсказуемый SLA — обратите внимание на Incloud, Cloud.ru или Selectel. Для работы с большими данными, ML и высоконагруженными сервисами удобнее использовать экосистемы уровня VK Cloud. А если требуется полный контроль над железом и гарантированная изоляция, оптимальным выбором станут выделенные серверы Timeweb.Cloud.</p><p>При выборе облака важно учитывать три фактора: технические возможности (производительность, поддержка контейнеров, интеграция с CI/CD), надёжность (аптайм, резервирование, дата-центры Tier III) и экономику (модель тарификации, стоимость ресурсов, наличие грантов и бонусов). Сравнив эти параметры в разрезе реальных сценариев, вы сможете выбрать платформу, которая не подведёт именно в вашем продакшене.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как мигрировать на Node.js 22 без рисков: инструкция</title>
      <link>https://tproger.ru/articles/kak-migrirovat-na-node-js-22-bez-riskov--instrukciya</link>
      <comments>https://tproger.ru/articles/kak-migrirovat-na-node-js-22-bez-riskov--instrukciya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Светлана Гринь]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-migrirovat-na-node-js-22-bez-riskov--instrukciya</guid>
      <description><![CDATA[<p>Node.js 22 стал надёжным стандартом для компаний, которым важно сохранить стабильность после завершения поддержки прежних версий. Разберём практические шаги по безопасной миграции. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-migrirovat-na-node-js-22-bez-riskov--instrukciya">Как мигрировать на Node.js 22 без рисков: инструкция</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 14 Dec 2025 12:40:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Node.js 22 сегодня становится дефолтным выбором для компаний, которые откладывали обновление годами. Вокруг этой версии сформировалась зрелая экосистема, а крупные команды уже успели протестировать релиз в продакшене. Разберём, что думают разработчики о платформе и какие подводные камни вас ждут при миграции.</p><h2>Почему релиз Node.js 22 важен</h2><p>30 апреля 2025 года завершился жизненный цикл версии Node.js 18. Сообщество заранее предупреждало об этом через официальный аккаунт в X. Там напомнили разработчикам о необходимости перейти на более свежие версии — Node.js 20 или 22. Восемнадцатая версия перестала получать патчи безопасности, поэтому обновление стало критичным для поддержания стабильной работы приложений.</p><p>Наиболее надёжным вариантом стала миграция на Node.js 22, которая сейчас находится в статусе долгосрочной поддержки (LTS) и гарантирует обновления безопасности и стабильность на ближайшие годы.</p><p>Хотя релиз этой версии не выглядел революционным, он существенно изменил основу платформы. Многие возможности, которые раньше требовали внешних библиотек, теперь встроены прямо в платформу: WebSocket-клиент, стабильный fetch(), работа с файлами, Blob и URL, улучшенная совместимость ESM и CommonJS. Это уменьшает количество зависимостей, снижает вероятность уязвимостей и значительно упрощает поддержку проектов.</p><p>Помимо удобства разработки, в новой версии усилились производительность и безопасность. Обновлённый движок V8 ускоряет выполнение кода, а оптимизация старта и снижение потребления памяти делают Node.js более стабильным в высоконагруженных и serverless-сценариях. Улучшенная модель разрешений, строгие настройки TLS и расширенная поддержка AbortController повышают защиту на уровне рантайма, ограничивая последствия уязвимостей в сторонних пакетах. Это даёт компаниям возможность строить более надёжные сервисы с меньшими затратами на контроль рисков и эксплуатацию.</p><p>Node.js 22 также стал удобнее для работы гибридных команд. Стабильная интеграция ESM и CommonJS облегчает миграцию старых проектов, а унификация Web-API делает код универсальным и понятным даже для сотрудников без глубокого опыта в бэкенде. Улучшенные инструменты тестирования и диагностики повышают прозрачность разработки и снижают время на нахождение ошибок.</p><blockquote>Node.js 22 — эволюционный релиз. Он развивает ранее введённые возможности (fetch, ESM, WebSocket и др.), но не переворачивает парадигму разработки. Это укрепление уже заданного курса.</blockquote><h2>Возможности Node.js 22</h2><p><b>Расширение JavaScript и обновление V8.</b> Получив движок V8 12.x, Node.js подтянул все улучшения ECMAScript 2024. Код стал исполняться быстрее как за счёт оптимизаций в компиляторе, так и благодаря улучшенной работе с асинхронностью. Например, async/await теперь обрабатываются эффективнее, а создание структур данных, активно используемых в серверах, стало менее затратным.</p><p>С точки зрения разработчика изменения могут быть неочевидны, но приложения на реальной нагрузке выполняются быстрее, стабильнее и предсказуемее.</p><p><b>Corepack включён по умолчанию.</b> До выхода Node.js 22 разработчики сами решали, подключать ли Corepack. Теперь он активен без дополнительной настройки, и это серьёзное изменение в экосистеме. Все менеджеры пакетов контролируются единой прослойкой, что устраняет зависимость от версии, установленной глобально у разработчика или в CI.</p><p>На практике это означает, что версия менеджера пакетов становится частью проекта и перестаёт зависеть от среды. Ошибки вида «у меня работает, а у коллеги нет» заметно сокращаются. Благодаря этому процессы разработки и сборки становятся стабильнее.</p><blockquote>Corepack, как мне кажется, сильно упростит жизнь большим командам. Исчезает вечная история “а у меня Yarn другой версии” или “Pnpm не подтянулся”. Corepack берёт на себя управление версионированием менеджеров пакетов, а значит, сборки становятся более воспроизводимыми. Для корпоративных проектов это плюс, особенно если речь идёт о распределённых командах или CI/CD-конвейерах.</blockquote><p><b>WebSocket API и улучшенные Web Streams.</b> Node.js 22 внедрил нативную поддержку WebSocket API. Теперь можно создавать WebSocket-клиенты и серверы без сторонних библиотек вроде ws. Это делает код чище и ближе к браузерному API.</p><p>Параллельно были улучшены Web Streams. Работа с потоками стала предсказуемой, а инструменты вроде CompressionStream и DecompressionStream функционируют так же, как и в современных браузерах. Поддержка универсального кода — сервер + клиент — стала проще, а объём внешних зависимостей уменьшился.</p><p><b>Улучшения в работе CommonJS и ESM.</b> Node.js постепенно движется в сторону ESM, но у огромного количества проектов всё ещё используется CommonJS. В новой версии улучшена производительность смешанных проектов и сокращены ошибки при импорте модулей между двумя системами. Между ними появилось меньше «подводных камней», а значит миграция на ESM может идти постепенно, без ломки архитектуры.</p><p><b>Стабильный встроенный fetch().</b> Его реализация теперь полностью совпадает с браузерной, так что в простых кейсах можно отказаться от axios или node-fetch. Меньше зависимостей — быстрее запуск и меньше технического долга.</p><p><b>Развитие модели разрешений</b>, которая позволяет ограничивать доступ приложения к файловой системе, сети или переменным окружения прямо на уровне рантайма. Даже если зависимость уязвима, код не сможет выйти за пределы разрешённых прав. Это огромный шаг в сторону реальной безопасности.</p><blockquote>Я бы отметил более зрелую работу с Permission Model. Она уже не экспериментальная и реально помогает ограничивать доступ к файловой системе и сети. Параллельно улучшилась производительность V8, а вместе с ней и общая отзывчивость серверных приложений. Подтянули и Web-стек: стабильнее стали Web Streams, Request/Response и другие API, которые сближают Node с браузерами. Всё это не революция, но тренд на унификацию растёт.</blockquote><p><b>Расширенные возможности тестирования.</b> Node.js продолжает развивать встроенный тестовый фреймворк node:test. Теперь доступны кастомные репортеры, покрытие кода без внешних инструментов и mock timers (замена реальной работы таймеров). Это позволяет использовать встроенный тест-раннер для большинства задач, отказавшись от Jest или Vitest в простых проектах.</p><p><b>Обновления в безопасности.</b> Обновление OpenSSL — одно из самых чувствительных изменений в релизе. Поддержка старых криптоалгоритмов исключена, проверка сертификатов стала строже, а взаимодействие по TLS 1.3  стабильнее.</p><blockquote>С точки зрения безопасности рывка не произошло, но заметное движение есть: Permission Model, улучшенная работа с OpenSSL, более аккуратная валидация входящих данных. Всё это снижает риски, но полностью опасность не снимает, потому что реальная безопасность всё равно лежит в архитектуре, процессов CI/CD и культуре разработки.</blockquote><p><b>Повышенная производительность.</b> Заметные улучшения коснулись старта приложения, работы с памятью и производительности под нагрузкой. Приложения запускаются быстрее, а распределение нагрузки между worker threads стало более эффективным. Это позволит обслуживать больше запросов при тех же ресурсах и уменьшить расходы на инфраструктуру.</p><p><b>Международные стандарты и локализация.</b> Были обновлены Intl API на базе новой версии ICU. Преимущества: точные часовые пояса, поддержка новых календарей и систем чисел. Это критично для глобальных SaaS-платформ, аналитических сервисов и финтех-продуктов.</p><p>По словам Даниила Гоника, для разработчиков наиболее значимы такие изменения, как WebSocket-клиент, модульная система., обновление V8, улучшение JIT-компиляторов, добавление новых возможностей JS и улучшение встроенного test-раннера.</p><h2>Как безопасно мигрировать на Node.js 22</h2><p>Переход лучше начинать с <b>аудита и подготовки окружения</b>. Сначала стоит убедиться, что все зависимости поддерживают Node.js 22. Особенно это касается библиотек, которые используют нативные модули, криптографию и WebSockets. Проверка совместимости позволит избежать неожиданностей вроде ошибок компиляции или падений при запуске.</p><p>После этого нужно прогнать <b>тесты</b>. Даже минимальный набор позволит выявить проблемы, связанные с изменениями в ESM/CJS, WebSocket API или OpenSSL.</p><p>Само <b>обновление среды</b> зависит от выбранного инструмента. Через nvm или n процесс занимает секунды, а для Docker достаточно указать новый базовый образ. Если проект использует CI/CD, стоит уделить внимание Corepack: теперь он активен всегда, что может изменить поведение сборки.</p><p>После обновления полезно <b>проверить логи</b> и внимательно <b>изучить предупреждения</b>. Большинство проблем решается установкой последних версий библиотек, иногда — правкой конфигурации TLS или обновлением менеджера пакетов.</p><p>Обновление стоит внедрять поэтапно, начиная со staging или частичного продакшена, и держать готовность к откату.</p><blockquote>Я обычно советую подход двухконтурного обновления. Сначала поднять проект на 22-ю версию в отдельной среде, включить максимальный объём логов, запустить тесты и прогнать реальные сценарии. Потом обновить линтеры, сборщики и самые старые пакеты, чтобы убрать накопленные за годы предупреждения. И только когда всё стабильно, имеет смысл переключать продакшен. По сути, обновление Node нужно делать так же аккуратно, как обновление облачных сервисов: через изоляцию, наблюдаемость и бэкап-стратегию.</blockquote><blockquote>В Node.js 22 удалены некоторые устаревшие, малоиспользуемые функции, поэтому при переходе может потребоваться рефакторинг мест, где они использовались. Следует проверить депрекейты: Node.js 22 помечает ряд старых возможностей как устаревшие и предлагает альтернативы. Необходимо убедиться, что все библиотеки и пакеты, используемые проектом, поддерживают новую версию Node.js.<br />При скачке сразу с 18/20 на 22 некоторые зависимости могут оказаться несовместимыми с обновлённым движком V8 или новыми APIs — может понадобиться их обновление до последних версий.</blockquote><h2>Кому стоит подождать с переходом</h2><p>Переход на Node.js 22 подходит не всем проектам. В некоторых ситуациях разумнее подождать, чтобы избежать регрессий и поломок в продакшене. Вот кому стоит повременить с переходом:</p><ul><li>Тем, кто использует инструменты сборки или менеджеры пакетов, которые ещё не совместимы с Node.js 22 и могут выдавать ошибки или не работать вовсе.​</li><li>Командам, которые работают на старых версиях ОС. Известны проблемы совместимости с macOS 10.14 и ниже, а также возможны ошибки на Windows при миграции старых приложений.​</li><li>Тем, чьи CI/CD, контейнеры или Docker-образцы завязаны на конкретные версии Node.js и npm. Переход на 22-ю версию требует много регрессионного тестирования.​</li><li>Проектам с критически важными C++-добавками. Смена major-версии влечёт за собой обновление бинарных интерфейсов, что может вызывать ошибки при компиляции нативных модулей.</li><li>Пользователям определённых интеграций. Для некоторых версий MongoDB‑драйверов зафиксированы фатальные баги после перехода на конкретные промежуточные версии Node.js 22.x.​</li><li>Если вы используете проекты, которые сами рекомендуют Node.js 18 или 20, а обновление их зависимостей под 22 только планируется.</li></ul><blockquote>В продакшене чаще всего проблемы возникают не из-за самих изменений в платформе, а из-за того, как эти изменения проявляются в реальных проектах. Где-то обновился V8 и стал вести себя строже, где-то повылезали deprecated-модули, а где-то просто сломались сборщики или старые зависимости. Многие команды до сих пор живут на Webpack 4, Express 4 или TypeORM старых версий: вот они первыми столкнутся со сложностями.</blockquote><h2>Что дальше</h2><p>Среди будущих трендов в экосистеме <a href="http://node.js/">Node.js</a> Максим Захаренко выделяет следующие: <i>«Первое — постепенное сближение Node с Web-стеком, чтобы код становился максимально универсальным. Второе — рост влияния Bun и Deno, которые будут подталкивать Node к более агрессивной оптимизации. И третье — всё более активная интеграция с AI-инструментами, особенно в DevTools и в цепочках генерации кода»</i>.</p><blockquote>Всё больше веб-API внедряются в Node.js (fetch, WebSocket, EventTarget). Этот тренд будет продолжаться. ESM становится стандартом, поддержка будет расширяться, CommonJS постепенно уйдёт в прошлое. Расширяется WASI и поддержка WASM-модулей. Node.js движется в сторону мульти-языковой среды. Модель прав доступа и другие sandbox-механизмы также продолжат развиваться. Кроме того, в версии Node.js 22.5.0 экспериментально добавлен встроенный модуль SQLite (через –experimental-sqlite). Это важное уточнение: в релизе 22.0.0 SQLite отсутствовал.</blockquote><p>Даниил Гоник хотел бы увидеть в будущих релизах стабильную и удобную модель разрешений, возможность require() для ESM без флагов, улучшения в DevX: поддержка TS «из коробки», больше инструментов в ядре, расширение SEA (Single Executable Apps) и встроенные механизмы верификации зависимостей (подписи, integrity).</p><h2>Выводы</h2><p>Node.js 22 делает приложения быстрее, безопаснее и совместимее с Web API, улучшает работу с памятью и снижает зависимость от глобальных инструментов. Хотя переход требует подготовки, он не представляет серьёзных рисков, если следовать базовой процедуре: проверить зависимости, прогнать тесты и обновить среду постепенно. Если инфраструктура современная, а стек устойчивый, переход на Node.js 22 принесёт ощутимые преимущества как в скорости работы, так и в удобстве разработки.</p>]]></content:encoded>
    </item>
    <item>
      <title>7 мифов об антивирусах, в которые мы до сих пор верим</title>
      <link>https://tproger.ru/articles/7-mifov-ob-antivirusah--v-kotorye-my-do-sih-por-verim</link>
      <comments>https://tproger.ru/articles/7-mifov-ob-antivirusah--v-kotorye-my-do-sih-por-verim?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/7-mifov-ob-antivirusah--v-kotorye-my-do-sih-por-verim</guid>
      <description><![CDATA[<p>Узнайте, стоит ли использовать антивирус в 2025 году и как выбрать защиту для Windows и Linux. Анализ 7 главных мифов: от нагрузки на систему до эффективности против новых угроз. Обзор EDR-решений и встроенных защитников..</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/7-mifov-ob-antivirusah--v-kotorye-my-do-sih-por-verim">7 мифов об антивирусах, в которые мы до сих пор верим</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 10 Nov 2025 10:10:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>В своих цифровых вселенных мы чувствуем себя вполне комфортно. Онлайн-банкинг, личные фотоархивы, переписка, разработка — всё это кажется надежным и подконтрольным.</p><p>До тех пор, пока не появляется Он. Вирус, троян, червь, шпионский софт. Или просто подозрительный процесс, пожирающий ресурсы. Сразу возникают вопросы: можно ли полагаться на встроенную защиту или стоит установить специализированное ПО?</p><p>В 2025 году проблема приобретает особую специфику. Одни считают, что антивирусы — это реликты, цифровые динозавры. Другие говорят о новых угрозах, которые нужно учитывать. Разберемся в вопросе без эмоций. Только факты, принцип работы антивирусного софта и капля чёрного юмора.</p><h2>Антивирус 2025: цифровой мертвец или живой организм?</h2><p>Представим, что антивирус — это не программа, а концепция. Концепция защиты конечной точки. Раньше это был монолит — толстый клиент с гигантской базой сигнатур. Сегодня эта концепция рассредоточена. Она живёт в облачных песочницах, в алгоритмах машинного обучения на стороне сервера, в поведенческих датчиках внутри ядра вашей ОС.</p><p>Windows Defender, который вы иногда отключаете, — это уже не та незаметная утилита из Windows 7. Это сложный EDR-агент, который по умолчанию имеет доступ к вашей памяти, сетевой активности и всем процессам.</p><p>Gatekeeper в macOS — это тоже форма антивируса, просто работающая на принципах whitelist’а и санирования приложений из App Store. Вопрос не в том, «есть ли у вас антивирус», а в том, насколько глубоко вы понимаете ту защиту, которая  уже работает.</p><p>Ландшафт угроз изменился радикально. Раньше злоумышленники хотели «сломать систему». Сегодня их цель — оставаться в системе как можно дольше, красть данные, использовать ресурсы. Им ваш синий экран не нужен. Им нужны ваша тишина и покой.</p><h2>Миф 1. «Мой Linux / Mac слишком безопасен для вирусов»</h2><figure><img src="https://media.tproger.ru/user-uploads/133848/2025-10-31/e0d05f53-f837-497d-82bc-0241b2a1076c.png" alt="" /></figure><p>Священная война между фанатами операционных систем давно перешла в область безопасности. Но правда в том, что ОС — это просто платформа. Уязвимости есть везде. Атаки сместились с уровня операционной системы на уровень приложений и цепочек поставок (supply chain).</p><p>Ваш Ubuntu не подхватит классический вирус-шифровальщик, написанный для Windows. Но он с радостью выполнит майнер, вшитый в библиотеку, которую вы установили через pip install --user. Или скрипт, который сольет ваши SSH-ключи из ~/.ssh/. Злоумышленникам сегодня не нужен root. Им нужен ваш пользователь, который имеет доступ к коду, репозиториям, облачным ключам.</p><ul><li><b>Реальность.</b> Атаки на репозитории открытого ПО стали массовыми. Ежегодный отчёт компании Sonatype о состоянии программного обеспечения за 2024 год <a href="https://www.sonatype.com/state-of-the-software-supply-chain/introduction">показывает</a>, что за предыдущий год было обнаружено 512 847 новых вредоносных пакетов, что означает рост на 156%. Вы делаете npm install и запускаете потенциально вредоносный код с правами вашего пользователя.</li><li><b>Что делать. </b>Перестать надеяться на магическую неуязвимость ОС. Использовать принцип наименьших привилегий на практике. Запускать подозрительный код в изолированных средах: Docker-контейнерах, виртуальных машинах. Мониторить исходящий сетевой трафик на предмет аномалий. Инструменты вроде lynis для Linux или Little Snitch для Mac — это не антивирусы в классическом понимании, но они выполняют ту же защитную функцию: контролируют всё, что происходит в системе.</li></ul><h2>Миф 2. «Встроенного защитника Windows / Gatekeeper на Mac достаточно»</h2><p>Самоуспокоенность — главный враг безопасности. Да, встроенные защитники стали невероятно мощными. Они используют ML-модели, поведенческий анализ и имеют глубокую интеграцию с ядром системы. Но их основная цель — защитить среднестатистического пользователя от массовых угроз. Это основная, но не полноценная платформа защиты (EPP).</p><p>Представьте себе целенаправленную атаку (targeted attack). Злоумышленники используют кастомный вредонос, написанный специально для компаний вашего профиля. Он не распространяется в дикой природе, его нет в базах. Он использует технику «живи за счёт земли» (Living-off-the-Land), маскируясь под легитимные процессы вроде ps.exe или wmic.exe.</p><p>Встроенный защитник, настроенный на баланс между производительностью и безопасностью, может пропустить такую атаку. Его эвристика не всегда способна отличить легитимное админское действие от активности злоумышленника.</p><ul><li><b>Реальность. </b>Независимая тестирующая организация AV-Comparatives в своих отчётах за 2024 год регулярно <a href="https://www.av-test.org/en/antivirus/home-windows/windows-10/june-2024/microsoft-defender-antivirus-consumer-4.18-241315/">демонстрирует</a>, что Windows Defender обеспечивает стабильную защиту против популярных угроз. Однако в тестах на защиту от целенаправленных атак и сложных zero-day угроз его показатели могут быть ниже, чем у коммерческих EDR-решений от CrowdStrike или SentinelOne.</li><li><b>Что делать.</b> Для домашнего ПК, на котором вы сёрфите в интернете и работаете с документами, Defender почти достаточное решение. Для рабочей станции разработчика, системного администратора или любого сотрудника, имеющего доступ к критической инфраструктуре, этого мало. Необходимо слоить защиту. Defender — это базовый, но обязательный слой. Поверх него должен идти более продвинутый агент, способный к поведенческому анализу и отслеживанию цепочек атаки.</li></ul><h2>Миф 3. «Антивирус съедает все ресурсы и тормозит систему»</h2><p>Этот миф — прямое наследие эпохи одноядерных процессоров и медленных HDD. Тогда сигнатурные базы действительно могли весить сотни мегабайт, а полное сканирование системы означало её полную недоступность на несколько часов. Современные движки работают по иному принципу.</p><p>Они не сканируют все файлы при каждом обращении. Вместо этого используют хуки ядра для мониторинга системных вызовов в реальном времени. Агент следит не за файлами, а за событиями: создание процесса, запись в память, сетевое подключение.</p><p>Ресурсоёмкие операции, такие как глубокий статический анализ подозрительного файла с помощью тяжёлой ML-модели, часто вынесены в облако. Локальный агент лишь собирает телеметрию (метаданные, образцы памяти) и отправляет их на сервер для принятия решения.</p><ul><li><b>Реальность.</b> Да, антивирусный агент создаёт дополнительную нагрузку. Но в 2025 году эта нагрузка для качественных продуктов редко превышает 2-5% в штатном режиме. Проблемы могут возникать в пиковых случаях: компиляция ядра Linux, работа с большими базами данных, запуск виртуальных машин. Именно для этого существуют детальные настройки исключений.</li><li><b>Что делать.</b> Изучать тесты производительности от организаций вроде AV-Comparatives или SE Labs. Грамотно настраивать исключения. Вносить в «белый список» папки с исходным кодом (src, node_modules, .git), директории виртуальных машин, бинарники компиляторов. Современный антивирус — про тонкую настройку под свой рабочий процесс.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/133848/2025-10-31/498ed159-3a8d-4d02-8f43-ad177714afc5.png" alt="" /></figure><h2>Миф 4. «Мне хватает здравого смысла: не ходить по сомнительным ссылкам»</h2><p>Это самый опасный миф. Он основан на вере в то, что фишинг — удел наивных пользователей. Реальность такова, что социальная инженерия стала оружием массового поражения. Речь не о письмах с заголовком «Вы выиграли iPhone!».</p><p>Речь о фишинге высшего пилотажа. О письме, которое приходит на вашу корпоративную почту от имени «отдела DevOps» с ссылкой на «критическое обновление» для вашего CI/CD-пайплайна. Письмо идеально стилизовано, содержит ваше настоящее имя и ссылается на реальных коллег.</p><p>Сайт, на который вы попадаете, — клон страницы вашего корпоративного SSO (VK Teams, Azure AD). Вы вводите логин и пароль. На этом всё. Ваша учетная запись скомпрометирована. Осторожность оказалась бесполезной — атака была спланирована и нацелена лично на вас или вашу компанию.</p><ul><li><b>Реальность.</b> Согласно <a href="https://www.verizon.com/about/news/2024-data-breach-investigations-report-vulnerability-exploitation-boom">отчету</a> Verizon Data Breach Investigations Report 2024, основная масса нарушений (68%) связана с человеческим фактором, включая фишинг и претекстинг (целенаправленная атака с созданием легенды для жертвы). При этом фишинг выступает первоначальным вектором атаки в 15% нарушений, а претекстинг остаётся главной тактикой в инцидентах социальной инженерии. Проблема не в глупости, а в человеческой психологии и информационном перегрузе.</li><li><b>Что делать.</b> Принять, что человек — самое слабое звено в цепи безопасности. Нужны технические контрмеры. Антивирус/EDR в этой схеме выступает последним рубежом обороны. Он не помешает вам ввести пароль на фишинговом сайте. Но он может обнаружить и заблокировать вредоносную полезную нагрузку (payload), которая скачается и запустится уже после компрометации ваших учётных данных. Обязательно используйте аппаратные ключи или приложения для двухфакторной аутентификации (2FA) везде, где это возможно.</li></ul><h2>Миф 5. «Антивирусы бессильны против zero-day и файл-лесс атак»</h2><p>Это утверждение верно, если говорить об антивирусе образца 2010 года, который только и делал, что сравнивал MD5-хеши. Современные платформы защиты конечных точек (EPP/EDR) работают иначе. Они ищут не известные угрозы, а подозрительное поведение.</p><p>Файл-лесс атака — это когда вредоносный код живёт только в оперативной памяти. Да, файла нет. Но есть аномальная цепочка событий. Процесс powershell.exe (легитимный) неожиданно запускает rundll32.exe для выполнения кода в памяти, который затем пытается отключить защиту через изменение реестра и установить постоянность (persistence). EDR видит не три отдельных безобидных процесса, а одну цельную картину атаки, соответствующую известным тактикам злоумышленников.</p><ul><li><b>Реальность. </b>Современные системы ориентируются на фреймворки вроде MITRE ATT&amp;CK, которые описывают сотни тактик и техник, используемых хакерами. Антивирус 2025 года — это, по сути, реализация этого фреймворка в виде работающего агента. Он анализирует телеметрию и ищет совпадения с известными паттернами поведения, а не с сигнатурами файлов.</li><li><b>Что делать.</b> При выборе решения смотреть не на громкое название «антивирус», а на его возможности. Есть ли у него EDR? Интегрируется ли он с MITRE ATT&amp;CK? Есть ли возможность расследования инцидентов (forensics) по собранной телеметрии? Использует ли он песочницу для детонации подозрительных файлов? Ответы на эти вопросы гораздо важнее, чем размер сигнатурной базы.</li></ul><h2>Миф 6. «Антивирусные компании сами создают вирусы, чтобы был спрос»</h2><p>Конспирологическая классика. У этого мифа нет никаких доказательств. Реальная экономика угроз гораздо прозаичнее и страшнее.</p><p>Киберпреступность — это гигантская индустрия с годовым оборотом в триллионы долларов. Работают модели «ransomware-as-a-service», есть полноценные техподдержки для жертв шифровальщиков, действуют целые корпорации вымогателей. Им не нужно помогать антивирусным компаниям — и так хватает работы.</p><p>Более того, антивирусные компании — одни из главных целей для хакеров. Взломав лабораторию такого вендора, можно получить доступ к его детектам и технологиям, чтобы затем усовершенствовать своё вредоносное ПО.</p><ul><li><b>Реальность.</b> Бизнес-модель легальных антивирусных компаний строится на подписках (SaaS). Репутация — их главный актив. Обнаруженный сговор с создателями вирусов мгновенно уничтожит бизнес и приведёт к колоссальным судебным искам. Гораздо проще и выгоднее честно бороться с реальными угрозами, которых более чем достаточно.</li><li><b>Что делать.</b> Оценивать вендоров по их открытости. Участвуют ли они в независимых тестах? Публикуют ли исследования об обнаруженных угрозах (threat intelligence reports)? Как быстро реагируют на новые образцы вредоносных программ? Прозрачность — лучший ответ на конспирологические теории.</li></ul><h2>Миф 7. «Ложные срабатывания (false positives) сводят на нет всю пользу»</h2><p>Это миф лишь отчасти, поскольку проблема ложных срабатываний действительно существует. Ваш собственный скрипт, отладочный бинарник или легитимная портативная утилита внезапно помечаются как «троян» или «шпионское ПО» и отправляются в карантин. Работа встаёт.</p><p>Причина в агрессивности эвристических и поведенческих анализаторов. Антивирус видит, что ваша программа, написанная на Go, упакована статически и при запуске пытается установить сетевое соединение. Это поведение совпадает с паттерном ботнета. Происходит срабатывание.</p><ul><li><b>Реальность.</b> Баланс между безопасностью и удобством — ключевая проблема всех систем защиты. Слишком агрессивный антивирус будет мешать работе. Слишком слабый — пропустит угрозу. Исследование, проведённое при участии IBM в 2023 году, <a href="https://op-c.net/blog/why-false-positives-killing-security-teams/">показало</a>, что специалисты по безопасности тратят примерно треть рабочего дня на расследование ложных или маловажных оповещений, что в пересчёте на команду составляет десятки часов в месяц.</li><li><b>Что делать.</b> Активно использовать функции whitelist. Подписывать свои собственные приложения цифровыми сертификатами (code signing). Настраивать политики исключений для доверенных папок разработки. Работать с вендором: отправлять ложно заблокированные файлы на анализ. Часто после такого анализа следующий апдейт антивируса уже не будет считать ваш файл вредоносным.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/133848/2025-10-31/4571a2b3-8964-4b69-bc03-4dd41fb70e85.png" alt="" /></figure><h2>Ставить или не ставить?</h2><p>В 2025 году вопрос «ставить или не ставить антивирус» бессмыслен. Почти у всех он уже есть, просто в разной форме. Правильный вопрос: «Достаточен ли мой текущий уровень защиты конечных точек для моих рисков?».</p><p>Рекомендации следующие:</p><ul><li><b>Для рядового пользователя / студента.</b> Агрессивный режим Windows Defender/Security Center + современный браузер с антифишингом + блокировщик рекламы + здравый смысл = хороший базовый уровень. Сторонний антивирус — опционально, для душевного спокойствия.</li><li><b>Для разработчика / IT-специалиста.</b> Встроенный защитник — это только начало. Обязателен более продвинутый агент (например, из бесплатных — Comodo Internet Security с включенным HIPS, из платных — решения с EDR типа Kaspersky Endpoint Security или Dr.Web Security Space). Жёсткий файрвол. Обязательное использование песочниц или контейнеров для тестирования подозрительного кода. Сканирование зависимостей (SCA) в своих проектах.</li><li><b>Для корпоративной среды.</b> Тут без вариантов. Нужна полноценная платформа EPP/EDR, интегрированная с SIEM и SOC. Антивирусная составляющая — один из ключевых сенсоров в этой системе, отвечающий за сбор телеметрии и блокировку на ранних стадиях атаки.</li></ul><p>Антивирус в старом понимании мёртв. Но жива интегрированная платформа безопасности конечной точки, которая умеет не только искать вирусы, но и понимать поведение, расследовать инциденты и давать ответ. Это своего рода цифровой иммунитет, который обеспечивает устройствам полноценную защиту.</p><p>Сказанное <a href="https://www.kaspersky.ru/blog/kaspersky-rebranding/22821/">подтверждает</a> Евгений Касперский:</p><blockquote>«Я твёрдо уверен, что само понятие «кибербезопасность» в скором времени себя изживет, а на замену ему придёт концепция “кибериммунитета”».</blockquote><p><br /></p>]]></content:encoded>
    </item>
    <item>
      <title>Лучшие ТГ-каналы для DevOps-инженеров</title>
      <link>https://tproger.ru/articles/luchwie-tg-kanaly-dlya-devops-inzhenerov</link>
      <comments>https://tproger.ru/articles/luchwie-tg-kanaly-dlya-devops-inzhenerov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/luchwie-tg-kanaly-dlya-devops-inzhenerov</guid>
      <description><![CDATA[<p>Подборка лучших Telegram-каналов для DevOps: разборы реальных инцидентов,  практика, новости облаков и контейнеризации. Источники, которые экономят время и помогают расти профессионально.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/luchwie-tg-kanaly-dlya-devops-inzhenerov">Лучшие ТГ-каналы для DevOps-инженеров</a>»</p>]]></description>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 24 Oct 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пока вы читаете этот текст, в мире появляется новый инструмент или выходит критическое обновление Kubernetes. Чтобы оставаться на гребне волны, недостаточно официальной документации — нужны живые источники знаний. Мы собрали Telegram-каналы, которые действительно помогут DevOps-инженеру быть в курсе всех инженерных событий.</p><h2>1. DevOps Deflope News</h2><p><a href="https://t.me/+7a2v7dZJR0w5NTUy">DevOps Deflope News</a> — один из самых известных русскоязычных каналов о DevOps, созданный инженерами компании «Флант». Здесь собирают только то, что действительно нужно специалистам: обновления инструментов, результаты исследований индустрии, новые интересные проекты и технологии. Авторы фильтруют десятки новостных потоков и выкладывают лишь проверенные и практически полезные материалы.</p><p>Помимо дайджестов и аналитических постов, команда выпускает подкаст с живыми разговорами о DevOps и опыте из первых рук.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/e4db86c7-d17f-4f7f-830b-d7bbbbbc8f6d.png" alt="" /></figure><h3>Подход и методология</h3><p>Редакция делает акцент на практических кейсах и обзорах инструментов, которые уже применяются в продакшене. Формат — короткие советы, лонгриды и подборки ссылок с экспертными комментариями. За контентом стоят инженеры «Фланта» — те самые, кто ежедневно работает с инфраструктурой и CI/CD-пайплайнами.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/481c9eb6-6f5b-4fd6-8a7e-d7d431447d75.png" alt="" /></figure><h3>Сценарии использования</h3><p>Канал рассчитан на DevOps-инженеров уровня middle и выше: тех, кто хочет держать руку на пульсе инструментов и технологий. Что можно найти: идеи для интеграции CI/CD и оптимизации пайплайнов; материалы о тестировании инфраструктуры и автоматизации проверок; опыт внедрения DevOps-практик и управления командами. Контент подаётся без избыточных объяснений, поэтому даже короткий пост часто даёт инсайт, который экономит часы экспериментов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/934dc35b-b85d-4599-a29d-07c643d2fa99.png" alt="" /></figure><h3>Особенности и отличия</h3><p>DevOps Deflope News выделяется тем, что сохраняет баланс между экспертностью и живостью подачи. Это сообщество специалистов, у которых есть мнение и чувство юмора. Канал связан с подкастом<a href="https://devopsdeflope.mave.digital/ep-55"> DevOps Deflope</a>, где обсуждают свежие релизы и реальные кейсы внедрения DevOps в российских компаниях.</p><p>Канал открыт для всех. Публикации выходят примерно раз в неделю — достаточно часто, чтобы быть в курсе, но без перегрузки. Комментарии доступны, а для связи с редакцией работает <a href="https://t.me/dvpsdflpfdbkbot">бот</a>.</p><h2>2. Mops DevOps</h2><p><a href="https://t.me/devops_mops">Mops DevOps</a> — один из самых насыщенных по контенту русскоязычных каналов о DevOps, который уже много лет служит своеобразным путеводителем по экосистеме Kubernetes, Docker, Terraform и облачных технологий. Здесь собирают и систематизируют всё, что нужно инженеру: свежие релизы, обучающие статьи, подборки инструментов, ссылки на книги, вебинары и курсы. Канал живёт за счёт сообщества — контент обновляется несколько раз в неделю.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/4c626caf-f131-4f91-b1df-36ed4891f555.png" alt="" /></figure><h3>Подход и методология</h3><p>Создатели канала делают ставку на системность и навигацию. Каждый пост сопровождается хэштегами по темам — от #kubernetes и #terraform до #aws, #book и #conference. Это превращает канал в удобный справочник: можно быстро найти нужный материал по конкретной технологии или инструменту. Подход к подаче — максимально утилитарный: короткие аннотации, конкретные ссылки, минимум воды. Авторы не пересказывают документацию, а делятся тем, что реально работает в продакшене.</p><h3>Сценарии использования</h3><p>Канал полезен тем, кто живёт в инфраструктуре. DevOps-инженеры находят здесь новые практики, примеры конфигов и инструменты для автоматизации; гайды по CI/CD и интеграции пайплайнов с кодом;  советы по логированию, мониторингу и тестированию на уровне инфраструктуры.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/4e820b19-5e02-477a-bd68-04c53f96bb1a.png" alt="" /></figure><h3>Особенности и отличия</h3><p>Главная фишка Mops DevOps — масштаб и удобство поиска. Благодаря продуманной системе тегов канал можно использовать как базу знаний: хочешь курс — открываешь #course, ищешь утилиты — идёшь в #tools, интересуешься конференциями — смотришь #conference. Контент подаётся в ровном ритме и не скатывается в поток случайных ссылок. Баланс между серьёзными статьями и лёгкими материалами выдержан — можно прочитать разбор безопасности AWS, а затем переключиться на мем про Docker.</p><h3>Технические детали</h3><p>Канал открыт и активно обновляется. Новые посты появляются несколько раз в неделю. Комментарии выключены. За контентом стоит команда инженеров и энтузиастов, которые делают это не ради трафика, а из интереса к профессии.</p><h2>3. OrangeDevOps</h2><p><a href="https://t.me/orangedevops">OrangeDevOps</a> — камерный, но один из самых живых русскоязычных каналов о системном администрировании и DevOps. Здесь нет вылизанных шаблонов и корпоративной редакции — всё строится вокруг опыта одного автора, инженера @il_da_r, который пишет по ходу работы: делится новыми инструментами, ссылками на статьи, наблюдениями из практики и собственными лайфхаками. Канал напоминает инженерный дневник, где полезные материалы чередуются с ироничными комментариями и находками из комьюнити.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/1bee1a63-defc-4f99-9afb-c63b663bcf98.png" alt="" /></figure><h3>Подход и методология</h3><p>Подход к подаче — предельно неформальный, но выверенный по сути. Автор не пересказывает новости, а делится тем, что действительно пригодилось в деле: от обхода блокировок Docker Hub до настройки мониторинга через Selectel. Формат — короткие посты, часто с рабочими конфигами, YAML-фрагментами и ссылками на исходники. Каждый материал сопровождается коротким комментарием из жизни, что создаёт эффект личного общения, а не учебника.</p><h3>Сценарии использования</h3><p>Канал подойдёт прежде всего практикующим DevOps-инженерам и сисадминам, которые ищут конкретные решения и идеи. Здесь можно подсмотреть, как быстро настроить зеркало Docker Hub, найти сборник GitHub-репозиториев по инфраструктуре, вспомнить про бесплатные метрики в Selectel или почитать живое обсуждение собеседований.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/dcf57035-c980-4583-bf51-d2e792f6b92c.png" alt="" /></figure><h3>Особенности и отличия</h3><p>OrangeDevOps выделяется своей аутентичностью — это не медиа и не агрегатор, а личный инженерный журнал. Публикации идут неровно: сегодня может быть YAML-файл с инфраструктурой под Яндекс.Облако, завтра — ссылка на «взаимное собеседование в поезде» с ироничным комментарием. Канал создаёт ощущение присутствия в живом профессиональном кругу, где обсуждают не тренды, а реальные задачи.</p><h3>Технические детали</h3><p>Канал открыт, посты выходят несколько раз в неделю — в зависимости от находок и вдохновения автора. Комментарии активны, дискуссии случаются нечасто. За всё отвечает один человек, без редакционной фильтрации — именно поэтому контент выглядит живым, честным и «полевым».</p><h2>4. DevOps&amp;SRE Library</h2><p><a href="https://t.me/devopslibrary">Канал</a>, который стоит в закладках у каждого инженера, следящего за практиками DevOps и Site Reliability Engineering. DevOps&amp;SRE Library — это библиотека по эксплуатации, инфраструктуре, автоматизации и наблюдаемости.Куратор канала — инженер @mxssl, известный своей любовью к чистому коду и точной подаче технического контента.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/5a4b9f8d-e7a8-4ce0-a487-b8c9164b3510.png" alt="" /></figure><h3>Подход и методология</h3><p>Здесь публикуются только материалы, прошедшие фильтр технической ценности — руководства, блоги компаний, репозитории и статьи от экспертов. Каждый пост оформлен в едином лаконичном формате: краткое описание и ссылка на первоисточник. Такой подход экономит время и помогает быстро понять, стоит ли углубляться в тему.</p><h3>Сценарии использования</h3><p>DevOps&amp;SRE Library подойдёт инженерам, архитекторам и техническим лидам, которые хотят оставаться в контексте инфраструктурных практик. Это место, где можно найти проверенные материалы о Kubernetes, CI/CD, миграциях баз данных, наблюдаемости, Terraform и автоматизации с элементами AI. Канал станет хорошим источником для составления внутренней библиотеки ссылок в команде или подготовки к архитектурным интервью.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-23/e2137393-136f-4842-9f91-123c607e8943.png" alt="" /></figure><h3>Особенности и отличия</h3><p>Главная особенность — высокий порог качества. Контент здесь напрямую ведёт к источникам знаний: официальным блогам, исследовательским материалам и репозиториям. Канал не перегружен комментариями, но создаёт ощущение спокойного, академичного пространства, где инженер учится думать системно. DevOps&amp;SRE Library — это скорее инструмент самообразования, чем информационный поток.</p><h3>Технические детали</h3><p>Публикации выходят регулярно, но без жёсткого графика — только тогда, когда материал действительно стоит внимания. Канал открыт, комментарии отключены, что делает его удобным для чтения и пересылки коллегам. Ведёт проект один человек, что обеспечивает единый голос и неизменное качество.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ-10 CI/CD инструментов для DevOps: автоматизируй рутину и экономь время</title>
      <link>https://tproger.ru/articles/top-10-ci-cd-instrumentov-dlya-devops--avtomatiziruj-rutinu-i-ekonom-vremya</link>
      <comments>https://tproger.ru/articles/top-10-ci-cd-instrumentov-dlya-devops--avtomatiziruj-rutinu-i-ekonom-vremya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-10-ci-cd-instrumentov-dlya-devops--avtomatiziruj-rutinu-i-ekonom-vremya</guid>
      <description><![CDATA[<p>Топ-10 CI/CD инструментов для DevOps: подробный обзор Jenkins, GitLab CI, CircleCI, werf, Argo CD и других. Критерии выбора, сравнение возможностей и сценариев применения. Как автоматизировать пайплайны для облачных и Kubernetes-проектов. Гайд для DevOps-инженеров по настройке эффективной доставки кода.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-10-ci-cd-instrumentov-dlya-devops--avtomatiziruj-rutinu-i-ekonom-vremya">Топ-10 CI/CD инструментов для DevOps: автоматизируй рутину и экономь время</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Jenkins]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 21 Oct 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Что такое CI/CD и почему это важно для DevOps</h2><p>CI/CD — это практика непрерывной интеграции, доставки и развёртывания. Её цель проста: сократить путь от коммита до пользователя, убрать ручные действия и повысить предсказуемость релизов. Для DevOps это опора в ежедневной рутине. Автоматизация CI/CD снижает количество регрессий, ускоряет обратную связь и делает выпуск версий управляемым процессом, а не приключением.</p><h3>Ключевые принципы CI/CD</h3><p>CI/CD — набор практик, направленных на автоматизацию сборки, тестирования, доставки и выкатки изменений. Их цель — уменьшить время между коммитом и выпуском релиза, повысить качество и предсказуемость.</p><p><b>Непрерывная интеграция (CI, Continuous Integration).</b> Команда часто коммитит в общую ветку, где каждый коммит автоматически собирается и тестируется. Код после CI находится в состоянии, готовом к выкатыванию по запросу (обычно кнопкой или автоматическим триггером. Чем раньше обнаружен дефект в коде, тем дешевле его исправление. Хороший CI даёт быстрые сборки, параллельные тесты и прозрачные отчёты.</p><p><b>Непрерывная доставка (CD, Continuous Delivery). </b>Готовый артефакт можно развернуть в любое окружение по кнопке. Конвейер проверок одинаков для стейджинга и продакшена. Доставка включает хранение артефактов, промоушен версий и контроль качества.</p><p><b>Непрерывное развёртывание (CD, Continuous Deployment) </b>— автоматическая выкатка в прод после успешного прохождения всех стадий CI/CD-пайплайна. Это финальная ступень: успешный пайплайн сам выкатывает релиз в прод. Важны стратегии деплоя, откаты и наблюдаемость. Команда концентрируется на продукте, а не на ручном процессе его выкатывания в продакшн.</p><h2>Обзор популярных CI/CD инструментов</h2><p>Ищете лучшие CI/CD инструменты для автоматизации процессов разработки? Мы собрали подборку сервисов, которые помогают DevOps-инженерам экономить время и повышать эффективность — от Jenkins и GitLab CI до werf и Argo CD.</p><h3>1. Jenkins: гибкость и расширяемость</h3><p>Jenkins — классика жанра. Это self-hosted сервер автоматизации с огромной экосистемой плагинов (​​более 1800 активных). Jenkins не имеет встроенной поддержки контейнерных окружений, но достигает этого через плагины (Docker/Kubernetes). То есть это open source-платформа для CI/CD, разворачиваемая локально.</p><p>Jenkins может работать как в контейнере, так и на виртуальной машине или bare-metal. Он умеет почти всё, от сборки контейнеров до сложных фан-аут пайплайнов. Контейнерные сборки Jenkins поддерживает через Docker plugin, Kubernetes plugin, Pod Templates.Пайплайны можно описывать на Groovy как скрипт в Jenkinsfile, а также декларативно — что даёт разработчикам свободу выбора и гибкость конфигурации.</p><p>Архитектура мастер-агентов масштабируется горизонтально. Агентов можно масштабировать, подключая локальные или удалённые исполнители — через SSH, JNLP, Kubernetes, EC2 и др.</p><p>Управление идёт через веб-интерфейс и код в репозитории. Комьюнити огромное, документации много. Платить не нужно из-за лицензии MIT, но администрирование потребует времени и дисциплины — например, установка, настройка и поддержка плагинов, агентов и обновлений.</p><h3>2. GitLab CI: всё в одном</h3><p>GitLab CI встроен прямо в платформу GitLab как часть GitLab Core. Она активируется через файл .gitlab-ci.yml в корне репозитория. Этот файл поддерживает стадии (stages), задания (jobs), зависимости (needs) и артефакты (artifacts).</p><p>Репозитории, коды ревью, пайплайны и контейнерный регистр живут вместе, что здорово упрощает жизнь. GitLab объединяет полный DevOps-цикл в одной платформе:</p><ul><li>Git-репозиторий</li><li>Code Review / Merge Requests</li><li>CI/CD pipelines</li><li>GitLab Container Registry</li><li>Issue tracking и Wiki.</li></ul><p>Это — ключевая особенность GitLab, отличающая его от связки GitHub + Actions.</p><p>Раннеры бывают общими и приватными:</p><ul><li>shared runners — глобальные, доступные всем проектам в GitLab SaaS;</li><li>specific runners — установленные внутри организации для конкретных проектов;</li><li>group runners, используемые для нескольких репозиториев внутри одной группы.</li></ul><p>Секреты хранятся в защищённых переменных:  GitLab CI/CD использует Protected Variables и Masking, чтобы скрывать токены, пароли и ключи в логах. Также GitLab поддерживает monorepo-паттерн через директивы rules, only/except, changes, needs и workflow: — чтобы запускать пайплайны избирательно по изменённым директориям. Также можно использовать child pipelines и multi-project pipelines, что часто применяют в крупных монорепозиториях.</p><p>GitLab CI/CD визуализирует пайплайн как граф зависимостей (Pipeline Graph), а логи задач отображаются построчно в реальном времени. В облаке старт быстрый, self-managed подходит для компаний с требованиями к данным.</p><p>GitLab Community Edition (CE) — open source и содержит все базовые функции CI/CD, включая пайплайны, раннеры, артефакты и переменные.</p><p>Платная версия (Premium/Ultimate) добавляет улучшения:</p><ul><li>advanced security scanning,</li><li>compliance dashboards,</li><li>merge approval policies,</li><li>analytics и SLA-поддержку.</li></ul><h3>3. CircleCI: облачное решение</h3><p>CircleCI — облачный CI/CD-сервис, который позволяет запускать сборки без сложного администрирования. Всё работает из коробки: пайплайны описываются в .circleci/config.yml, где определяются задачи, окружения и зависимости. Благодаря встроенному кэшированию шагов, workspace sharing и Docker layer caching сборки выполняются значительно быстрее, чем в большинстве self-hosted решений.</p><p>CircleCI поддерживает интеграции с GitHub, Bitbucket и GitLab Cloud, а также готовые orbs — переиспользуемые блоки конфигурации для типовых задач вроде деплоя, тестирования и уведомлений. Веб-интерфейс предлагает подробные Insights dashboards, которые показывают метрики успешности пайплайнов и эффективность кэша.</p><p>Секреты управляются централизованно через Contexts — безопасные хранилища переменных окружения с гибкой системой доступа. Для приватных проектов доступна версия CircleCI Server, устанавливаемая в собственный кластер Kubernetes или в частное облако, что обеспечивает полный контроль над данными.</p><p>CircleCI поддерживает Linux, Docker, macOS и Windows-окружения, а также масштабирование сборок с помощью параллелизма и матриц тестов. Простая структура YAML и обширная библиотека orbs делают миграцию с других CI-систем делом нескольких часов, а не недель — что и делает CircleCI одним из самых популярных облачных CI/CD-инструментов у DevOps-команд по всему миру.</p><h3>4. werf: Kubernetes-доставка «под ключ»</h3><p><a href="http://ru.werf.io/?utm_source=web&amp;utm_medium=tproger&amp;utm_campaign=ci_cd">werf </a>— CLI-утилита для сборки и доставки приложений в Kubernetes. Она закрывает ключевые участки конвейера и избавляет команду от рутины. Инструмент собирает образы, тегирует и переиспользует ранее собранные слои. На этапе развёртывания werf позволяет реализовывать сложные сценарии и обеспечивает детальную обратную связь. Всего одна команда werf converge — и утилита инкрементально пересобирает и разворачивает только то, что действительно изменилось по сравнению с предыдущей версией приложения.</p><p>Дополнительно версию приложения можно упаковать в бандл (werf bundle publish) — автономный пакет, включающий все образы и манифесты Kubernetes. Такой бандл можно доставить и развернуть без доступа к внешнему миру — это важно для комплаенса и изолированных сред.</p><p>При очистке container registry (werf cleanup) можно применять гибкие политики, которые учитывают активность в Git и использование образов в кластере Kubernetes, освобождая место без риска удалить нужное. Очистка на сборочных хостах автоматизирована: при удалении кэша сохраняется баланс между скоростью сборки и использованием дискового пространства.</p><p>Ключевой акцент — детерминированность. Конфигурация и сборочный контекст читаются напрямую из Git, а внешние зависимости либо исключаются, либо должны быть явно зафиксированы пользователем. Такой подход обеспечивает прозрачность и предсказуемость конвейера для всех участников, а также соответствие требованиям комплаенса.</p><p>werf особенно полезен в больших проектах (монорепозиториях) с активной разработкой, где эффективность и прозрачность на каждом этапе играет критическую роль, а её игнорирование приводит к росту time to market и издержек.</p><p>Управление идёт через CLI, а конфигурация описывается в Git проекта: werf.yaml, набор Dockerfile’ов и Helm-чарт с расширенными возможностями. Дистрибуция осуществляется через бинарный файл и готовые контейнерные образы для запуска в Kubernetes. werf предоставляет удобную интеграцию с GitLab CI/CD и GitHub Actions, но так же полноценно работает с любой CI-системой. Переход между container registry не требует миграции конфигов — достаточно поменять одну опцию, и сборка, публикация и очистка продолжат работать бесшовно для пользователя.</p><p>Поддержка с <a href="https://ru.werf.io/docs/">подробной документацией</a>, активными каналами для комьюнити в Telegram (@werf_ru, @werf_io) и <a href="https://cloud-native.slack.com/archives/CHY2THYUU">Slack</a>, <a href="https://github.com/werf/werf">репозиторий</a> на GitHub. werf экономит время DevOps тем, что скрывает промежуточные сущности и даёт «одну кнопку» доставки для Kubernetes без «ручного труда».</p><p>Лицензия Apache 2.0, инструмент бесплатен.</p><h3>5. Travis CI: для открытого исходного кода</h3><p>Travis CI — один из старейших облачных CI/CD-сервисов, который сделал непрерывную интеграцию массовой. Он особенно популярен в мире open source, так как предлагает бесплатные сборки для публичных репозиториев GitHub. Travis CI поддерживает десятки языков — от Python, Go и Node.js до Rust, Java и Swift, а также простейшую YAML-конфигурацию, понятную даже новичкам.</p><p>Файл .travis.yml определяет этапы сборки, тесты, деплой и условия запуска. Travis автоматически создаёт окружение, устанавливает зависимости, запускает тесты и, при успехе, может задеплоить артефакты в Docker Hub, AWS, GCP или другие облака. Секреты хранятся через encrypted environment variables, а безопасность сборок обеспечивается изоляцией в контейнерах или VM.</p><p>Travis CI предлагает два режима работы:</p><ul><li>SaaS (travis-ci.com) — для публичных и приватных репозиториев GitHub и Bitbucket,</li><li>Enterprise/self-hosted — для компаний с повышенными требованиями к приватности.</li></ul><p>Его главные плюсы — простота и скорость старта. Подключить репозиторий и запустить пайплайн можно буквально за пару минут. Однако Travis постепенно уступает по гибкости GitHub Actions и GitLab CI — например, ограничен в управлении артефактами и параллелизме. Тем не менее, для небольших команд и open source-проектов это лёгкое, надёжное и исторически проверенное решение.</p><h3>6. TeamCity: для больших команд</h3><p>TeamCity — CI/CD-платформа от JetBrains, известная своей мощностью и глубокой интеграцией с IDE. В отличие от облачных решений вроде CircleCI или Travis, TeamCity чаще разворачивают on-premises — в инфраструктуре компании, где важны гибкость, безопасность и контроль над ресурсами.</p><p>TeamCity поддерживает агентную архитектуру: сервер управляет заданиями, а агенты выполняют сборки. Это позволяет масштабировать систему горизонтально и распределять нагрузку по проектам. Пайплайны можно описывать как через веб-интерфейс, так и в коде — с помощью Kotlin DSL, что делает конфигурации воспроизводимыми и версионируемыми.</p><p>Сильные стороны TeamCity — интеграции и аналитика. Он «из коробки» работает с GitHub, GitLab, Bitbucket, Perforce, Docker, Kubernetes и Jira. Поддерживаются артефактные зависимости, триггеры по веткам, матрицы тестов, параллельные билды и мониторинг производительности сборок. Интерфейс предоставляет подробные отчёты, логирование, метрики и визуализацию пайплайнов.</p><p>TeamCity доступен в двух вариантах:</p><ul><li>Professional (бесплатно) — до 100 сборочных конфигураций и 3 агентов;</li><li>Enterprise (платно) — без ограничений, с приоритетной поддержкой.</li></ul><p>Для DevOps-команд TeamCity остаётся «тяжёлым, но умным» решением: он требует настройки, зато даёт полный контроль над процессами и идеально подходит для крупных компаний с множеством проектов, репозиториев и зависимостей.</p><h3>7. GitHub Actions: CI/CD там, где живёт код</h3><p>GitHub Actions встроен в GitHub. Воркфлоу запускаются по событиям, секреты живут в Environments, а артефакты сохраняются в Actions storage. Marketplace с тысячами экшенов ускоряет старт. Для облачных проектов это быстрый способ получить работающий CI/CD за день. Для сложных сценариев пригодится matrix-сборка, self-hosted runners и защита окружений.</p><h3>8. Argo CD: GitOps-развёртывания в Kubernetes</h3><p>Argo CD — это инструмент для GitOps-развёртывания, который делает Kubernetes-деплой управляемым и прозрачным. Он следит за Git-репозиторием и автоматически приводит кластер к описанному в нём состоянию. Это не система сборки, а надёжный механизм доставки: если в Git изменилась конфигурация — Argo CD синхронизирует её с продакшеном.</p><p>Поддерживаются Helm, Kustomize, Jsonnet и стандартные YAML-манифесты. Через удобный веб-интерфейс можно увидеть актуальное состояние приложений, историю откатов и дрейф ресурсов. Инструмент умеет работать с несколькими кластерами и окружениями, что делает его особенно полезным для микросервисных архитектур.</p><p>Argo CD построен по принципу GitOps — он постоянно сверяет кластер с Git и восстанавливает соответствие, если кто-то изменил ресурсы вручную. Для DevOps-команд это надёжная «правая рука»: прозрачные деплои, полная история изменений и уверенность, что инфраструктура в кластере точно такая, как описано в коде.</p><h3>9. Tekton: конструктор конвейеров на Kubernetes</h3><p>Tekton — это фреймворк для построения CI/CD прямо внутри Kubernetes. Он создан по принципу cloud-native by design: все компоненты — это Custom Resource Definitions (CRD), которые управляются контроллерами кластера.</p><p>Каждый шаг пайплайна выполняется в отдельном контейнере, а весь процесс описывается декларативно в виде Kubernetes-ресурсов: Task, Pipeline, PipelineRun. Это делает Tekton естественной частью экосистемы Kubernetes: CI/CD можно описывать, версионировать и управлять им через kubectl.</p><p>Tekton не навязывает UI или оркестратор, но при необходимости расширяется с помощью Tekton Dashboard, Triggers, Chains и Hub. Он хорошо интегрируется с GitOps-инструментами вроде Argo CD и системами управления секретами (Kubernetes Secrets, Vault, Secret Manager).</p><p>Инструмент подойдёт DevOps-командам, которые уже используют Kubernetes и хотят строить конвейеры без внешних серверов и лишней инфраструктуры. Tekton даёт гибкость, масштабируемость и прозрачность — всё, что ценят разработчики в нативных cloud-решениях.</p><h3>10. Azure DevOps, Bamboo, Buildkite и другие</h3><p>Azure DevOps особенно ценят команды, работающие в экосистеме Microsoft. Это единая платформа, объединяющая репозитории, пайплайны, артефакт-сторы и трекер задач Azure Boards. Глубокая интеграция с GitHub, Active Directory и облаком Azure делает её удобной для крупных корпоративных проектов, где важны контроль доступа и централизованное управление инфраструктурой.</p><p>Bamboo — продукт Atlassian, органично встраивающийся в связку Jira, Bitbucket и Confluence. Он ориентирован на команды, которые уже живут в Atlassian-экосистеме и хотят управлять CI/CD прямо из единой среды. Bamboo поддерживает параллельные сборки, гибкие триггеры и мощные инструменты деплоя, сохраняя при этом привычный интерфейс Jira.</p><p>Buildkite сочетает облачную оркестрацию с self-hosted агентами. Такой гибридный подход даёт компаниям контроль над исполнением задач и безопасностью, не жертвуя удобством облачного интерфейса. Buildkite особенно популярен у крупных DevOps-команд, где важно совмещать изоляцию инфраструктуры с высокой масштабируемостью.</p><p>Среди нишевых решений стоит отметить Drone CI, Buddy, Semaphore и Spinnaker.</p><ul><li>Drone CI — лёгкий open source инструмент, работающий на контейнерах и YAML-конфигурациях, отлично подходит для self-hosted сценариев.</li><li>Buddy — ориентирован на визуальные пайплайны и быструю настройку автоматизации без глубоких знаний YAML.</li><li>Semaphore фокусируется на скорости — предлагает параллельные билды и гибкие матрицы тестов.</li></ul><p>Spinnaker создан Netflix для сложных multi-cloud деплоев, и остаётся эталоном для тех, кто строит масштабные delivery-конвейеры в AWS, GCP и Kubernetes.</p><h2>Как выбрать подходящий CI/CD инструмент для вашего проекта</h2><ul><li>Начните с исходных ограничений: важны требования к безопасности данных, облако или on-prem, навыки команды и бюджет. Оцените скорость и стабильность сборок, поддержку контейнеров и registry, хранение секретов. Для Kubernetes проверьте совместимость с Helm, Kustomize и GitOps.</li><li>Наблюдаемость критична: нужны логи, метрики и алерты, а пайплайны должны расти вместе с продуктом.</li><li>Опишите пайплайны кодом. Это снизит «дрейф конфигураций» и упростит обзоры.</li><li>Разделяйте ответственность: CI собирает и тестирует, CD развёртывает, GitOps удерживает состояние.</li><li>Внедрите шаблоны для типовых сервисов. Заранее продумайте кеширование и артефакты, чтобы не терять минуты на каждом шаге.</li><li>Начните с пилота на одном сервисе, а затем масштабируйте.</li><li>Не забывайте про безопасность: секреты в секрет-хранилищах, доступы минимальные, логи защищены.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Уязвимость в GitHub Copilot позволяла красть чужие AWS-ключи и другие секреты</title>
      <link>https://tproger.ru/news/uyazvimost-v-github-copilot-pozvolyala-krast-chuzhie-aws-klyuchi-i-drugie-sekrety</link>
      <comments>https://tproger.ru/news/uyazvimost-v-github-copilot-pozvolyala-krast-chuzhie-aws-klyuchi-i-drugie-sekrety?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/uyazvimost-v-github-copilot-pozvolyala-krast-chuzhie-aws-klyuchi-i-drugie-sekrety</guid>
      <description><![CDATA[<p>В GitHub Copilot Chat нашли уязвимость (CVSS 9.6): через промпт-инъекцию и обход CSP можно было вытянуть приватные репозитории и AWS-ключи</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/uyazvimost-v-github-copilot-pozvolyala-krast-chuzhie-aws-klyuchi-i-drugie-sekrety">Уязвимость в GitHub Copilot позволяла красть чужие AWS-ключи и другие секреты</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 15 Oct 2025 04:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В июне 2025 года исследователь безопасности Омер Майраз обнаружил критическую уязвимость в <b>GitHub Copilot Chat</b> (CVSS 9.6).</p><p>Она позволяла незаметно <b>вытянуть содержимое приватных репозиториев</b> — включая секреты (AWS-ключи, токены и пр.) — и полностью контролировать ответы Copilot, <b>подсовывая вредоносные подсказки</b> другим пользователям.</p><p>Проблема была закрыта GitHub после отчета через HackerOne — компания <b>отключила рендеринг изображений в Copilot Chat</b> как временную меру и <b>выпустила исправление</b> (фикс обозначен как решенный к 14 августа).</p><h2>Как работал реальный эксплойт</h2><p>Атака комбинировала две техники: <b>удаленную промт-инъекцию</b> и <b>обход Content Security Policy (CSP)</b> GitHub.</p><p>Исследователь вставлял «скрытые» комментарии или невидимые фрагменты в описания pull-request — содержимое оказалось доступно контекстно-чувствительному Copilot Chat у любого посетителя страницы.</p><p>Далее применялся <b>хитрый трюк с GitHub Camo</b> — прокси, через который GitHub переписывает внешние ссылки изображений. Злоумышленник заранее сгенерировал «словарь» валидных Camo-URL для символов/букв и попросил Copilot «отрисовать» нужные данные как последовательность 1×1-картинок.</p><p>При загрузке, эти картинки проксировались GitHub и делали возможным скрытую эксфильтрацию. Скомбинированный эффект: Copilot, работающий с правами жертвы, мог найти файлы с метками вроде AWS_KEY, закодировать их и вернуть наружу.</p><h2>Последствия и рекомендации</h2><p>Атака могла <b>скомпрометировать приватные исходники и секреты</b> — реальные риски для CI/CD, облачных аккаунтов и целостности проектов. В связи с этим есть набор <b>рекомендаций для команд</b> <b>и</b> <b>администраторов</b>:</p><ul><li>немедленно <b>пересмотреть</b> доступы и аудит логов в GitHub;</li><li><b>ротировать</b> ключи и секреты (особенно AWS, токены CI);</li><li>при возможности <b>отключить Copilot Chat</b> для чувствительных репозиториев или ограничить его доступ;</li><li><b>следить за обновлениями от GitHub</b> и применить исправления.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Как мы автоматизировали мутационное тестирование unit тестов на проекте в крупном банке с использованием Stryker.NET</title>
      <link>https://tproger.ru/articles/kak-my-avtomatizirovali-mutacionnoe-testirovanie-unit-testov-na-proekte-gazprombanka-s-ispolzovaniem-stryker-net</link>
      <comments>https://tproger.ru/articles/kak-my-avtomatizirovali-mutacionnoe-testirovanie-unit-testov-na-proekte-gazprombanka-s-ispolzovaniem-stryker-net?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[asyncguru]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-my-avtomatizirovali-mutacionnoe-testirovanie-unit-testov-na-proekte-gazprombanka-s-ispolzovaniem-stryker-net</guid>
      <description><![CDATA[<p>Опыт автоматизации мутационного тестирования Unit-тестов в крупном банке с помощью Stryker.NET. Практический кейс по внедрению в CI/CD, настройке и интеграции в legacy-проект. Как мы нашли слабые места в тестах и повысили их надёжность, не замедляя процесс разработки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-my-avtomatizirovali-mutacionnoe-testirovanie-unit-testov-na-proekte-gazprombanka-s-ispolzovaniem-stryker-net">Как мы автоматизировали мутационное тестирование unit тестов на проекте в крупном банке с использованием Stryker.NET</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 11 Oct 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Качественные модульные тесты помогают оптимизировать ресурсы команды разработки и увеличивают надежность создаваемого продукта. Оценить эффективность этих тестов можно с помощью автоматизированного инструмента для мутационного тестирования Stryker.NET.</p><p><i>Меня зовут Юрий Каган, я Software/System Architect в IT_ONE. Расскажу об опыте применения </i><i>Stryker.NET </i><i>на проекте в крупном банке. </i><i></i></p><h2>Качественные юнит-тесты —  основа надежного ПО</h2><p>Несмотря на то, что юнит-тесты —  только один из компонентов пирамиды тестирования ПО, они —  база для создания качественного кода:</p><p>– Благодаря проверке отдельных фрагментов кода можно <b>выявить дефекты на ранних стадиях</b>, не пропуская их на следующие этапы разработки. Известно, что чем раньше обнаружена ошибка, тем ниже стоимость её исправления.</p><p>– Модульные тесты обеспечивают <b>стабильность разработки</b>, служа некой страховкой: они предотвращают регрессии при изменениях и рефакторинге.</p><p>– Проведённые тесты служат документацией и <b>ускоряют внедрение нового функционала</b>. По ним можно понять изначальный замысел автора кода и упростить разработку.</p><p>Для оценки качества юнит-тестов разработчики обычно пользуются метрикой Code Coverage, отражающей процент покрытия тестами исходного кода. Такая информация может собираться различными способами в зависимости от типа используемого инструмента, но результат получается схожий: данные о том, какие конкретно фрагменты кода выполнялись во время тестов. О каких бы то ни было проверках речи не идет. То есть, по нашему опыту, технически очень легко можно написать тесты, которые будут давать 100% Code Coverage и при этом ничего не проверять. Это означает, что даже высокий процент покрытия кода тестами не гарантирует, что они разработаны качественно и поведение вашего кода надёжно зафиксировано. После них нельзя исключать скрытые ошибки.</p><p>Как следствие, постоянно осознавая риски некачественных тестов, разработчики могут начать бояться рефакторинга —  ведь любые изменения потенциально грозят дефектами в коде. Причем допущенный дефект может быть обнаружен намного позже, уже в продакшене. Всё это приводит к дополнительным рискам, замедляет и удорожает цикл разработки.</p><p>Но существует и другая, не столь широко известная метрика, которая более объективно описывает надёжность проведённых тестов: она определяется в процессе <b>мутационного тестирования</b>. Первые упоминания об этом подходе мы встречаем еще в 1970-х годах. Тогда он уже признавался перспективным, но в то же время —  практически неприменимым из-за запредельного объема работы. Сегодня мы имеем возможность автоматизировать большую часть этой работы с помощью инструментов, например, Stryker.NET.</p><h2>Принципы мутационного тестирования</h2><p>Алгоритм мутационного тестирования достаточно прост: в исходный код (базу) вносятся различные изменения (мутации). Существует несколько разновидностей мутаций. Основные из них:</p><p>– <b>изменение операторов</b>: замена арифметических и логических операторов (например, + на -, &gt;= на &gt;),</p><p>– <b>изменение значений</b>: замена булевых значений, удаление вызовов методов или изменение литералов,</p><p>– <b>изменение условий</b>: в if, циклах и логических выражениях.</p><p>Затем на этом модифицированном коде выполняются модульные тесты для проверки их чувствительности к изменениям. Мутанты, которые вызывают провал тестов, считаются «убитыми» (Killed Mutants), остальные —  «выжившими». По итогу проверки формируется отчет, где ключевая метрика качества тестов —  Mutation Score —  доля убитых мутантов от их общего количества. Если тесты не «убивают» подавляющее число мутантов, значит их нельзя считать достаточно эффективными.</p><p>Среди инструментов для автоматизации проведения мутационного тестирования мы остановили выбор на Stryker.NET и вот, почему:</p><p>– на данный момент Stryker.NET обладает <b>наибольшим объемом автоматизированных операций</b>: он самостоятельно вносит мутации в исходный код, запускает юнит-тесты и генерирует подробные отчеты;</p><p>– Stryker.NET <b>полностью интегрирован с .NET-экосистемой</b>: поддерживает .NET и .NET Framework, основные тестовые фреймворки (xUnit, NUnit, MSTest);</p><p>– Stryker.NET – это бесплатный <b>инструмент с открытым исходным кодом</b>, постоянно обновляемый и поддерживаемый сообществом, что гарантирует его актуальность и развитие.</p><p>По нашей практике, Stryker.NET будет полезен для трех категорий пользователей:</p><p>– <b>Разработчик</b> может убедиться, что новый код покрыт качественными тестами и изменения не привели к деградации существующих тестов, а также находить и удалять тесты, которые ничего не тестируют и только отнимают ресурсы.</p><p>– <b>Ревьюер</b> может быстро и надежно проверить качество тестов в pull request.</p><p>– <b>ИТ-архитектор и руководитель разработки</b> могут регулярно строить и анализировать отчеты, чтобы мониторить «здоровье» юнит-тестов во всей кодовой базе.</p><h2>Установка и использование Stryker.NET</h2><p>Технически Stryker.NET представляет из себя dotnet tool. Соответственно, чтобы его установить, необходимо выполнить команду в cmd или в PowerShell консоли:</p><p><i>dotnet tool install -g dotnet stryker</i></p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/29e01f48-c311-41e1-a22b-b0be87e83f32.png" alt="" /><figcaption>установка Stryker.NET</figcaption></figure><p>Получение и анализ отчетов: результаты выводятся в консоль и сохраняются в подробном HTML-отчете.</p><p>Stryker.NET поддерживает несколько сценариев, простейший из них — анализ проекта с кодом. В этом случае необходимо запустить мутационное тестирование из папки, где расположен файл проекта, указать имя этого файла без пути и через ключ <b><i>tp</i></b> указать полные пути ко всем файлам проектов, содержащим тесты для проекта с кодом. Например:</p><p><i>dotnet stryker -p “project.csproj” -tp “c:\git\project.tests\project.tests.csproj”</i></p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/19df0a95-2009-4c70-b05b-c9fc49c9da8c.png" alt="" /><figcaption>запуск Stryker.NET для анализа проекта с кодом</figcaption></figure><p>В результате тестирования программа сгенерирует отчет, где в первой колонке будет выведена метрика Mutation Score в целом по проекту и по отдельным файлам, причем разделённая на две группы: <i>Of total</i> —  общее количество мутантов, <i>Of covered</i> —  количество мутантов, находящихся в тех фрагментах кода, для которых вообще существуют тесты.</p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/2d7165e7-c7b8-4f67-ac0a-bcbab2514419.png" alt="" /><figcaption>детальный отчет Stryker.NET файлов проекта, метрики</figcaption></figure><p>В колонке <i>Killed</i> отображается количество убитых мутантов, в колонке <i>Survived</i> —  количество выживших. В колонке <i>Timeout</i> —  количество мутантов, которые привели к зацикливанию выполнения тестов и их прерыванию утилитой. Значения остальных колонок, а также другую важную информацию можно посмотреть в документации на официальном сайте <a href="https://stryker-mutator.io/docs/stryker-net/introduction/">https://stryker-mutator.io/docs/stryker-net/introduction/</a>.</p><p>Также важно отметить, что отчёт доступен для более глубокого и детализированного анализа: можно раскрыть параметры каждого файла и увидеть подробную информацию о том, какие именно изменения были произведены, какие из мутантов выжили и почему.</p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/c2f8db51-6aaa-4dc9-8fa2-10bee3457fef.png" alt="" /><figcaption>красная точка показывает часть кода с выжившим мутаном</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/e1b90d3b-d5fa-44e9-b39e-7c7e847a9287.png" alt="" /><figcaption>кликнув на красную точку, можно увидеть, какая именно мутация выжила</figcaption></figure><p>Stryker.NET умеет генерировать отчеты не только в HTML, но и в других форматах: например, в JSON, который очень удобен для автоматического анализа, если разработчики планируют встроить этот инструмент в свой CI/CD-пайплайн. Кроме того, есть встроенный дашборд, который, к сожалению, невозможно развернуть локально —  он доступен только как online сервис (https://dashboard.stryker-mutator.io).</p><h2>Применение Stryker.NET при разработке банковских продуктов</h2><p>Мы внедрили использование Stryker.NET в проекте для крупного банка, чтобы с помощью этого инструмента решить <b>ряд взаимосвязанных задач</b>. Самая главная проблема заключалась в том, что мы хотели улучшить качество тестов посредством мутационного тестирования, но его проведение вручную —  предельно утомительная и требующая много времени процедура. Ни Product Owners, ни разработчики не были готовы постоянно выделять на это ресурсы.</p><p>Без регулярного мутационного тестирования, нам было практически невозможно оценить текущее состояние всей кодовой базы с точки зрения качества unit тестов. У нас было много unit тестов, мы имели высокий процент Code Coverage, но не знали, насколько эти тесты нас защищают. В свою очередь, без понимания текущего состояния у нас не было возможности устанавливать команде цели по улучшению ситуации.</p><p>На данный момент команда активно <b>использует Stryker.NET на всех этапах разработки</b>.</p><p>Мы столкнулись и с ограничением использования Stryker.NET: попытка его интеграции в CI/CD-пайплайн оказалась неудачной. Это связано с тем, что кодовая база проекта насчитывает несколько миллионов строк, и выполнение всех проверок занимает примерно 12 часов. Однако мы думаем, что на проектах меньшего размера такая интеграция должна сработать.</p><p>Мы выбрали альтернативный вариант: был внедрен регулярный автоматический пост-релизный прогон Stryker.NET по ветке master, в результате которого генерируется сводный отчет. Проводится анализ изменений сводного отчета по всем проектам от релиза к релизу. По данным каждого сводного отчета мы можем оценивать работу конкретных проектных команд, и если их метрика Mutation Score недостаточно высока, – ставить цели по улучшению.</p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/cb80b102-c01a-4ed2-8892-af8630d0281f.png" alt="" /><figcaption>сводный отчет по всем проектам solution'на</figcaption></figure><p><b>Резюме</b><b></b></p><p>Итак, мутационное тестирование – мощный инструмент для повышения качества юнит-тестов и, соответственно, качества кода. Оно позволяет не только узнать, какой процент кода покрыт тестами, но и убедиться в том, что эти тесты действительно защищают код от ошибок.</p><p>Внедрение Stryker.NET —  шаг к более надёжной и предсказуемой разработке. Его регулярное использование помогает уверенно вносить изменения, рефакторить код и добавлять новый функционал.</p><p>Мы рекомендуем начать использование Stryker.NET в ваших проектах с ключевых модулей. При этом стоит постоянно делиться опытом с командой, чтобы наиболее эффективно улучшать программный продукт.</p>]]></content:encoded>
    </item>
    <item>
      <title>«SQL хорош для данных, но плох для логики» — почему все больше разработчиков выносят бизнес-логику из базы</title>
      <link>https://tproger.ru/news/-sql-horow-dlya-dannyh--no-ploh-dlya-logiki----pochemu-vse-bolwe-razrabotchikov-vynosyat-biznes-logiku-iz-bazy</link>
      <comments>https://tproger.ru/news/-sql-horow-dlya-dannyh--no-ploh-dlya-logiki----pochemu-vse-bolwe-razrabotchikov-vynosyat-biznes-logiku-iz-bazy?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/-sql-horow-dlya-dannyh--no-ploh-dlya-logiki----pochemu-vse-bolwe-razrabotchikov-vynosyat-biznes-logiku-iz-bazy</guid>
      <description><![CDATA[<p>SQL отлично справляется с данными, но неудобен для бизнес-логики: разработчики выносят её в код ради гибкости, скорости и независимости</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/-sql-horow-dlya-dannyh--no-ploh-dlya-logiki----pochemu-vse-bolwe-razrabotchikov-vynosyat-biznes-logiku-iz-bazy">«SQL хорош для данных, но плох для логики» — почему все больше разработчиков выносят бизнес-логику из базы</a>»</p>]]></description>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Oracle]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 24 Sep 2025 11:06:25 GMT</pubDate>
      <content:encoded><![CDATA[<p>Современные приложения все чаще используют базы данных исключительно как «хранилище», а не как движок для бизнес-логики. <i>Почему? </i></p><p>Потому что SQL, несмотря на свое превосходство в работе с данными, неудобен, ограничен и рискован в роли полноценного языка программирования.</p><h2>Логика не по адресу</h2><p>Как <a href="https://ewaldbenes.com/en/blog/why-i-keep-business-logic-out-of-sql">отмечает</a> Эвальд Бенс, фуллстек разработчик и авторов популярного блога об IT, он <b>предпочитает держать как можно больше логики в приложении</b>, а не в SQL-хранилищах, представлениях и процедурах:</p><blockquote>Я отношусь к базе как к тупому хранилищу данных. Вся логика — в коде. SQL просто не предназначен для сложных сценариев.</blockquote><p>И дело не в том, что SQL чего-то «не умеет». Умеет — особенно с расширениями вроде PL/pgSQL или Oracle PL/SQL.</p><p><b>Но выразительность этих языков — далека от Python, TypeScript, Rust или C#</b>, особенно когда речь идет о бизнес-логике, объектной модели или сложных расчетах.</p><h2>Зачем выносить логику из базы?</h2><h2>1. SQL невыразителен</h2><p>Для манипуляций с табличками и JOIN — он король. Но как только начинается рекурсия, классы, вложенные состояния или обработка ошибок — SQL превращается в монстра с BEGIN, IF, LOOP, EXCEPTION, RAISE, CURSOR, FETCH, WHILE и т.д...</p><h2>2. Развертывание — боль</h2><p>Обновить приложение можно за минуту, откатить — за две. А вот миграции на проде — это:</p><ul><li>повышенные права доступа;</li><li>согласование с DBA;</li><li>боязнь сломать что-то «наживую»;</li><li>ручной откат схем.</li></ul><h2>3. Лочит на вендора</h2><p>Логика, написанная на PL/SQL — это билет в один конец к Oracle. Переезд на PostgreSQL или SQL Server становится в 5 раз сложнее.</p><h2>4. Меньше инструментов</h2><p>Вокруг SQL есть утилиты, но полноценной среды с юнит-тестами, статическим анализом, форматтерами, профайлерами, линтерами и отладчиками — почти нет.</p><h2>А что с производительностью?</h2><p>Да, есть нюанс: <b>иногда лучше обработать данные прямо в базе</b>, чтобы не гонять десятки тысяч строк по сети. Это особенно актуально, если не хочется получить классическую проблему N+1-запросов.</p><p>Но даже в этом случае большинство специалистов советует <b>сначала делать «просто и понятно», а не «оптимально заранее»</b>. До тех пор, пока не уперлись в реальные метрики, выносить логику в базу — преждевременная оптимизация.</p><h2>Что делать?</h2><p>Подход <i>«база — хранилище, логика — в коде»</i> стал де-факто стандартом во многих командах. Но это не догма:</p><ul><li>Для отчетности или простых ETL сценариев логика в SQL может быть уместной.</li><li>Для монолитных решений без CI/CD и DevOps — процедурный SQL вполне оправдан.</li><li>Но в современной разработке с частыми релизами, микросервисами и отказоустойчивостью <b>бизнес-логика в приложении — просто удобнее и безопаснее</b>.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Как мы сократили время доставки кода в 40 раз, или Непрерывная поставка в действии</title>
      <link>https://tproger.ru/articles/kak-my-sokratili-vremya-dostavki-koda-v-40-raz--ili-nepreryvnaya-postavka-v-dejstvii</link>
      <comments>https://tproger.ru/articles/kak-my-sokratili-vremya-dostavki-koda-v-40-raz--ili-nepreryvnaya-postavka-v-dejstvii?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-my-sokratili-vremya-dostavki-koda-v-40-raz--ili-nepreryvnaya-postavka-v-dejstvii</guid>
      <description><![CDATA[<p>Опыт перехода на Trunk Based Development и Continuous Delivery: как убрать ожидания, ускорить разработку и сократить доставку кода в 40 раз.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-my-sokratili-vremya-dostavki-koda-v-40-raz--ili-nepreryvnaya-postavka-v-dejstvii">Как мы сократили время доставки кода в 40 раз, или Непрерывная поставка в действии</a>»</p>]]></description>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 02 Sep 2025 14:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Что делать, когда разработчики больше ждут, чем разрабатывают</p><h2>Почему разработчики большую часть времени… ждут?</h2><p>Как вы думаете, чем обычно занимаются разработчики? Программируют с утра до вечера? Или участвуют в планированиях? Проектируют решения? Проводят ретро? На самом деле, если понаблюдать за отдельными участниками команды в течение рабочего дня, окажется, что рабочий день в основном состоит из… ожиданий.</p><p>Ждут всего подряд. Ждут, когда подготовят требования. Ждут, когда пройдет сборка на этапе проверки пулл-реквеста. Ждут, пока его примут. Ждут очередного сборочного агента, прохождения проверок, свободного окна на полигоне, исправления очередного бага на стенде…</p><p>Если повезет — не придется слишком долго ждать согласования установки от тимлида в продакшен. Но уж наверняка команду заставит подождать очередной релизный цикл. И вот свершилось — вы в проде… Хотя постойте, ведь надо еще подождать завершения регресса, в котором вот только что выявили блокер, и все ждут его исправления. Если при всем при этом инструменты автоматизации не дали осечки, то мы наконец на проде. И уж тогда вишенкой на торте окажется ожидание включения фича-тогла.</p><p>В общем, одно сплошное ожидание. Надо было что-то менять — жизнь слишком коротка, чтобы столько ждать. После анализа процессов решили действовать по трем направлениям: во-первых, поделить команду на фича-команды для быстрого старта разработки; во-вторых, внедрить Trunk Based Development для упрощения работы с кодом; в-третьих, создать систему непрерывной поставки (CDP) для автоматизации доставки до продакшена.</p><h2>О TBD и CD простыми словами</h2><p>Если ударяться в аналогии, то для TBD хорошей параллелью будет супермаркет. Есть касса для тех, кто покупает много товаров, — там люди стоят с полными тележками, и процесс занимает много времени. А есть экспресс-касса для тех, кто взял один-два товара, — там очередь движется быстро.</p><p>Git-flow — это как обычная касса. Разработчики набирают полную «тележку» изменений в своих ветках, работают неделями, а потом все это нужно провести через сложную процедуру слияния и тестирования.</p><p>Trunk Based Development — это экспресс-касса. Берешь одно-два небольших изменения, быстро «пробиваешь» через простую процедуру и сразу попадаешь в основную ветку.</p><p>Основные принципы TBD:</p><ul><li>одна главная ветка (trunk) вместо множества долгоживущих веток;</li><li>маленькие изменения несколько раз в день вместо больших раз в неделю;</li><li>быстрое слияние — фича-ветка живет часы, а не дни;</li><li>автоматизация всего — тесты, проверки контрактов, деплой.</li></ul><p>CD (Continuous Deployment) — это процесс непрерывной поставки кода, который использует полностью автоматизированный конвейер. В нем ваш артефакт, собранный из транка, проходит все этапы контроля качества и доставляется в продакшен без участия инженера. Все виды тестов и проверок безопасности запускаются автоматически, результаты учитываются, и в случае успешного прохождения кволити гейтов происходит автоматизированный деплой в продакшен.</p><p>Важно понимать, что деплой в данном случае не равен релизу фичи, залог успешной работы конвейера непрерывной поставки — использование инструментов, позволяющих включать и выключать функциональность независимо, и желательно в любой нужный момент времени.</p><p>При использовании git-flow обычно нужен координатор. Это может быть тимлид, старший разработчик или менеджер релиза, который следит за содержанием фич, попадающих в состав релизной ветки, решает конфликты слияний и контролирует регрессионное тестирование и саму раскатку релиза. С TBD и CD эта сложность просто исчезает — код автоматически проходит весь путь от разработчика до клиента.</p><h2>Как это было у нас</h2><h2>Фича-команды для быстрого старта</h2><p>Первым делом взялись за скорость начала разработки. Разделились на фича-команды — небольшие кросс-функциональные группы из пяти–семи человек, которые могли работать над конкретными фичами независимо друг от друга. Также небольшой состав группы стимулировал увеличение доверия между инженерами и их вовлеченность. Что, в свою очередь, позволило проводить такие мероприятия, как груминг, более эффективно.</p><p>Отказались от сложной бюрократической документации с согласованиями в пользу быстрых грумингов и технологичной документации. Теперь вместо того чтобы неделями писать техзадания, команда на груминге за час-два входила в контекст задач и сразу декомпозировала их на конкретные шаги, после чего на планировании включала проработанные фичи в состав очередного спринта и приступала к реализации.</p><h2>Переход на TBD</h2><p>Следующим шагом проанализировали, как работаем с кодом. Выяснилось, что git-flow создает много накладных расходов: нужен координатор, который следит за составом фич в релизе, разрешает конфликты слияний, контролирует релизные ветки и процесс раскатки релиза. Плюс сами ветки живут долго, накапливают изменения, потом их сложно мержить, а главное — достаточно сложно анализировать проблему и устранять ее, если что-то идет не по плану при тестировании релиза или сразу после установки в прод. Ведь в большом релизе достаточно сложно сразу понять, какая именно из фич принесла поломку. Соответственно, анализ проблем в случае их возникновения регулярно затягивался, плюс приходилось проводить поиск ответственных за исправление. Все это накладные расходы, которые несет продукт и от которых хотелось бы избавиться, подыскав новый инструмент.</p><p>Решили перейти на TBD. Этот подход на тот момент уже начал внедряться в организации и сулил командам определенные преимущества. Схема простая: ответвляемся от транка, делаем небольшое изменение, сразу вливаем обратно. Никаких долгоживущих веток, никаких сложных схем слияния. Джентльменское соглашение между инженерами тут следующее: вливать в транк можно только логически завершенное изменение, минимальное требование — сервис компилируется и все юнит-тесты проходят. Исходим из того, что эта сборка должна быть готова к установке в пром.</p><h2>Quality gates и фича-тоглы</h2><p>Нам нужна была гарантия, что изменения не сломают код в главной ветке. Поэтому добавили Quality gates — автоматические проверки кода перед слиянием. Это набор критериев, которые код должен пройти: юнит и контрактные тесты, проверки безопасности и статический анализ кода на уязвимости, наличие фича-тоглов. Если хоть один критерий не выполнен — код не попадает в основную ветку.</p><p>Внедрили практики написания юнит-тестов и контрактных тестов. Начали активно использовать фича-тоглы — переключатели, которые позволяют включать новую функциональность. Таким образом мы отделили установку новой версии сервиса от включения новой фичи. Теперь запуск функциональности может производиться в тот момент, когда команде это потребуется.</p><h2>Переворачивание пирамиды тестирования</h2><p>Параллельно занялись пирамидой тестирования. Раньше основная нагрузка была на медленные интеграционные тесты, которые требовали развертывания полных окружений и зависели от доступности полигонов. Если какой-то из сервисов, необходимый для тестирования, на полигоне недоступен — весь процесс встает.</p><p>Следовало перевернуть подход. Это была поистине титаническая работа — пришлось переписать большую часть тестового покрытия, настроить новые окружения, подготовить заглушки и скрипты развертывания сервисов, а главное — обучить команду новым подходам к работе.</p><p>Создали систему быстрых и стабильных тестов, которые могли работать независимо от внешних систем. Большую часть проверок перенесли на уровень компонентных тестов — они значительно быстрее интеграционных и при этом проверяют реальную логику работы сервиса. Такое решение позволило отказаться от большей части интеграционных тестов, соответственно, мы уменьшили верхний уровень пирамиды и значительно расширили средний ее слой. Нижний слой увеличился за счет Quality gates и требований к минимальному уровню покрытия нового кода тестами. И пирамида приобрела целевой вид.</p><p>В результате уже через 30 минут после написания кода инженеры команды получали заключение и понимали, можно ли ставить эту сборку в продакшен. Вместо дней ожидания — минуты.</p><h2>Автоматизация доставки</h2><p>Осталась одна проблема: даже готовые артефакты долго (и не в полном объеме) добирались до клиентов. Подбили статистику: 40% сборок отсеивалось на самом раннем этапе, на первом контроле качества. 10% отсеивалось на Quality gates — не проходили тесты или проверки безопасности. 25–30% терялось на ожиданиях (опять!).</p><p>Каких? Поскольку процесс состоял из отдельных джобов, которые надо было запускать последовательно, один за другим, то разработчики ждали завершения работы агентов TeamCity, ждали завершения проверок тестов и сканеров безопасности, ждали установки на полигон. Инженеру приходилось ждать завершения всех технологических процессов, чтобы нажать очередную кнопку для перехода на следующий этап… И так для каждой подготовленной им версии. Конечно, это никому не нравилось: порядка 30% сборок никуда не двигались, хотя были готовы к установке на прод.</p><p>Чтобы изменить эту ситуацию, мы собрали рабочую группу из пяти инженеров — разработчиков пайплайна, которой поручили собрать из имеющихся механизмов конвейер непрерывной поставки.</p><p>Continuous Deployment (CD)  — это процесс доставки каждого коммита с использованием полностью автоматизированного пайплайна, который берет готовый код и доставляет его в продакшен без участия инженера. Вместо часов ожидания, пока разработчик вручную запустит сборку, увидит результаты и нажмет кнопки для перехода между стендами, мы получили систему, которая делает все это сама, и притом быстро. Код проходит все этапы: сборка → тестирование → проверки безопасности → деплой на тестовый стенд → установка в продакшен.</p><p>Ключевое отличие от обычной автоматизации — CD работает end-to-end, от коммита до продакшена. Раньше у нас были отдельные автоматизированные элементы, но переходы между ними требовали ручного вмешательства. CD связал их все в единый процесс с контролем качества на каждом этапе.</p><p>Итог: спустя неделю докатили первую полностью автоматическую поставку. Процесс от коммита до установки в прод занял около часа.</p><h2>Как все это сказалось на разработке</h2><p>Автоматизация процессов освободила до 15% времени инженеров. Эти часы команда потратила на более глубокую проработку новых задач, закрытие техдолга, личное развитие. Появилось больше времени делать то, что действительно интересно.</p><p>За счет непрерывного тестирования, Quality gates  и правильной пирамиды тестирования качество производимого кода существенно выросло, а риск поломки, наоборот, снизился.</p><p>В старой модели ошибку могли обнаружить через месяц после написания кода: делаем функцию, через месяц выясняется, что она работает неправильно. Начинаем вспоминать, что тогда думали, зачем делали именно так. В новом процессе проблемы видны сразу. Уже через несколько минут становится понятно, что есть ошибка или что-то идет неверно, а инженер фокусируется на том, чтобы сразу это поправить. В результате меньше стресса для команды, выше качество кода, быстрее обучение, а главное — без всей этой рутины и создания ненужных артефактов инженерам стало гораздо комфортней работать.</p><p>Главное преимущество для клиентов — они получают новые фичи спустя всего час после создания, при этом фичи эти более высокого качества, чем прежде. Это означает быстрое получение обратной связи от пользователей, возможность экспериментировать с новыми идеями, оперативно проводить А/Б-тесты и конкурентное преимущество для продукта за счет высокой скорости реакции на потребности рынка.</p><h2>Практические советы</h2><p>Тут может возникнуть закономерный вопрос: «Все это здорово, но это у вас большая организация, команды выделенных инженеров и ресурсы на титанические перевороты тестирования. А что делать нам?»</p><p>Главное понимать: не обязательно внедрять все сразу. Каждый элемент нашего подхода можно внедрять и применять по отдельности. Начните с того, что болит больше всего, и постепенно двигайтесь дальше. Так, в сущности, было и у нас: мы последовательно шли к комплексному результату и синергетическому эффекту применения всех методов, описанных выше.</p><h2>Если у вас низкий ТТМ</h2><p>Проанализируйте, где команда тратит больше всего времени. Долгая подготовка и ревью документации перед началом разработки? Попробуйте сделать размер команды меньше, разделив крупную на две-три фича-тим, это позволит вовлекать всех инженеров в принятие решения о том, как будем реализовывать фичу. Давайте им возможность проектировать решение, а не диктуйте, как назвать очередную переменную или поле в базе данных. Сложные слияния? Начните мержить в основную ветку чаще — хотя бы раз в день вместо недели. Сразу пишите тесты. Ручные операции? Автоматизируйте одну небольшую операцию — например, запуск тестов при коммите или проверку статическим анализатором или линтером.</p><h2>Если хотите попробовать элементы TBD</h2><p>Начните постепенно: сократите время жизни веток до двух-трех дней максимум, договоритесь делать ревью приоритетом — отвлекаться от задач ради ревью коллег. Попробуйте фича-тоглы на одной небольшой фиче. Увеличивайте частоту релизов, это приведет их одновременному уменьшению, а значит, увеличению скорости тестирования.</p><p>Внедряйте TBD последовательно, поочередно в каждом из ваших сервисов. Пилотируйте этот подход в сервисах, в которых проводится меньше изменений или которые стоят на периферии вашей системы, ведь инженеры должны убедиться, что метод работает и этот подход упрощает им жизнь, а не добавляет хлопот в виде постоянных поломок прода.</p><p>Важно: не переходите на TBD без качественных юнит-тестов и подключения фича-тоглов — сначала напишите хотя бы базовое покрытие тестами и подключите тоглы, пусть на уровне конфига сервиса. Ведь главное правило — транк всегда должен быть готов к установке в прод в любой момент времени. Готовьте компонентные тесты для методов сервисов, участвующих в критически важных бизнес-процессах, в первую очередь.</p><h2>«База» для разработчика</h2><p>Влияйте личным примером: погружайтесь в бизнес-процессы и идеи, лежащие в основе очередной фичи-команды, делайте мердж-реквесты меньше и понятнее, инициируйте их чаще, пишите качественные тесты, выявляющие потенциальные ошибки или проблемы, активно участвуйте в код-ревью коллег. Проанализируйте весь путь доставки изменений, от коммита до продакшена: сколько времени тратится на каждый этап, где возникают задержки, какие шаги можно автоматизировать. Можно измерить, сколько времени проходит от постановки задачи до прода, и поднять тему ускорения на ретро.</p><h2>Ну, а если это читает тимлид…</h2><p>Создавайте условия для изменений: выделите команде время на улучшение процессов — хотя бы 10% спринта. Поддержите эксперименты с новыми подходами. Измеряйте не только число сторипоинтов, но и скорость доставки фичи в прод. Инвестируйте в автоматизацию тестирования и Quality gates — это основа быстрой и надежной разработки.</p><h2>Простой план для любой команды</h2><h2>5 шагов к более быстрой разработке</h2><ol><li>Измерьте текущее состояние — сколько времени тратится от постановки задачи до прода?</li><li>Найдите самое медленное звено — ревью, тестирование, деплой?</li><li>Начните с одного небольшого улучшения — автоматизируйте самую болезненную операцию.</li><li>Улучшите качество изменений — делайте мердж-реквесты меньше и понятнее.</li><li>Измерьте результат и повторите.</li></ol><h2>Прежде чем начнете действовать</h2><p>Примененные нами подходы — не волшебные решения всех проблем разработки. Это инструменты, которые работают в определенных условиях, и слепо копировать их не стоит. В первую очередь надо оценить готовность команды к изменениям, возможно, вам потребуется дополнительная подготовка «почвы» перед внедрением.</p><p>Реорганизация в фича-команды может оказаться более сложной, если у вас узкоспециализированные инженеры, которые не особенно желают расширять горизонты своей экспертизы или пополнять знания о смежных системах. В каждой фича-команде инженер — это Т-шейп-специалист, который может выполнять смежные функции помимо основной специальности. В этом случае сперва лучше поработать с культурой в организации, попытаться изменить майндсет людей, либо подготовить новую команду, готовую к новым вызовам и использованию новых, более эффективных методов работы.</p><p>Также важно понимать, что в сплоченной команде инженеров обычно не требуется досконально писать документацию, вместо этого мы используем груминги в формате event storming, спецификации API сервисов, BPM-схемы, сиквенс-диаграммы и  комментарии, которые являются частью кода самого сервиса. При такой конфигурации команды писать отдельные статьи для декларации намерений разработать ту или иную логику — только тратить время инженеров. Если документация для вас важнее работающего сервиса, стоит задуматься над автоматизацией генерации такой документации… впрочем, это уже тема отдельной статьи.</p><p>TBD требует от разработчиков высокого уровня осознанности, ведь важно сохранять код в основной ветке целостным. Страховкой тут являются юнит-тесты и автоматизированный контроль качества перед влитием нового кода в транк. Вам нужна уверенность в том, что ветка целостна и готова к установке в прод в любой момент времени, поэтому компонентные тесты играют очень важную роль, т. к. позволяют проверять функциональность сервиса быстро и комплексно. Их необходимо внедрить в состав Quality gates, чтобы получить преимущества ТБД, а не хлопоты от его использования.</p><p>Что касается CD. Это хорошая практика для зрелых команд, позволяющая повысить эффективность работы команды (эффективность измеряем по методике DORA), снизить риски для продуктива при одновременном уменьшении времени доставки кода, а также освободить команду от рутины в пользу более творческих задач. Однако если у вас низкий уровень вовлеченности команды или столь же низкий уровень доверия к инженерам, то, возможно, про этот путь стоит забыть и, опять же, поработать с вовлеченностью инженеров.</p><p>Отталкивайтесь от вашей цели, начните с анализа: тратит ли команда значительное время на ожидания? Если процессы уже работают быстро и предсказуемо — возможно, менять ничего и не нужно. Любые изменения требуют времени на адаптацию, команда должна усвоить принципы работы новых подходов, а также осознать преимущества, которые получат клиенты и сами инженеры от внедрения новой практики. В противном случае самые современные практики превратятся в борьбу с сопротивлением или, того хуже, в дополнительную бюрократию, которая замедлит, а не ускорит разработку.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ-5 инструментов для автоматизации вашей ИТ-инфраструктуры</title>
      <link>https://tproger.ru/articles/top-5-instrumentov-dlya-avtomatizacii-vawej-it-infrastruktury</link>
      <comments>https://tproger.ru/articles/top-5-instrumentov-dlya-avtomatizacii-vawej-it-infrastruktury?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Oksana Karelina]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-5-instrumentov-dlya-avtomatizacii-vawej-it-infrastruktury</guid>
      <description><![CDATA[<p>Рассказываем о лучших инструментах и сервисах для мониторинга, автоматизации и стабильной работы команд в вашей ИТ-инфраструктуре!
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-5-instrumentov-dlya-avtomatizacii-vawej-it-infrastruktury">Топ-5 инструментов для автоматизации вашей ИТ-инфраструктуры</a>»</p>]]></description>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 31 Aug 2025 10:00:05 GMT</pubDate>
      <content:encoded><![CDATA[<p>По прогнозам Gartner, к 2026 году <a href="https://www.gartner.com/en/newsroom/press-releases/2024-09-18-gartner-says-30-percent-of-enterprises-will-automate-more-than-half-of-their-network-activities-by-2026">30%</a> предприятий автоматизируют более половины своих сетевых операций.</p><p>Сегодня, в условиях конкуренции, компании стремятся доставлять продукт до пользователей максимально быстро – и автоматизация ИТ-инфраструктуры может в этом помочь. Она включает автоматическое развертывание, настройку, мониторинг и управление IT-ресурсами и сервисами с помощью специализированных инструментов.</p><p>О некоторых из таких инструментов и пойдет речь в этой статье.</p><p>Мы разберем возможности Ansible, Terraform, Zabbix, Kubernetes и GitHub Actions, расскажем, как они могут помочь автоматизировать вашу инфраструктуру. Наш материал пригодится всем, кто хочет сократить время на рутинные задачи, ускорить развертывание IT-систем и управлять инфраструктурой с минимальными рисками человеческой ошибки.</p><p><b>Ansible</b></p><p>Этот сервис автоматизации с помощью простых YAML-скриптов работает через SSH и позволяет автоматизировать буквально всё – от создания учетных записей пользователей до крупных многоуровневых развертываний приложений.</p><p>С Ansible легко выполнять автоматизацию, даже если у вас нет глубоких знаний в программировании – к примеру, вот код, который установит последнюю версию Nginx на Ubuntu/Debian:</p><p>При этом за счет множества <a href="https://docs.ansible.com/ansible/latest/collections/index_module.html">модулей</a> инструмент подходит для самых разных задач по автоматизации инфраструктуры – например, для создания пользователя на сервере можно использовать такой код:</p><p>С помощью Ansible многие компании решают задачи, связанные с автоматизацией. Например, используя этот инструмент, NASA уменьшило время развертывания <a href="https://srivastavayushmaan1347.medium.com/case-studies-why-companies-are-using-ansible-and-the-benefits-they-are-gaining-936315b1acdc">с нескольких часов до нескольких минут</a>, разработчик ПО ITQ Group <a href="https://habr.com/ru/companies/itq_group/articles/765882/">добился</a> более прозрачной реализации задач, Hootsuite сократил время развертывания новых сред на <a href="https://srivastavayushmaan1347.medium.com/case-studies-why-companies-are-using-ansible-and-the-benefits-they-are-gaining-936315b1acdc">90%</a>, а BMW <a href="https://srivastavayushmaan1347.medium.com/case-studies-why-companies-are-using-ansible-and-the-benefits-they-are-gaining-936315b1acdc">внедрил</a> модель “инфраструктура как код”.</p><p>У себя в Beget тоже используем Ansible: для IaC и разворачивания софта в облаке – весь софт из панели Cloud, кроме образов операционных систем, мы устанавливаем с помощью Ansible.</p><p>Если для ваших задач тоже может быть полезен Ansible и вы хотите автоматизировать процессы сборки, тестирования и развертывания приложений в собственной инфраструктуре, у нас есть готовый кейс по автоматизированному развертыванию Gitea Runner с помощью Ansible – поделились им в отдельной <a href="https://beget.com/ru/news/2025/ustanovka-po-cherez-ansible">статье</a>.</p><p><b>Terraform</b></p><p>Данный инструмент позволяет описать всю ИТ-инфраструктуру в виде кода – по сути, вместо ручной настройки серверов, баз данных и сетей вы просто пишете их рецепт в текстовом файле, а Terraform автоматически создает всё необходимое.</p><p>Основные преимущества Terraform:</p><p>✔ мультиоблачность – инструмент работает с AWS, Google Cloud, Azure и <a href="https://registry.terraform.io/browse/providers">другими провайдерами</a>;</p><p>✔ декларативный подход – вы описываете желаемый результат, а Terraform сам определяет, что нужно создать, изменить или удалить;</p><p>✔ версионирование инфраструктуры – вся инфраструктура хранится в Git, поэтому видна история всех изменений и можно легко откатиться к предыдущей версии;</p><p>✔ предварительный просмотр – команда terraform plan показывает, что именно изменится, так что не будет никаких сюрпризов в продакшене.</p><p>С Terraform можно развертывать среды за 5 минут вместо 2 дней и быстрее выкатывать новые фичи, поэтому он особенно полезен, если у вас несколько сред (dev, test, prod), необходим контроль затрат на инфраструктуру и соответствие стандартам безопасности.</p><p>Terraform оценили по достоинству многие компании – вот лишь несколько примеров:</p><p>• системный IT-интегратор Nixys <a href="https://habr.com/ru/companies/nixys/articles/721404/">использует</a> манифесты Terraform для описания состояния инфраструктуры;</p><p>• компания Uber <a href="https://srivastavayushmaan1347.medium.com/how-companies-are-leveraging-terraform-for-real-world-infrastructure-challenges-a-case-study-22e1717b1980">применяет</a> Terraform для управления сложными мультиоблачными средами и масштабирует инфраструктуру в периоды высокого спроса;</p><p>• онлайн-банк Monzo <a href="https://srivastavayushmaan1347.medium.com/how-companies-are-leveraging-terraform-for-real-world-infrastructure-challenges-a-case-study-22e1717b1980">запускает</a> новые инфраструктурные среды за считанные минуты, а не часы;</p><p>• платформа Shopify успешно <a href="https://srivastavayushmaan1347.medium.com/how-companies-are-leveraging-terraform-for-real-world-infrastructure-challenges-a-case-study-22e1717b1980">справляется</a> с такими событиями с высоким трафиком, как “черная пятница”.</p><p>Примеры управления инфраструктурой Docker с помощью Terraform можно найти в <a href="https://developer.hashicorp.com/terraform/tutorials/docker-get-started">официальной документации</a>.</p><p><b>Zabbix</b></p><p>Даже самые надежные системы порой дают сбой, а в чистый код может закрасться программный баг, поэтому всегда полезно иметь перед глазами полную картину происходящего, чтобы в случае чего узнать обо всём раньше пользователей и оперативно отреагировать. В этом и может помочь система мониторинга Zabbix.</p><p>Она отлично подходит, если вам важна автоматизированная инфраструктура – Zabbix поддерживает множество протоколов и методов мониторинга (SNMP, IPMI, JMX, SSH, Telnet, ICMP, HTTP и т. д.), а также сотни готовых шаблонов для оборудования.</p><p>Примеры параметров, которые можно отслеживать в реальном времени:</p><p>► состояние серверов, сетевого оборудования, баз данных, приложений и других компонентов инфраструктуры;</p><p>► загрузка процессора;</p><p>► использование памяти;</p><p>► сетевой трафик;</p><p>► доступность сервисов;</p><p>► срок действия SSL-сертификата и т. д.</p><p>Наглядные отчеты и диаграммы помогут знать всё о работе и производительности систем, а благодаря поддержке Telegram, Discord и прочих сервисов получать оповещения максимально удобно.</p><p>Пошаговые инструкции по установке и использованию разных версий Zabbix для выполнения задач мониторинга можно найти в <a href="https://www.zabbix.com/ru/manuals">официальной документации</a>.</p><p>Уже сейчас Zabbix используют более <a href="https://theirstack.com/en/technology/zabbix">13 тыс.</a> компаний. Если вы тоже хотите, чтобы ваш системный администратор тревожился чуточку меньше, а мониторинг был как по нотам, то буквально в пару кликов вы можете развернуть для вашей компании собственный виртуальный сервер с Zabbix.</p><p><b>Kubernetes</b></p><p>Kubernetes aka K8s (8 – это количество букв между “k” и “s”) – это система для автоматического управления контейнеризированными приложениями. Своего рода умный дирижер оркестра, который следит, чтобы все части вашего приложения работали слаженно, а еще – автоматически заменяет “заболевших музыкантов” и добавляет новых, когда нужно сыграть иначе.</p><p><b>Среди сильных сторон K8s:</b></p><p>→ автоматическое масштабирование за несколько секунд – увеличение количества копий приложения при росте нагрузки и уменьшение при спаде;</p><p>→ самовосстановление – работа Kubernetes предполагает автоматический перезапуск упавших контейнеров и замену контейнеров при сбое серверов;</p><p>→ простое управление конфигурацией – пароли и настройки хранятся отдельно от кода, а обновление конфигураций происходит без пересборки приложения.</p><p>Словом, Kubernetes берет на себя управление жизненным циклом приложений и если у вас микросервисная архитектура и вам важны высокая доступность и скорость внедрения изменений, то он вам точно пригодится.</p><p>Приведем вариант использования Kubernetes.</p><p>Рассмотрим применение K8s в связке с Helm на примере одной из самых популярных баз данных “ключ-значение” – Redis.</p><p>Итак, предположим, нам нужен отказоустойчивый кластер из трех копий. Убедившись, что у нас установлен Helm и настроен доступ к кластеру, загрузим и распакуем helm chart:</p><p>helm fetch oci://registry-1.docker.io/bitnamicharts/redis</p><p>tar xf redis-21.2.7.tgz</p><p>cd redis</p><p>Затем отредактируем values.yaml, изменив параметры на:</p><p>· replica.replicaCount: количество нужных нам реплик, в данном случае 3</p><p>· sentinel.enabled: true</p><p>· sentinel.quorum: 2</p><p>После этого создадим пространство имен для кластера Redis:</p><p>kubectl create namespace redis</p><p>И установим Helm chart с названием релиза redis-cluster в пространстве имен Redis:</p><p>helm install redis-cluster ./ -n redis</p><p>Вуаля – через некоторое время поды (то есть развертываемые вычислительные единицы) успешно запустятся:</p><p>Как инструмент автоматизации процессов Kubernetes популярен среди множества компаний: Huawei, Nokia, OpenAI, Yahoo, Spotify и т. д. – подробные кейсы есть на <a href="https://kubernetes.io/case-studies/">официальном сайте</a>.</p><p><b>GitHub Actions</b></p><p>Эта встроенная в GitHub платформа позволяет автоматизировать конвейер сборки, тестирования и развертывания. Она будет полезна, если ваш код уже хранится на GitHub, важны автоматизация из коробки, мультиплатформенная разработка, регулярные релизы и обновления.</p><p>Ключевые достоинства GitHub Actions:</p><p>■ автоматическое выполнение тестов, сборка и развертывание приложений;</p><p>■ интеграция с различными сервисами и платформами (AWS, Azure, Docker и др.);</p><p>■ уведомления в Slack и Telegram;</p><p>■ создание кастомных workflows для CI/CD и управление релизами;</p><p>■ гибкая конфигурация через YAML-файлы в репозитории.</p><p>Благодаря возможности автоматизировать рутину (запускать задачи по расписанию, обновлять зависимости, генерировать отчеты и т. д.) GitHub Actions востребован среди более <a href="https://enlyft.com/tech/products/github-actions">15 тыс</a>. компаний.</p><p>Наглядные примеры рабочих процессов и вариантов использования GitHub Actions на русском языке можно найти в <a href="https://docs.github.com/ru/actions/use-cases-and-examples">официальной документации</a>, а в нашем маркетплейсе готовых решений для VPS есть удобный и совместимый с GitHub Actions сервис <a href="https://beget.com/ru/cloud/marketplace/gitea">Gitea</a>, который позволяет в короткие сроки развернуть вашу собственную платформу для разработки.</p><p><b>Чек-лист: что продумать при автоматизации инфраструктуры:</b></p><p>✹ Анализ текущего состояния – до начала работ с системами автоматизации инфраструктуры важно провести инвентаризацию всех сервисов, выявить болевые точки и оценить технический долг.</p><p>✹ Цели и приоритеты – сформулируйте измеримые цели (например, снижение времени деплоя, уменьшение инцидентов), приоритизируйте их и определите критерии успеха.</p><p>✹ Выбор инструментов – в зависимости от поставленных целей, изучите возможности инструментов (например, Terraform и Ansible для IaC, Jenkins и GitHub Actions для CI/CD, Prometheus и Zabbix для мониторинга, Docker и Kubernetes для контейнеризации).</p><p>✹ Безопасность – продумайте управление доступами и ролями, шифрование данных, аудит и логирование всех действий.</p><p>✹ Команда и компетенции – оцените текущие навыки сотрудников, подготовьте план обучения и распределите зоны ответственности.</p><p>✹ Мониторинг и метрики – важно продумать KPI для оценки эффективности, алертинг и оповещения, дашборды для визуализации, SLA и SLO.</p><p>✹ Риски – этот пункт предполагает наличие тестовых сред для экспериментов и плана Б с ручным вмешательством на случай сбоев.</p><p>✹ Бюджет – следует учесть стоимость инструментов и лицензий, затраты на обучение и ROI (то есть возврат инвестиций).</p><p>И главное – автоматизируйте только то, что уже хорошо работает вручную и делается регулярно 🙂</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2025-08-24/d4c25c88-354e-44b9-89d0-8a2fc04a0100.png" alt="" /></figure><p><b>Заключение</b></p><p>Сегодня развертывание ПО больше не напоминает шаманские пляски с бубном, а контролировать серверы можно, сидя дома в уютном кресле или находясь где-то еще – и в этом могут помочь грамотно настроенные автоматизация, диспетчеризация и IT-инфраструктура.</p><p>Неудивительно, что сейчас, когда <a href="https://kissflow.com/workflow/workflow-automation-statistics-trends/">94%</a> компаний выполняют повторяющиеся и отнимающие много времени задачи, российский рынок автоматизированных систем управления технологическими процессами продемонстрировал рост на <a href="https://www.tadviser.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F:%D0%90%D0%A1%D0%A3_%D0%A2%D0%9F_(%D1%80%D1%8B%D0%BD%D0%BE%D0%BA_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8)">50%</a>.</p><p>Ведь автоматизация рабочих процессов позволяет сократить повторяющиеся задачи на <a href="https://www.pointstar-consulting.com/blog/2025-workflow-automation-trends-key-statistics-and-insights-for-success">60–95%</a> и в результате сэкономить до <a href="https://www.pointstar-consulting.com/blog/2025-workflow-automation-trends-key-statistics-and-insights-for-success">77%</a> времени, затрачиваемого на рутинные действия.</p><p>Согласитесь, это именно то, что нужно в современном стремительно развивающемся цифровом мире 🙂</p><p>Надеемся, этот материал был для вас полезен и автоматизация сетевой инфраструктуры принесет успех вашему бизнесу.</p><p>Если у вас остались вопросы, вы хотите обсудить эту статью или облачную IT-инфраструктуру, будем рады видеть вас в нашем уютном <a href="https://t.me/beget_chat">Telegram-чате</a> – с удовольствием на всё ответим и пообщаемся 🙂</p>]]></content:encoded>
    </item>
    <item>
      <title>Где вести базу знаний по проекту: альтернативы Notion для айтишников в 2025</title>
      <link>https://tproger.ru/articles/gde-vesti-bazu-znanij-po-proektu--alternativy-notion-dlya-ajtiwnikov-v-2025</link>
      <comments>https://tproger.ru/articles/gde-vesti-bazu-znanij-po-proektu--alternativy-notion-dlya-ajtiwnikov-v-2025?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/gde-vesti-bazu-znanij-po-proektu--alternativy-notion-dlya-ajtiwnikov-v-2025</guid>
      <description><![CDATA[<p>Обзор лучших альтернатив Notion для ведения базы знаний в IT-проектах в 2025 году. Сравнение функционала, интеграций и удобства для разработчиков и команд.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/gde-vesti-bazu-znanij-po-proektu--alternativy-notion-dlya-ajtiwnikov-v-2025">Где вести базу знаний по проекту: альтернативы Notion для айтишников в 2025</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Slack]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Управление проектами]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[На английском языке]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Визуализация]]></category>
      <category><![CDATA[Техподдержка]]></category>
      <category><![CDATA[5g]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Figma]]></category>
      <category><![CDATA[Markdown]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Notion]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 29 Jul 2025 14:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>С Notion знакомы почти все, но не всем он подходит: кто-то боится блокировок (и не зря), кто-то устал от ограничений веб-интерфейса, а кому-то нужно больше гибкости в настройках и хранении данных. Мы собрали удобные альтернативы, которые помогут айтишникам вести базу знаний, управлять проектной документацией, строить внутренние вики и не бояться за свои данные. В подборке — российские и зарубежные сервисы: от on-prem-развёртывания до p2p-решений без облаков и подписок.</p><h2>1. Yonote</h2><p><a href="https://yonote.ru/">Yonote</a> — российская база знаний и система для работы с проектами. Помогает командам и отдельным пользователям собирать и систематизировать информацию, вести базы знаний, планировать проекты и обмениваться документами. Платформа сочетает гибкий интерфейс, как в Notion, и функциональность KMS-систем: блочный редактор, доски, таблицы и базы данных работают в одном окне. Отличие Yonote — бесконечные доски для визуального планирования, поддержка on-prem-развёртывания и хранение данных в России.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/cb268bc0-5d5c-42e4-add4-a48119f9d813.png" alt="" /></figure><h2>Сценарии использования</h2><p>Yonote подходит для:</p><ul><li>Командной работы: планирование задач, контроль<br />сроков, управление проектами, CRM, сбор и визуализация отчётов, хранение<br />инструкций и регламентов.</li><li>Личных целей: заметки, трекер задач,<br />бюджетирование, планирование поездок, учёба и хранение материалов.</li><li>Создания Wiki: организация базы знаний о<br />продукте с древовидной структурой, вставкой таблиц, диаграмм и медиа, историей<br />изменений и комментариями.</li><li>Ведения<br />документации: базы данных по<br />клиентам, проектам и инвентарю с таблицами, фильтрами, канбан-досками и<br />календарями, прикреплением файлов и ссылок.</li></ul><h2>Формат работы</h2><p>Yonote работает через web-интерфейс с удобным Markdown-редактором, поиском и историей изменений. Можно встраивать код, схемы и embed-ссылки из GitHub, Figma, Miro и других сервисов.<b></b></p><p>Поддерживается полный доступ по API, импорт и экспорт в Markdown и PDF, хранение на своих серверах (on-prem) и в облаке. Yonote предлагает более 30 интеграций, включая GitHub, Jira, Trello, Telegram, Miro и Airtable. Настраиваются уровни доступа: можно создавать гостевые аккаунты, разграничивать права на чтение и редактирование, делиться публичными ссылками.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/15f1bf63-f765-49ce-81c0-bb726d240417.png" alt="" /></figure><p>Yonote заменяет несколько инструментов сразу (Trello, Google Docs, Confluence, личные заметки), легко адаптируется под любые задачи, подходит для госорганизаций, частных компаний и личного использования.</p><h2>Тарифы</h2><ul><li>Базовый — бесплатно, 5 ГБ, до 5 пользователей и 10 гостей.</li><li>Старт — 149 ₽ за пользователя в месяц, 20 ГБ, до 50 гостей.</li><li>Про — 249 ₽ за пользователя в месяц. Доступен безлимит гостей, неограниченное хранилище, SSO.</li><li>Enterprise — тариф для организаций с расширенной поддержкой и контролем.</li></ul><h2>2. Anytype</h2><p><a href="https://anytype.io/">Anytype</a> — «приложение для всего», которое предлагает создать собственную локальную сеть для хранения знаний, заметок, трекеров привычек, рецептов и канбан-досок. По принципу работы похоже на Notion: блоковая структура, гибкие базы данных и визуальные представления информации.</p><p>Главное отличие — Anytype полностью локален и использует P2P-синхронизацию без серверов и посредников, данные остаются только у вас, никто не имеет к ним доступа. Приложение с открытым кодом и доступной архитектурой, работает без интернета и требует установки на устройство.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/cef4a88c-bab4-4604-ac14-954b19a6c4d7.png" alt="" /></figure><h2>Сценарии использования</h2><p><b>Личные цели:</b> создание ежедневников, трекеров привычек, расписаний, конспектов, ведение стратегических заметок в одном месте, даже без подключения к интернету.</p><p><b>Работа в команде:</b> организация командных вики и канбан-досок, совместная работа в группах, ведение календарей.</p><p><b>Сообщество и креатив:</b> управление блогом, создание лент-контента, рекомендаций и курируемых подборок, построение сообщества с объявлениями и вики-страницами.</p><h2>Формат работы</h2><p>Anytype работает офлайн на мобильных и десктопных устройствах (iOS, Android, Windows, macOS, Linux), без веб-версии. Скоростная P2P-синхронизация возможна через локальные сети.</p><p>Интерфейс основан на визуальном код-фри (no-code) редакторе: можно создавать базы данных, таблицы, канбаны, галереи и граф-связи между объектами.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/af471c87-a400-44d6-9306-9ee7905f8941.png" alt="" /></figure><p>Важно: все данные хранятся в локальном зашифрованном «хранилище» пользователя. При создании аккаунта генерируется ключ из 12 слов, который нужно хранить отдельно — без него доступ не восстановить.</p><p>Для разработчиков:</p><ul><li>Поддерживает локальное хранение данных и самостоятельный бэкап в любое место по выбору пользователя.</li><li>Нет API в привычном виде, но возможно расширить функциональность за счёт открытого кода и протоколов.</li><li>Настройки доступа гибко регулируются на уровне устройства, команды и отдельных объектов в приложении.</li></ul><h2>Цена и условия пользования</h2><ul><li>Explorer — бесплатно, подходит для личного использования.</li><li>Builder — $99 в год за пользователя, открывает расширенные функции и поддержку командной работы.</li><li>Co-Creator — $299 в год за пользователя, с расширенными возможностями и дополнительной свободой кастомизации.</li></ul><p><b>Весь интерфейс и работа — на английском языке. </b></p><h2>3. Obsidian</h2><p><a href="https://obsidian.md/">Obsidian</a> — это бесплатное и гибкое приложение для ведения заметок, личных знаний и проектного управления. Поддерживает базы знаний, связи между заметками, визуализацию в графах и публикацию вики. Главная особенность — работа локально на устройстве с хранением заметок в открытых форматах Markdown, без принудительной привязки к облаку. Обеспечивает полную приватность и контроль над данными, даже оффлайн.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/0cb8dbbd-2e8b-4122-a3d1-dc83324e73cf.png" alt="" /></figure><h2>Сценарии использования</h2><p>Есть несколько сценариев:</p><ul><li>Личные заметки и дневники: быстрый доступ к записям на устройстве, структурирование мыслей, создание связей между идеями.</li><li>База знаний и обучение: построение персональных вики с перекрёстными ссылками, графами связей и быстрым поиском.</li><li>Управление проектами и исследованиями: создание канбанов и карт идей в Canvas для планирования и брейншторминга, публикация заметок для команды</li></ul><h2>Формат работы</h2><p>Obsidian — десктопное и мобильное приложение (Windows, macOS, Linux, iOS, Android). Доступны следующие форматы:</p><ol><li>Поддержка открытых форматов файлов (Markdown), которая обеспечивает долгосрочное хранение данных без зависимости от сервиса.</li><li>С помощью Obsidian Publish можно публиковать заметки как публичную вики, документацию с настраиваемым внешним видом и быстрым поиском.</li></ol><p>Плагины позволяют создавать интеграции и автоматизировать процессы в зависимости от потребностей команды.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/6e777ea6-845b-485f-a972-68e67f4a7967.png" alt="" /></figure><p>Есть поддержка истории версий и работы с командой в рамках общих хранилищ, при этом приватность отдельных файлов сохраняется.</p><h2>Цена и условия пользования</h2><ul><li>Бесплатно: использование приложения для личных нужд, хранение данных локально.</li><li>Sync — $4 в месяц за пользователя при оплате за год, синхронизация заметок между устройствами с шифрованием, история версий, совместная работа в общих хранилищах.</li><li>Publish — $8 в месяц за сайт при оплате за год, публикация заметок на сайт без технических знаний, настройка тем и структуры.</li></ul><h2>4. Gramax</h2><p><a href="https://gram.ax/ru">Gramax</a> — платформа для подготовки документации в подходе Docs as Code. Позволяет создавать и редактировать статьи в визуальном редакторе, хранить исходники в Markdown и версионировать их с помощью Git. Подходит для тех, кто хочет управлять документами, знаниями и любым другим контентом в своей инфраструктуре гибко и безопасно.</p><p>Как и в Notion, в Gramax есть совместное использование, комментарии и AI-функции (создание и форматирование текста, перевод, поиск по статьям). Отличие — в Git‑first подходе, открытом коде и возможности использовать платформу бесплатно без ограничений.</p><h2>Сценарии использования</h2><p>Gramax особенно полезен для:</p><ul><li>Документации по продукту: создание портала с инструкциями, оформленного в корпоративном стиле, с быстрым обновлением и AI-поиском.</li><li>Внутренней проектной документации: база знаний с версиями, Merge Request, поддержкой OpenAPI и технических требований.</li><li>Базы знаний для команд: хранение описаний процессов и систем с удобным поиском и доступом через Git.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/df4821a8-42a6-4726-b608-d6c7b5fc01fd.png" alt="" /></figure><h2>Формат работы</h2><p>Gramax делится на:</p><ul><li>Редактор: web и десктоп на Win/Mac/Linux, можно использовать офлайн.</li><li>Git-хранилище: подключается GitLab, GitHub, Bitbucket и другие, команды Git встроены в интерфейс.</li><li>Портал документации: разворачивается как статический сайт или через Docker.</li></ul><p>Для разработчиков есть поддержка диаграмм (Mermaid, Draw.io, PlantUML), подсветка кода (100+ языков), механизм сравнения версий, мультиязычность. Также на портале для чтения можно отображать документацию на разные версии ПО.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/41cc26e8-09bc-4a52-8892-12d624d670e8.png" alt="" /></figure><p>Gramax также поддерживает API для передачи данных в сторонние системы и CLI для интеграции в CI/CD, позволяя автоматически собирать документацию в HTML, PDF и DOCX. Есть импорт из Confluence, Notion и Yandex Wiki, экспорт в DOCX и PDF с фирменным стилем.</p><h2>Цена и условия</h2><ul><li>Open Source — бесплатно, без ограничений. Управление доступом на уровне репозиториев.</li><li>Gramax Enterprise Server — 54 000 ₽ за редактора навсегда, первый год обновления бесплатно, далее 40% от лицензии. Управление доступом — по ролям и группам с SSO и корпоративными политиками.</li></ul><h2>5. KMS Gran</h2><p><a href="https://gran-soft.ru/kms">KMS Gran</a> — база знаний с API и выстроенными бизнес-процессами. Помогает создавать и структурировать проектную документацию, управлять знаниями в команде и автоматизировать рутину. Платформа сочетает возможности вики, систем управления документами, визуальных блок-схем и AI-инструментов для поиска и анализа.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/527d19d3-2727-484a-9f57-d28d8d042093.png" alt="" /></figure><p>Как и в Notion, в KMS Gran есть WYSIWYG-редактор, мобильная версия и AI для работы с текстом. Отличие в том, что на платформе есть модуль «Скриптинг» для построения процессов и гибкая система прав доступа. Подходит командам, которым важно хранить данные локально и быстро строить рабочую рутину.</p><h2>Сценарии использования</h2><ul><li>Вики по продуктам и техдокументация. Доступно создание структурированных статей, глоссариев, руководств и спецификаций. Удобный поиск с морфологией и AI-помощником помогает находить информацию, а кириллица поддерживается корректно.</li><li>Автоматизация бизнес-процессов. С помощью модуля «Скриптинг» можно строить визуальные блок-схемы процессов, задавать условия и добавлять к шагам инструкции и файлы. Подходит для команд поддержки и контакт-центров.</li><li>AI-помощник для пользователей. Индексирует статьи и отвечает на вопросы по проектам с указанием источников. Сохраняет контекст диалогов, позволяет оценивать ответы и формирует отчеты для анализа востребованности контента.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/c841094c-4bf8-436c-b19b-006930b7f518.png" alt="" /></figure><h2>Формат работы</h2><p>KMS Gran работает через web-интерфейс с удобным WYSIWYG-редактором, поддерживающим Markdown, и адаптирован под мобильные устройства. В системе доступен полнотекстовый поиск с морфологией и возможностью получать ответы от AI, а также версионирование с откатом и архивацией статей. Для согласования внутри команды предусмотрена отметка о прочтении. В документы можно вставлять код и схемы через интеграцию с Draw.io, но подключение embed-ссылок из GitHub и Figma не поддерживается.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/3b89b9b3-a569-427b-bc18-f39aba772be6.png" alt="" /></figure><p>Платформа поддерживает работу через API для интеграции с внешними системами, хотя CLI в ней не предусмотрен. Можно настроить подключение к Slack, GitHub, CI/CD и Jira через API. Гибкая система управления доступом позволяет задавать роли как на уровне всей системы, так и в отдельных проектах и разделах, а также управлять доступом к разным документам.</p><h2>Цена и условия</h2><ul><li>SaaS: аренда по подписке, ежемесячная оплата за пользователя. Включены базовый функционал, серверные ресурсы и поддержка 9×5, опционально AI-модуль.</li><li>On-Premise: развёртывание у заказчика, лицензия на длительный срок, поддержка AI-модуля и техподдержка.</li><li>AI-модуль доступен как в SaaS, так и On-Premise.</li></ul><p>Условия зависят от объема лицензий, срока использования и набора функций, обсуждаются индивидуально. Все тарифы включают базовый функционал.</p><h2>Как выбрать платформу для базы знаний</h2><p>Выбор платформы зависит от ваших задач. Для удобства собрали таблицу с особенностями платформ.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-29/44b09d12-0a2c-43df-b80f-5410c0c67351.png" alt="" /></figure><p>Таким образом:</p><p>Если приоритет — работа с документацией как с кодом, версионирование и публикация через Git — ваш выбор<b> Gramax</b>.</p><p>Нужна визуализация, работа с таблицами, досками и интеграции для команды — стоит обратить внимание на <b>Yonote</b>.</p><p>Если вы ищете корпоративное решение с AI, разграничением прав доступа и встроенными процессами — подойдёт <b>KMS Gran</b>.</p><p><b>Anytype</b> или <b>Obsidian</b> подойдут тем, кто ценит контроль над данными и гибкость кастомизации.</p>]]></content:encoded>
    </item>
    <item>
      <title>Выбираем российский хостинг в 2025: подборка на любой запрос</title>
      <link>https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros</link>
      <comments>https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros</guid>
      <description><![CDATA[<p>В этом материале — семь проверенных российских хостингов для разных задач: от стартапа до корпоративного проекта. Каждый прошел тестирование на аптайм (время бесперебойной работы), безопасность и доступность поддержки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros">Выбираем российский хостинг в 2025: подборка на любой запрос</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Windows Server]]></category>
      <category><![CDATA[Техподдержка]]></category>
      <category><![CDATA[Россия]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Jul 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году российский хостинг переживает новый виток развития. После того как законодательство изменилось и добавились новые технологии, локальные провайдеры усилили инфраструктуру.</p><p>Теперь они предлагают решения, которые не хуже, а где-то даже и лучше международных аналогов и по надёжности, и по цене.</p><p>Посмотрим, кто из них есть в этом списке, и определим особенности хостингов для сайта.</p><h2>1. FirstVDS: профессиональные решения для любых проектов</h2><p><a href="https://firstvds.ru/">FirstVDS</a><a href="https://firstvds.ru/" rel="noopener noreferrer nofollow"></a> — хостинг-провайдер с опытом на рынке более 20 лет. Предлагают VPS и VDS с виртуализацией KVM для проектов любого размера. Все серверы работают на современном оборудовании. Трижды победитель в номинации «Хостер года» Национальной премии «ЦОДы.РФ».</p><p>Хостинг подойдет бизнесу любого масштаба: для любых сайтов — от визиток до высоконагруженных интернет-магазинов, для разработки и тестирования, для сервисов и других проектов. Отдельные решения для Битрикс, установка ОС семейства Linux и Windows Server.</p><h3>Особенности хостинга</h3><h4>Надёжность</h4><p>FirstVDS обеспечивает аптайм 99,97–99,99% в 2025 году, подтверждённый замерами (например, отклик из Москвы — 27 мс в апреле 2025). Серверы размещены в трёх дата-центрах уровня Tier III: два в Москве (IXcellerate и Web DC) и один в Амстердаме (euNetworks). Отказоустойчивый кластер Ceph гарантирует работу даже при сбоях точки или канала.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/80547603-f63a-4f2e-9bc1-332c9e061bf9.png" alt="" /></figure><h4>Инфраструктура</h4><p>Серверы работают на процессорах Intel Xeon и AMD EPYC (до 5,7 ГГц в линейке CPU.Турбо), с быстрыми NVMe-дисками объёмом до 8 ТБ и оперативной памятью DDR5 (до 768 ГБ в VDS Атлант). Это обеспечивает высокую производительность для ресурсоёмких задач, таких как Битрикс или высоконагруженные приложения.</p><h4>Гибкость</h4><p>Тарифы масштабируются: от базовых конфигураций (1 CPU, 1 ГБ RAM, 40 ГБ SSD) до мощных серверов (192 ядра, 768 ГБ RAM, 8 ТБ NVMe). Линейки:</p><ul><li>VDS Форсаж: AMD EPYC, до 128 ядер, 512 ГБ RAM, 4 ТБ NVMe, от 749 ₽/мес (Москва/Амстердам).</li><li>CPU.Турбо: AMD Ryzen до 5,7 ГГц, DDR5, от 624 ₽/мес (Москва).</li><li>VDS Атлант: отказоустойчивый, до 192 ядер, 8 ТБ NVMe, от 1619 ₽/мес (Москва).</li><li>VDS Storage: хранилище, от 704 ₽/мес (Москва).Горячее масштабирование (hot-resize) позволяет добавлять CPU, RAM или диск без перезагрузки.</li></ul><h4>Автоматизация</h4><p>Шаблоны для быстрого развёртывания: Django, Redmine, Tomcat, Teamspeak, Nextcloud, LAMP, LEMP, Forgejo Git, GitLab, Битрикс. Поддерживаются ОС Linux (Ubuntu, Alma, Debian, Rocky, CentOS, Oracle), FreeBSD, Windows Server. API и панель ispmanager 6 lite (бесплатно на месяц) упрощают управление.</p><h4>Безопасность</h4><p>Включена защита от DDoS-атак на сетевом уровне, BitNinja для защиты сервера и сайта, SSL-сертификаты GlobalSign. Доступны автобэкапы, снапшоты, Кибер-бэкап и объектное хранилище S3 для больших данных.</p><h4>Поддержка</h4><p>Круглосуточная поддержка 24/7 без чат-ботов, ответ до 15 минут через чат, личный кабинет или телефон. Бесплатно: помощь с активацией и первичной настройкой. Платно: установка ПО, администрирование. Экспертная линия для мониторинга и устранения сбоев.</p><h4>Бонусы</h4><ul><li>Тестовый период 3 дня.</li><li>Бесплатный перенос до 10 сайтов с другого хостера.</li><li>Скидки: 40% на первый месяц при оплате на 1/3/6 месяцев или 3 месяца бесплатно при оплате за год.</li><li>Лояльность: скидка 5–20% для клиентов от 5 лет.</li><li>Реферальная программа: 10% от расходов привлечённых клиентов для партнёра, 25% скидка для нового пользователя на первый месяц.</li><li>Домены: продление по цене регистрации.</li></ul><h3>Тарифы и условия</h3><p>Тестовый период 3 дня, после него подключаете один из основных тарифов:</p><ul><li>Линейка готовых конфигураций от 1 CPU, 1 Гб RAM, 40 Гб SSD-накопителя и от 219 руб/мес. до сервера с 8 CPU, 12 Гб RAM, 150 Гб NVMe-накопителя. Локация в РФ и Нидерландах.</li><li>VDS Форсаж: на AMD Epyc от 749 ₽/мес. Локации: РФ и Нидерланды.</li><li>CPU.Турбо: гибкая конфигурация на базе высокочастотных AMD Ryzen 9 от 624 ₽/мес. При покупке лицензии Битрикс дополнительная скидка 30% на 3 месяца аренды CPU.Турбо. Локация в РФ.</li><li>VDS Атлант: отказоустойчивый с автобэкапами от 1 619 ₽/мес. Локация: РФ.</li><li>VDS Storage: сервис как хранилище с гибкой конфигурацией от 704 ₽/мес. Локация: РФ</li></ul><p>Все тарифы доступны для тестирования по согласованию с отделом продаж. Для точного подбора конфигурации используйте гибкую настройку.</p><h2>2. UltraVDS: для малого бизнеса и стартапов</h2><p>Компания <a href="https://ultravds.com/">UltraVDS</a>, провайдер услуг виртуальных серверов (VPS/VDS), работает на рынке с 2014 года — предлагает решения для разных операционных потребностей. Сервисы UltraVDS можно использовать для развертывания торговых роботов, запуска чат-ботов, хостинга веб-сайтов, а также для создания FTP-хранилищ данных. Есть предложения для фрилансеров, цифровых агентств, корпоративных пользователей и стартапов, которым требуются функциональные инфраструктурные решения.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/edef3abb-6f77-4c69-be56-e22d90f379db.png" alt="" /></figure><h3>Технические особенности</h3><p>Серверы UltraVDS размещены в современном дата-центре, расположенном в Москве. Доступность сервиса (аптайм) составляет 99,98%, что обеспечивает высокую стабильность работы. Сетевая пропускная способность превышает 200 Мбит/с, при этом трафик предоставляется без ограничений.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/56ccb605-b64b-44f3-94b7-10e960541dda.png" alt="" /></figure><p>Система защиты от DDoS-атак способна обрабатывать трафик до 1,5 Тбит/с и поддерживает стабильность работы сервера даже при интенсивном внешнем воздействии. Лицензия на Windows Server входит в стоимость обслуживания в данном предложении. Это упрощает развертывание сервера: вам не нужно отдельно покупать и устанавливать лицензию. Плюс снижает общие операционные расходы для пользователей этой операционной системы.</p><h3>Тарифные планы</h3><p>Для новых пользователей UltraVDS предусмотрена возможность 3-дневного тестового периода, позволяющего оценить функциональность и производительность сервиса.</p><p>После тестового периода стоимость тарифов начинается от 119 рублей в месяц. На сайте доступен онлайн-калькулятор, позволяющий подобрать конфигурацию сервера и рассчитать итоговую стоимость.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/932d0cca-9f20-4723-8ae9-8d9c3218a08a.png" alt="" /></figure><p>Клиентам доступны различные варианты оплаты, включая ежемесячную систему без предоплаты. При авансовой оплате на период от 3 до 12 месяцев предоставляются скидки до 20%, размер которых зависит от выбранного срока. В случае досрочного прекращения использования сервиса, неиспользованный остаток средств возвращается на баланс пользователя.</p><h3>Поддержка и обслуживание</h3><p>Техническая поддержка UltraVDS работает круглосуточно, 7 дней в неделю. Среднее время ответа на запросы составляет до 15 минут. Связь со службой поддержки возможна по электронной почте и телефону, указанным на официальном сайте.</p><h2>3. RUVDS: 10 лет на рынке облачных решений</h2><p><a href="https://ruvds.com/ru-rub">RUVDS</a> — облачный провайдер, имеющий десятилетний опыт работы на рынке услуг виртуальных серверов (VPS/VDS). Является официальным партнером Huawei в России, работает по SLA. Компания предоставляет инфраструктурные решения, которые могут быть применены для широкого спектра задач, включая хостинг высоконагруженных интернет-магазинов, корпоративных порталов, игровых серверов, сложных backend-систем и чат-ботов.</p><p>Платформа RUVDS спроектирована для оптимизации процесса развертывания ресурсов. Одной из ее особенностей является маркетплейс, который позволяет быстро запускать серверы с предустановленным программным обеспечением. Это способствует ускорению старта проектов, снижая потребность в ручной настройке распространенных CMS, игровых серверов и сред разработки.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/aed25b96-b39b-4be9-b875-dc695645ef24.png" alt="" /></figure><h3>Тарифная политика и варианты оплаты</h3><p>RUVDS предлагает различные тарифные планы. Например, стоимость конфигурации Linux-сервера (1 CPU, 512 МБ RAM, 10 ГБ HDD, 1 IPv4) начинается от 139 ₽/месяц. Это может быть рассмотрено как экономичное решение для запуска небольших проектов и проведения тестирования.</p><p>Клиентам доступны разные опции оплаты:</p><ol><li>Ежемесячные платежи или предоплата на срок от 3 до 12 месяцев, при которой предоставляются скидки до 20%, зависящие от продолжительности периода.</li><li>Для проектов с динамической нагрузкой предусмотрена посекундная тарификация, оплата по которой взимается только за фактически использованные ресурсы. Неиспользованный остаток средств в рамках этой модели возвращается на баланс пользователя</li></ol><p>Дополнительно, до конца 2025 года панель управления ISP Manager для сервера и сайта предоставляется без дополнительной платы при создании любого VPS.</p><h3>Глобальная инфраструктура и стабильность</h3><p>Инфраструктура включает 17 дата-центров уровня Tier III, расположенных по всему миру. Это один из самых больших показателей по количеству геолокаций среди российских провайдеров. Для работы используются корпоративное оборудование и накопители (HDD, SSD, NVMe), чтобы обеспечить стабильную работу и производительность размещенных проектов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/3f3c970e-820f-4f0e-9b53-f227950e298b.png" alt="" /></figure><h3>Поддержка клиентов и доступные ресурсы</h3><p>Техническая поддержка RUVDS доступна круглосуточно, 7 дней в неделю. Среднее время ответа на запросы через тикет-систему или онлайн-чат составляет 15 минут. Клиентам предоставляются полные административные права и консультации по вопросам запуска и настройки серверов. Для самостоятельного изучения доступна база знаний, включающая инструкции и руководства.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/c086a963-2d51-4ada-86c8-0c1704cf8230.png" alt="" /></figure><h3>Безопасность и масштабирования</h3><p>В контексте безопасности данных, RUVDS предлагает несколько решений:</p><p>- Встроенная защита от DDoS-атак, способствующая поддержанию бесперебойной работы серверов при внешнем воздействии.</p><p>- Стандартный IPv4-адрес включен в стоимость каждой виртуальной машины, с опцией аренды дополнительных IP-адресов.</p><p>- API, соответствующий OpenAPI 3.0.0, предоставляет возможности для интеграции и автоматического масштабирования серверных ресурсов в зависимости от нагрузки.</p><p>- Компания официально подтверждает соответствие требованиям ФСТЭК и ФЗ-152 по защите персональных данных, что обеспечивает соблюдение соответствующих законодательных норм.</p><h2>4. McHost: решения для бизнеса разного масштаба</h2><p><a href="https://mchost.ru/"> McHost</a> предоставляет комплексные хостинговые решения, включая виртуальный хостинг и VPS/VDS с NVMe-накопителями. Сервис поддерживает популярные CMS (WordPress, Joomla, 1С-Битрикс) с оптимизированными настройками и автоматической установкой через панель управления.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/2ccc459a-8df5-41b6-bbf9-b751bed2e757.png" alt="" /></figure><p>McHost ориентирован на широкий круг клиентов:</p><ul><li>владельцы сайтов-визиток, блогов и лендингов — благодаря низким тарифам и полному набору опций;</li><li>интернет-магазины с небольшой нагрузкой — тарифы с SSD-накопителями и автоматическим резервным копированием обеспечивают стабильную работу;</li><li>разработчики, которым нужны<br />VPS/VDS с root-доступом — работают серверы на KVM-виртуализации с ОС Linux и Windows;</li><li>госучреждения и компании,<br />работающие с персональными данными — соответствие 152-ФЗ и размещение в дата-центрах Tier III в Москве.</li></ul><h3>Особенности сервиса</h3><p>McHost поддерживает стабильную работу с аптаймом 99.9% за счет размещения оборудования в дата-центрах уровня Tier III — в Москве и Нидерландах.</p><p>Сервис предоставляет защиту от DDoS-атак, автоматическое резервное копирование раз в два дня с хранением данных в течение 30 дней для виртуального хостинга и 14 дней для VPS, а также поддержку российских криптографических стандартов. Клиентам доступны различные варианты размещения: от виртуального хостинга с SSD (от 157.5 ₽/мес) до выделенных серверов с NVMe-накопителями.</p><h3>Технические параметры и условия</h3><p>Инфраструктура McHost базируется на серверах Dell с NVMe-накопителями и процессорами Intel Xeon (частота ядер от 2.35 ГГц). Для виртуального хостинга используется CloudLinux с технологией CageFS, обеспечивающей изоляцию аккаунтов. Поддержка российских ОС («Альт») подтверждена для VPS-тарифов.</p><p>В техподдержку можно обратиться по телефону, через тикет или в Telegram-боте. Время ответа — до 10 минут.</p><p>Текущие тарифы:</p><ul><li>Виртуальный хостинг: от 157 ₽/мес<br />(3 ГБ SSD, 1 сайт).</li><li>VPS: от 396 ₽/мес (15 ГБ SSD, 1<br />ядро CPU).</li><li>Выделенные серверы: от 3 000 ₽/мес<br />(32 ГБ RAM, 2×1 ТБ HDD).</li></ul><h2>5. UFO Hosting: VPS/VDS и выделенные серверы с портом до 10 Гбит/с и безлимитным трафиком</h2><p><a href="https://ufo.hosting/">UFO Hosting </a>предлагает VPS/VDS и выделенные серверы на партнёрской инфраструктуре IXcellerate (Tier III). В портфолио — недорогие виртуальные машины и серверы с портом 10 Gbps для проектов, которым нужна стабильность без завышенных цен.</p><p>Сервис подходит для пользователей разных масштабов: от фрилансеров и веб‑студий до средних и крупных компаний. Для DevOps‑специалистов доступны API и инструменты автоматизации.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-19/3cfc6e79-bab0-48ab-862b-f523c0ad24e8.png" alt="" /></figure><h3>Основные сценарии использования</h3><ul><li>корпоративные сайты, CRM‑системы и веб‑приложения;</li><li>аналитические сервисы и SaaS‑продукты;</li><li>инфраструктура для разработки и тестирования;</li><li>задачи фрилансеров, агентств и digital‑команд.</li></ul><h3>Формат работы, особенности и интеграции</h3><p>Серверы установлены в российском дата‑центре Tier III (IXcellerate), что означает резервирование по питанию и каналам связи. Заявленный аптайм — 99,98 %. Поддержка работает круглосуточно в тикетах, чате и по телефону; среднее время ответа 5–10 минут.</p><p>Сервис UFO Hosting делает акцент на безопасности и гибкости. Есть сеть с защитой от DDoS, возможность горячего расширения ресурсов, автоматическое развёртывание из шаблонов и API для интеграции. Поддерживаются популярные фреймворки и CMS, есть интеграции с GitLab, Telegram и DockerHub. Бэкапы, снапшоты и резервирование входят в стандартный набор, так что восстанавливать тестовую среду не придётся вручную.</p><p>В панели управления можно автоматически установить популярные CMS, панели управления, хранилища и DevOps‑инструменты. Это экономит время на настройку и подходит тем, кто не хочет поднимать всё с нуля.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-08-06/e4433ae3-898b-4c14-90c1-2a4bbb8b13a1.png" alt="" /></figure><h3>Условия использования и тарифы</h3><p>Базовые конфигурации начинаются от 577 руб./месяц. Заявленная скорость порта — до 10 Gbps, что подходит для проектов, где много трафика.</p><p>Есть возможность бесплатно попробовать сервис присутствует, но предоставляется по запросу в поддержку, а при оплате на срок от трёх месяцев действуют скидки, а также регулярно проводятся акции: это поможет оптимизировать бюджет.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-08-06/1e2e0191-1194-4a60-a612-fcac5d8cf76d.png" alt="" /></figure><p>В целом, UFO Hosting выглядит как практичное решение для тех, кому нужны производительные VPS/VDS и выделенные серверы в России. При выборе стоит оценить, насколько конфигурации подходят под конкретные нагрузки и есть ли необходимость в интеграциях из коробки.</p><h2>6. Timeweb: хостинг для веб-проектов</h2><p><a href="https://timeweb.com/">Timeweb </a>предоставляет услуги хостинга для различных типов веб-проектов. Сервис поддерживает популярные CMS, включая WordPress, 1C-Битрикс и Joomla, что делает его подходящим как для личных блогов, так и для корпоративных сайтов.</p><p>Платформа использует собственную панель управления с инструментами для работы с сайтами, базами данных и резервными копиями. Ежедневное автоматическое резервное копирование с хранением данных до 30 дней включено во все тарифные планы. Базовая защита от DDoS-атак доступна для всех клиентов без дополнительной платы.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/b443bfef-bccb-4672-bd55-cb67a1146bc3.png" alt="" /></figure><p>Инфраструктура Timeweb размещена в дата-центрах уровня Tier III в России (Санкт-Петербург) и Казахстане (Алматы). Гарантированный показатель uptime составляет 99.98%. Поддерживаются современные технологии: PHP версий от 5.3 до 8.4, MySQL от 5.6 до 8.0, а также Perl, Python, SSH, FTP и Cron.</p><p>Тарифные планы:</p><ul><li>Year+: от 164 ₽/мес (2 сайта, 15<br />ГБ NVMe, 2 БД);</li><li>Optimo+: от 248 ₽/мес (15 сайтов,<br />40 ГБ NVMe, безлимитные БД);</li><li>Century+: от 347 ₽/мес (35 сайтов,<br />50 ГБ NVMe, безлимитные БД);</li><li>Millennium+: от 482 ₽/мес (60<br />сайтов, 60 ГБ NVMe, безлимитные БД).</li></ul><p>Все тарифы включают бесплатный SSL-сертификат, 10 ГБ почтовой квоты с неограниченным количеством ящиков и DNS-хостинг. При оплате годового тарифа предоставляется домен в зонах .RU/.РФ в подарок.</p><p>Техническая поддержка доступна круглосуточно через онлайн-чат, тикет-систему и по телефону. Среднее время ответа не превышает 15 минут. Новые клиенты могут протестировать сервис бесплатно в течение пробного периода.</p><h2>7. Reg.ru: комплексные решения для сайтов и доменов</h2><p><a href="https://www.reg.ru/">Reg.ru </a>сочетает услуги хостинга и регистрации доменов, что упрощает управление веб-проектами. Компания работает с 2005 года, имеет статус аккредитованного регистратора доменных имён в зонах .RU и .РФ.</p><h3>Функциональные возможности</h3><p>Платформа предоставляет доступ к трём панелям управления: ISPmanager, cPanel и Plesk. Это позволяет выбрать наиболее удобный интерфейс для работы с сайтами. Все тарифы включают бесплатный SSL-сертификат от Let’s Encrypt, который автоматически устанавливается при создании сайта.</p><p>Начинающим пользователям доступен конструктор сайтов с готовыми шаблонами. Поддерживаются популярные CMS, включая WordPress, Joomla и 1С-Битрикс. Ежедневное резервное копирование данных с хранением копий в течение 30 дней входит в стандартный набор услуг.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/c1ac0c6a-51ae-4ae5-8875-f18a01ffdc2c.png" alt="" /></figure><h3>Техническая инфраструктура</h3><p>Серверы размещены в дата-центрах уровня Tier III в Москве. Средний показатель uptime составляет 99.9%, что подтверждается ежемесячной статистикой. Подключение к сети осуществляется по выделенным каналам со скоростью до 1 Гбит/с на выделенных серверах.</p><h3>Поддержка и тарифы</h3><p>Техническая поддержка доступна 24/7 через онлайн-чат и тикет-систему. Среднее время ответа составляет 15-20 минут. Для срочных вопросов можно обратиться по телефону.</p><p>Тарифы — от 151 ₽/мес (7 ГБ SSD, 15 сайтов). При регистрации домена в зонах .RU или .РФ предоставляется скидка на другие доменные имена.</p><h2>8. Спринтхост: хостинг с персональным подходом</h2><p><a href="https://sprinthost.ru/">Sprinthost</a> предлагает услуги хостинга с акцентом на индивидуальную поддержку клиентов. Сервис работает с 2011 года и специализируется на VPS-решениях для различных веб-проектов.</p><h2>Особенности сервиса</h2><p>Компания предоставляет персонального менеджера для каждого клиента, который помогает с настройкой сервера и решением технических вопросов. А если вы остались недовольны услугами, то в течение 30 дней сервис вернёт деньги. Sprinthost проводит бесплатные обучающие вебинары по DevOps и администрированию серверов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/7acc90d0-655a-4cda-906f-a7e5ad4f9a8e.png" alt="" /></figure><h3>Технические характеристики и тарифы</h3><p>Инфраструктура размещена в дата-центрах Москвы и Санкт-Петербурга с аптаймом 99.9%. Поддерживаются современные технологии разработки, включая Ruby on Rails, Node.js, Python и Docker. Все серверы используют SSD-накопители с гарантированной скоростью чтения/записи.</p><p>Тарифные планы:</p><ul><li>Start: 290 ₽/мес (1 ядро, 1 ГБ<br />RAM, 15 ГБ SSD);</li><li>Turbo: 1 900 ₽/мес (4 ядра, 8 ГБ<br />RAM, 100 ГБ NVMe).</li></ul><h3>Поддержка</h3><p>Техническая помощь доступна 24/7 через тикет-систему и онлайн-чат. Среднее время ответа составляет 10-15 минут. Для корпоративных клиентов предусмотрена приоритетная поддержка по телефону.</p><h2>Как выбрать хостинг в 2025 году</h2><p>Выбор хостинга зависит от типа проекта и его требований. Для небольших сайтов и блогов подойдет виртуальный хостинг с поддержкой популярных CMS — важно проверить наличие автоматических бэкапов и базовой защиты от DDoS. Если проект связан с обработкой персональных данных, убедитесь, что провайдер соответствует 152-ФЗ и использует сертифицированное оборудование.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/3a0b1d01-c4e0-424d-86b2-8988d43bcdb1.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/b3c26558-3a50-4eb3-a9f3-89c899fd9e59.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/3408c453-b5db-44ce-b6ab-f1b3bcb5abd1.png" alt="" /></figure><p>Для высоконагруженных сервисов и интернет-магазинов лучше рассматривать VPS или выделенные серверы. Обратите внимание на тип накопителей (SSD/NVMe), возможность масштабирования ресурсов и аптайм дата-центров (рекомендуется от 99.9%).</p><p>Перед покупкой протестируйте сервис — большинство провайдеров предлагают пробный период. Проверьте скорость работы панели управления и отзывчивость поддержки. Не забывайте о резервном копировании: даже если хостинг предоставляет эту услугу, дублируйте критически важные данные самостоятельно.</p><p>Главное правило — выбирайте решение, которое покрывает текущие потребности проекта. Важно, чтобы конфигурацию можно было оперативно менять по мере роста запросов и масштабирования бизнеса. Технологии меняются быстро, и гибкость конфигурации часто важнее сиюминутной экономии.</p><h2>FAQ</h2><h3>Что такое виртуальный хостинг и когда его выбирать?</h3><p>Виртуальный хостинг — это экономичное решение, где один физический сервер делит ресурсы между множеством сайтов. Подходит для небольших проектов с низкой нагрузкой: личных блогов, лендингов или стартовых страниц.</p><p>Преимущества: низкая стоимость, простота управления через панели, автоматические обновления и базовая защита. Минусы: ограниченные ресурсы; производительность зависит от соседних сайтов; минимальный контроль над настройками.</p><h3>Что такое VPS/VDS и для каких проектов он подходит?</h3><p>VPS (Virtual Private Server) или VDS — это виртуальный сервер с выделенными ресурсами (процессор, память, диск), предоставляющий доступ для полной настройки. Идеален для проектов среднего масштаба: интернет-магазинов, API, SaaS, чат-ботов, корпоративных порталов или приложений с умеренным трафиком.</p><p>Преимущества: гибкость конфигураций, выбор ОС, изоляция ресурсов. Минусы: требует базовых навыков администрирования, стоимость выше, чем у виртуального хостинга.</p><h3>Что такое выделенный сервер и когда его использовать?</h3><p>Выделенный сервер — это физический сервер, полностью зарезервированный под ваш проект. Подходит для высоконагруженных систем: крупных интернет-магазинов, игровых платформ, корпоративных ERP или аналитических сервисов с большим трафиком.</p><p>Преимущества: максимальная производительность, полный контроль, высокая отказоустойчивость. Минусы: высокая цена, сложность настройки и обслуживания.</p><h3>В чём основные различия между виртуальным хостингом, VPS и выделенным сервером?</h3><p>Виртуальный хостинг — самый дешёвый и простой, но ресурсы делятся между пользователями, что ограничивает производительность (до 1000–2000 посетителей в сутки).</p><p>VPS обеспечивает выделенные ресурсы и гибкость, справляясь с нагрузкой до 5000–10 000 пользователей в сутки.</p><p>Выделенный сервер — максимум мощности для пиков свыше 10 000 пользователей, но требует значительных затрат и технических знаний.</p><p>Выбор зависит от масштаба: виртуальный для старта, VPS для роста, выделенный для enterprise.</p><h3>Нужны ли навыки администрирования для хостинга?</h3><p>Для виртуального хостинга навыки не нужны — управление идёт через интуитивные панели, а провайдеры обеспечивают обновления и базовую поддержку. Для VPS желательны базовые знания (настройка ОС, установка ПО), хотя многие провайдеры предлагают помощь. Для выделенного сервера навыки администрирования необходимы, так как вы полностью отвечаете за сервер, хотя провайдеры могут предлагать платное администрирование.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что по экологии? Сколько углеродного следа оставляет ваш код</title>
      <link>https://tproger.ru/articles/chto-po-ekologii--skolko-uglerodnogo-sleda-ostavlyaet-vaw-kod</link>
      <comments>https://tproger.ru/articles/chto-po-ekologii--skolko-uglerodnogo-sleda-ostavlyaet-vaw-kod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-po-ekologii--skolko-uglerodnogo-sleda-ostavlyaet-vaw-kod</guid>
      <description><![CDATA[<p>Узнайте, сколько CO₂ генерирует ваш код в 2025 году и как снизить углеродный след в IT. Практические советы по оптимизации архитектуры, выбору «зеленых» технологий и реальные кейсы компаний. Экологичное программирование — новый тренд для разработчиков и бизнеса.
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-po-ekologii--skolko-uglerodnogo-sleda-ostavlyaet-vaw-kod">Что по экологии? Сколько углеродного следа оставляет ваш код</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Конференции]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[IBM]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[NVIDIA]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Сбер]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 10 Jul 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году IT-индустрия потребляет больше энергии, чем крупная европейская страна  в 2010. <a href="https://www.iea.org/">По данным IEA</a> (International Energy Agency), дата-центры и телекоммуникационные сети уже отвечают за 3,7% глобальных выбросов CO₂ — это больше, чем производит авиация.</p><p>Казалось бы, код — это просто текст. Но каждый запрос к API, каждая компиляция и даже холостой цикл требуют энергии. Например, обучение GPT-4 в 2023 году «съело» столько же электричества, сколько 120 домохозяйств за год. А теперь представьте, что таких моделей тысячи, а серверов — миллионы.</p><p>Почему это важно? Во-первых, <a href="https://digital-strategy.ec.europa.eu/">регуляторы ужесточают требования</a>: в ЕС с 2025 года IT-компании обязаны раскрывать углеродный след своих продуктов. Во-вторых, инвесторы все чаще смотрят на ESG-рейтинги — показатели экологического и ответственного производства. В-третьих, оптимизация кода снижает затраты на инфраструктуру.</p><p>Эта статья — не манифест экоактивистов, а руководство для разработчиков, архитекторов и технических директоров компаний (СТО), которые стремятся более эффективные и экологичные проекты.</p><h2>Углеродный след кода: что скрывается за строчками</h2><p>Программное обеспечение — не виртуальный конструктор. Каждая операция требует электричества, а серверы, на которых работает код, часто питаются от невозобновимых источников энергии — например, угля и газа.</p><h3>Откуда берутся выбросы</h3><p>Когда мы говорим об углеродном следе ПО, важно понимать: код не существует в вакууме. Каждая строка, каждый запрос и каждая операция требуют физических ресурсов — электричества, серверного оборудования, систем охлаждения. В 2025 году эта цепочка стала еще сложнее из-за взрывного роста облачных вычислений и ИИ.</p><p>Прямые выбросы — это энергия, которую потребляют серверы при выполнении вашего кода. Например, один средний веб-сервер на AWS EC2 (тип t3.large) в год вырабатывает около 400 кг CO₂ — как небольшой автомобиль, проехавший 2000 км. При этом нагрузка на серверы постоянно растет: с 2020 по 2025 год энергопотребление дата-центров увеличилось на 35%.</p><p>Косвенные выбросы часто упускают из виду. Производство серверного оборудования — процесс крайне энергоемкий. Для создания одной только микросхемы памяти DDR5 требуется около 200 кВт⋅ч энергии — столько же, сколько средний холодильник потребляет за год. А после выхода оборудования из строя лишь 20% компонентов перерабатывается должным образом (<a href="https://globalewaste.org/">Global E-Waste Monitor 2024</a>).</p><p>Системы охлаждения — еще один скрытый источник выбросов. Современные дата-центры работают 24/7, и даже с использованием жидкостного охлаждения на поддержание температуры уходит до 40% всей потребляемой энергии. В жарких странах, ОАЭ или Сингапуре, этот показатель может достигать 50%.</p><p>Яркий пример — крупные языковые модели. Если в 2023 году обучение GPT-4 потребовало ~10 ГВт⋅ч (эквивалент годового потребления 120 домохозяйств), то к 2025 году из-за увеличения размеров моделей этот показатель вырос в 1,5 раза. Один запрос к такому ИИ теперь генерирует около 2 г CO₂ — как если бы вы проехали 10 метров на бензиновом автомобиле.</p><p>Но проблема не только в ИИ. Обычное веб-приложение с посещаемостью 100 000 пользователей в месяц может производить до 1 тонны CO₂ в год — и это без учета мобильных клиентов и API. При этом <a href="https://www.webpagetest.org/eco/">30% этой нагрузки приходится на неоптимизированный фронтенд</a>: тяжелые изображения, избыточные JavaScript-библиотеки и частые запросы к серверу.</p><p>Ситуацию усугубляет географический фактор. Дата-центр в Норвегии, где 98% энергии поступает от ГЭС, будет «чище», чем такой же центр в Польше, где угольные электростанции дают 70% энергии. <a href="https://app.electricitymaps.com/">Разница</a> в углеродном следе может быть 20-кратной для идентичных операций.</p><p>При этом стандарты измерения все еще остаются разрозненными. PUE (Power Usage Effectiveness), который используют Google и Microsoft, учитывает только эффективность инфраструктуры, но не источник энергии. Новый стандарт CUE (Carbon Usage Effectiveness), разработанный в 2024 году, уже включает эти данные, но его поддерживают менее 30% провайдеров.</p><h2>Где код тратит энергию впустую</h2><p>Некоторые части систем особенно вредны для экологии. Главные «пожиратели» ресурсов:</p><ul><li>Неоптимизированные алгоритмы. Сортировка пузырьком (O(n²)) на большом массиве данных может потреблять в 100 раз больше энергии, чем быстрая сортировка (O(n log n)).</li><li>Микросервисный хаос. Архитектура из сотен микросервисов увеличивает нагрузку на сеть. Каждый вызов API между сервисами — это дополнительные 0,5–1 Вт⋅ч.</li><li>Облачные провайдеры. Не все одинаково зеленые. AWS и Google используют 60–70% ВИЭ (возобновляемых источников энергии), но в Азии и Африке их дата-центры часто работают на угле.</li></ul><h3>Как измерить углеродный след</h3><p>В 2025 году появились инструменты, которые помогают оценить влияние кода:</p><ul><li>Cloud Carbon Footprint — анализирует выбросы AWS, GCP и Azure.</li><li>Scaphandre — мониторит энергопотребление серверов в реальном времени.</li><li>Greenframe.io — симулирует нагрузку на веб-приложение и считает CO₂.</li></ul><p>Климатические инициативы в IT больше не просто красивые слова в корпоративных отчетах. В 2025 году за неэффективный код можно получить не только порицание сообщества, но и вполне реальный штраф.</p><p>Европейский союз уже ввел санкции против пяти крупных SaaS-компаний за превышение углеродных квот, а Amazon Web Services выплатила 2,7 млн евро штрафа за неоптимизированные алгоритмы в своих сервисах.</p><h2>Как изменились подходы к разработке</h2><p>Эти тренды нацелены на долгосрочное действие и в перспективе должны полностью изменить текущую концепцию в разработке.</p><h3>Экологичный DevOps — новая реальность</h3><p>Современные системы автоматического масштабирования стали умнее. Kubernetes Horizontal Pod Autoscaler теперь учитывает не только нагрузку на CPU, но и текущий углеродный след дата-центра. Если в регионе пиковое потребление энергии и работают угольные электростанции, система сознательно ограничивает масштабирование.</p><p><a href="https://cloud.google.com/blog">Технология, разработанная Google</a> в партнерстве с WattTime, уже снижает выбросы CO₂ на 27-33% по сравнению с традиционным подходом.</p><p>CI/CD-цепочки тоже стали «зеленее». Вместо запуска полного набора тестов при каждом коммите, современные системы определяют, какие именно модули затронуты изменениями.</p><p><a href="https://carbonrunner.io/features/github-action-runners">GitHub Actions представил Carbon-Aware Runner</a>, который планирует выполнение задач на время максимальной доступности возобновляемой энергии в регионе. По данным Microsoft, это сокращает углеродный след тестирования на 40%.</p><h3>Языки программирования: война за эффективность</h3><p>Rust продолжает набирать популярность не только из-за безопасности, но и благодаря энергоэффективности. Тесты Benchmarks Game показывают, что один и тот же алгоритм обработки данных на Rust потребляет на 38-42% меньше энергии, чем на Python. В 2025 году Rust вошел в топ-5 языков для enterprise-решений, вытеснив Java в 17% крупных проектов.</p><p>Но настоящим открытием стал <a href="https://ziglang.org/documentation/master/">Zig </a>— язык, который сочетает производительность C с простотой синтаксиса. Его компилятор потребляет в 3 раза меньше ресурсов, чем LLVM-бэкенд Rust, что делает его идеальным выбором для встраиваемых систем.</p><h3>ИИ на грани: когда меньше значит лучше</h3><p>TinyML-революция набирает обороты. Современные нейросети для микроконтроллеров занимают менее 256 КБ памяти, но справляются с задачами, которые раньше требовали облачных вычислений.</p><p>Например, новые датчики Nest анализируют звук прямо на устройстве, определяя не только дым, но и тип возгорания. Это экономит до 150 МБ трафика в месяц на одно устройство.</p><p>На фронте больших языковых моделей тоже произошли изменения. Meta* выпустила LLaMA-3 Nano — модель с 500 млн параметров, которая работает на смартфоне и по качеству ответов не уступает GPT-3.5. Ее углеродный след при обучении в 1200 раз меньше, чем у GPT-4.</p><p><i>(*Компания запрещена в РФ)</i></p><h3>Новые правила игры: регуляторы и бизнес</h3><p>С января 2025 года в Евросоюзе действует Углеродный налог на цифровые продукты (Digital Carbon Border Tax). Теперь любое ПО, продающееся в ЕС, должно иметь сертификат углеродной эффективности.</p><p>Для крупных enterprise-решений максимально допустимый углеродный след составляет 500 г CO₂ на 1000 пользователей в месяц. Нарушители платят 7% от оборота продукта в регионе.</p><p>Венчурные фонды радикально изменили подход к инвестициям. <a href="https://www.pwc.com/gx/en/services/sustainability/publications.html">Согласно отчету PwC</a>, 43% фондов требуют ESG-отчетность перед заключением сделки, а 28% вообще не рассматривают стартапы без «зеленой» стратегии. В Кремниевой долине появился первый акселератор Carbon Neutral Startups, который дает бонусы в $50 000 проектам с нулевым углеродным следом.</p><p>Корпорации тоже не остались в стороне. <a href="https://www.microsoft.com/sustainability">Microsoft ввела внутренний углеродный налог</a> — теперь каждое подразделение платит $100 за каждую тонну CO₂, связанную с его продуктами. Эти деньги идут на развитие возобновляемой энергетики.</p><p>Но самое интересное происходит на рынке труда. Разработчики с навыками «зеленого» программирования получают на 15-20% больше предложений. Появилась появилась новая категория навыков — «Устойчивая разработка ПО», а спрос на таких специалистов вырос на 300% за последний год.</p><h2>Как писать «зеленый» код</h2><p>Каждая лишняя операция в коде — это не только миллисекунды процессорного времени, но и реальные граммы CO₂. В 2025 году энергоэффективность кода перестала быть теоретической концепцией и превратилась в конкретный навык, который влияет на карьеру разработчика. Рассмотрим три ключевых направления оптимизации.</p><h3>Оптимизация запросов к базе данных</h3><p>Типичный пример — использование SELECT * вместо явного перечисления полей. Когда приложение запрашивает все поля таблицы users (включая редко используемые avatar_blob или metadata_json), сервер БД тратит дополнительные ресурсы на чтение и передачу этих данных. В крупных системах с миллионами запросов в день это приводит к значительному перерасходу вычислительных ресурсов.</p><p>Современные ORM типа Prisma и Drizzle добавили автоматическую оптимизацию запросов. Теперь при использовании select() они анализируют, какие поля действительно нужны на клиенте, и генерируют оптимальный SQL. В тестах это снижает нагрузку на БД на 12-18%.</p><h3>Работа с циклами и алгоритмами</h3><p>Классическая ошибка — продолжать перебор массива после нахождения нужного элемента. В 2025 году статический анализатор кода в WebStorm и VS Code автоматически предупреждает о таких ситуациях. Особенно критично это для мобильных приложений: лишние итерации цикла на слабых устройствах увеличивают энергопотребление на 5-7%.</p><p>Новые версии JavaScript и TypeScript ввели оптимизированные методы для массивов. Например, array.findLast() работает в 1,5 раза эффективнее ручной реализации с циклом. Для сложных алгоритмов появились «зеленые» библиотеки вроде EcoCollections для Java, которые минимизируют энергопотребление при работе с структурами данных.</p><h3>Сжатие и передача данных</h3><p>Формат Brotli стал новым стандартом для API: он обеспечивает лучшее сжатие, чем gzip, особенно для JSON-ответов. Компания Cloudflare провела эксперимент: после перехода на новую версию Brotli нагрузка на их серверы снизилась на 18%, что эквивалентно годовому потреблению энергии 2000 домохозяйств.</p><p>Но сжатие — не панацея. Грамотное проектирование API может дать больший эффект. GraphQL-подход, где клиент запрашивает только нужные данные, в среднем почти вдвое уменьшает объем передаваемой информации по сравнению с REST. А технология Server-Sent Events (SSE) для реального времени потребляет в 3 раза меньше ресурсов, чем WebSockets, когда не нужна двусторонняя связь.</p><p>Современные фреймворки начали учитывать энергоэффективность. Next.js 15 <a href="https://nextjs.org/blog">представил «зеленый» режим компиляции</a>, который оптимизирует сборку под минимальное энергопотребление. В тестах это дало 8% экономии на процессоре при работе приложения. А Deno 2.0 автоматически кэширует зависимости на уровне ОС, сокращая число повторных загрузок.</p><p>Эти изменения кажутся мелкими, но в масштабах индустрии они имеют огромное значение. Если бы все репозитории на платформе применили базовые оптимизации, глобальное энергопотребление дата-центров сократилось бы на несколько процентов. Для отрасли, которая потребляет 700 ТВт⋅ч в год, это десятки миллионов долларов и тысячи тонн CO₂.</p><h2>Выбор технологий</h2><p>В 2025 году выбор стека технологий влияет не только на производительность, но и на экологичность проекта. Разберем ключевые аспекты, которые помогут снизить углеродный след вашего приложения.</p><h3>Языки программирования: баланс между скоростью и эффективностью</h3><p>Rust и Go продолжают доминировать в высоконагруженных системах. Тесты показывают, что веб-сервер на Rust потребляет на 35-40% меньше энергии при одинаковой нагрузке по сравнению с Node.js. Особенно заметна разница в облачных средах, где каждый ватт на счету.</p><p>C++ остается выбором для задач, где важна предсказуемая производительность. Новый стандарт C++26 добавил энергоэффективные режимы работы алгоритмов STL, что особенно важно для встраиваемых систем.</p><p>Python по-прежнему хорош для прототипирования, но в продакшене его лучше заменять на компилируемые языки. PyPy 8.0 сократил энергопотребление интерпретатора на 25%, но даже с этими улучшениями Python проигрывает Rust в 3-4 раза по эффективности.</p><h3>Базы данных: от малого к большему</h3><p>SQLite — идеальный выбор для небольших проектов и edge-устройств. Его новая версия 3.45 добавила режим «энергосбережения», который снижает потребление на 15% при фоновых операциях.</p><p><a href="https://www.postgresql.org/docs/17/release-17.html">PostgreSQL 17</a> сделал большой шаг в энергоэффективности. Функция автоматического партиционирования теперь учитывает не только производительность, но и энергопотребление. В тестах это дало 20% экономии на крупных аналитических запросах.</p><p>Для высоконагруженных систем появилась альтернатива — ScyllaDB 5.0. Эта Cassandra-совместимая СУБД потребляет втрое раза меньше энергии при аналогичной нагрузке, благодаря полному переписыванию на Rust.</p><h2>Кейсы: что работает, а что нет</h2><p>Российские компании тоже внедряют экологичные IT-решения. МТС разработала мобильное приложение, где пользователи получают бонусы за раздельный сбор мусора — их можно обменять на подписки или скидки. За первый год проект привлек 500 тысяч участников и сократил количество непереработанных отходов в регионах присутствия.</p><p>НИУ ВШЭ, совместно с Росприроднадзором, автоматизировал сбор экологической отчетности с помощью ИИ. Нейросеть анализирует данные с датчиков и заполняет формы вместо специалистов. Это сократило время обработки с 100 до 10 часов в месяц и уменьшило количество ошибок.</p><p>Некоторые архитектурные решения приносят больше вреда, чем пользы. Один московский стартап без необходимости разбил монолитную систему на 50 микросервисов — в результате затраты на инфраструктуру выросли в 3 раза, а углеродный след увеличился на 180%.</p><p>Проблемы возникают и на уровне зависимостей. История с left-pad повторилась в 2024 году, когда один npm-пакет потянул за собой 80 МБ ненужных библиотек. Теперь крупные компании проверяют каждую зависимость через Bundlephobia и устанавливают лимит на размер node_modules.</p><h2>Что нас ждет</h2><p>В 2025 году отрасль стоит на пороге радикальных изменений, которые перевернут наши представления о «зеленом» программировании.</p><p>Супероблака — следующий этап эволюции распределенных вычислений. В отличие от традиционных облачных провайдеров, эти системы автоматически переносят нагрузку между дата-центрами в зависимости от доступности возобновляемой энергии.</p><p><a href="https://cloud.google.com/sustainability">Google уже тестирует эту технологию</a> в Северной Европе: когда в Норвегии дует сильный ветер и ветряные электростанции работают на пике, система переносит вычисления именно туда. По предварительным оценкам, это снижает углеродный след на 18-22% по сравнению со статичным распределением.</p><p>Но настоящий прорыв ожидается в сегменте квантовых вычислений. Хотя современные квантовые компьютеры потребляют колоссальное количество энергии (система IBM Quantum System One требует около 25 кВт⋅ч для работы одного кубита), их потенциал для оптимизации классических алгоритмов огромен.</p><p>В 2024 году исследователи из ЦЕРНа <a href="https://www.nature.com/articles/s41534-024-00859-0">предложили квантовый алгоритм</a>, который сокращает время сложных расчетов в 1000 раз при той же точности. Когда такие решения станут массовыми (прогноз — 2028-2030 годы), энергопотребление дата-центров может сократиться на 30-40%.</p><p>Государственное регулирование становится строже. В 2025 году в силу вступает EU Digital Product Passport — требование указывать углеродный след для всего ПО, продающегося в Европе.</p><p>Компании, которые не смогут предоставить эти данные, столкнутся с дополнительными налогами до 7% от оборота. В ответ на это крупнейшие IT-корпорации создали Carbon Neutral Software Alliance — консорциум по разработке единых стандартов измерения.</p><p>Не отстает и аппаратная часть. Производители чипов переходят на новые техпроцессы: TSMC анонсировала 2-нм процесс, который на 30% энергоэффективнее предыдущего поколения. А стартапы вроде британской ZeroPoint Technologies разрабатывают память с нулевым энергопотреблением в режиме ожидания — технология может сократить энергопотребление серверов на 15%.</p><p><b>Но главный тренд </b>— децентрализация вычислений. Edge-устройства (от смартфонов до промышленных датчиков) становятся мощнее и берут на себя часть нагрузки. Например, новый алгоритм Apple для обработки фото на iPhone 16 выполняет 90% операций локально, а не в облаке. По оценкам компании, это экономит сотни тысяч тонн CO₂ в год только для пользователей в США.</p><p>Однако остаются и <b>проблемы</b>. Бум генеративного ИИ привел к взрывному росту энергопотребления: одна тренировка модели Gemini Ultra потребляет столько же энергии, сколько небольшой город за месяц. OpenAI и Anthropic уже работают над более эффективными архитектурами, но прорыва пока не случилось.</p><p>В ближайшие 3-5 лет нас ждет:</p><ul><li>массовый переход на углеродно-нейтральные дата-центры — к 2027 году их доля превысит 60%;</li><li>внедрение AI-оптимизаторов кода, которые автоматически сокращают энергопотребление;</li><li>появление «зеленых» рейтингов для приложений — аналог энергоэффективности для бытовой техники.</li></ul><p>Компании, внедрившие принципы устойчивого развития в IT, уже в 2025 году получают на больше инвестиций и быстрее проходят аудит регуляторов. Экологичность перестала быть затратой — теперь это конкурентное преимущество.</p><p>Технологии будущего уже здесь. Вопрос в том, насколько быстро мы сможем их адаптировать. Как сказал Дженсен Хуанг из NVIDIA на последней конференции GTC:</p><blockquote>«Следующее десятилетие определит, станет ли IT частью климатического решения или останется проблемой. Выбор за нами».</blockquote><h2>Итоги</h2><p>Экологичность в IT — не благотворительность и не актуальная повестка, а реальная экономия. Плюс работа на перспективу. Оптимизация кода снижает счета за облака и повышает производительность.</p><p>С чего начать? Начните с малого:</p><ol><li>Запустите аудит через Cloud Carbon Footprint.</li><li>Уберите «мусор» из зависимостей.</li><li>Выберите хостинг с ВИЭ.</li></ol><p>Как говорил Дональд Кнут, автор книги «Искусство программирования»:</p><blockquote>«Преждевременная оптимизация — корень всех зол. Но и запоздалая — тоже».</blockquote><p>В 2025 году это актуально как никогда.</p>]]></content:encoded>
    </item>
    <item>
      <title>werf как альтернатива Kaniko для сборки образов в Kubernetes в вашей системе CI</title>
      <link>https://tproger.ru/articles/werf-kak-alternativa-kaniko-dlya-sborki-obrazov-v-kubernetes-v-vawej-sisteme-ci</link>
      <comments>https://tproger.ru/articles/werf-kak-alternativa-kaniko-dlya-sborki-obrazov-v-kubernetes-v-vawej-sisteme-ci?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Лесных Анна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/werf-kak-alternativa-kaniko-dlya-sborki-obrazov-v-kubernetes-v-vawej-sisteme-ci</guid>
      <description><![CDATA[<p>Публичный репозиторий Kaniko перевели в архив — теперь он доступен только для чтения. Изучили подобные инструменты и выбрали больше, чем просто альтернативу. Рассказываем, чем уникальна утилита werf и почему её стоит попробовать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/werf-kak-alternativa-kaniko-dlya-sborki-obrazov-v-kubernetes-v-vawej-sisteme-ci">werf как альтернатива Kaniko для сборки образов в Kubernetes в вашей системе CI</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 07 Jul 2025 12:30:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Kaniko больше не поддерживается, поэтому мы предлагаем обратить внимание на werf как современную альтернативу. Разбираем, чем werf отличается от других инструментов, почему он может быть удобнее для CI/CD в Kubernetes и как быстро начать его использовать в своих пайплайнах. Также рассмотрим примеры интеграции werf с популярными CI-системами.</p><h2>Что такое Kaniko и зачем он был нужен</h2><p><a href="https://github.com/GoogleContainerTools/kaniko">Kaniko</a> — это инструмент от Google для сборки <a href="https://opencontainers.org/">OCI-совместимых образов контейнеров</a> внутри контейнеров без необходимости root-доступа и запуска Docker-демона. Он получил широкое распространение как решение для CI-сборок в Kubernetes, особенно в таких платформах, как GitHub Actions и GitLab CI.</p><h2>Преимущества Kaniko</h2><p><b>Безопасность: не требует привилегий (rootless).</b> Kaniko может запускаться в обычном (непривилегированном) контейнере, без необходимости доступа к root. Это значительно повышает безопасность, так как сборка образа происходит изолированно и не требует доступа к системным ресурсам.</p><p>Например, в Kubernetes можно создать под с Kaniko, где контейнер работает с обычным пользователем без securityContext.runAsRoot: true. Это значит, что злоумышленник не сможет получить root-доступ через этот контейнер.</p><p><b>Простота: легко запускать как задачу (Job) или контейнер в Kubernetes.</b> Kaniko легко интегрируется в Kubernetes — он просто запускается как обычный контейнер, который выполняет сборку образа и загружает его в реестр. Не нужно устанавливать и настраивать Docker-демон.</p><p>Так выглядит запуск сборки в GitLab CI/CD с использованием Kaniko:</p><p><b>Совместимость: поддержка стандартных Dockerfile.</b> Kaniko понимает обычные Dockerfile и может собрать образ из них, не требуя переписывать или адаптировать существующие инструкции.</p><p>Например, если есть обычный Dockerfile…</p><p>… то можно просто указать Kaniko использовать этот Dockerfile, и он построит такой же образ.</p><h2>Конец поддержки Kaniko и альтернативы</h2><p>В июне 2025 года публичный репозиторий Kaniko перевели в архив — теперь он доступен только для чтения, что фактически означает прекращение его активной поддержки и развития со стороны разработчиков.</p><p>Несмотря на то, что вскоре начали появляться форки (самый заметный — это <a href="https://github.com/chainguard-dev/kaniko">chainguard-dev/kaniko</a>), они ориентированы на режим поддержки (фикс багов и безопасность), а не на дальнейшее развитие инструмента. Поэтому многие пользователи ищут замену Kaniko — если и не сегодня, то в обозримом будущем.</p><p>Наиболее популярные в сообществе альтернативы:</p><ul><li><a href="https://github.com/moby/buildkit">BuildKit</a> от Docker/Moby (особенно в связке с docker buildx);</li><li><a href="https://github.com/containers/buildah">Buildah</a> от Red Hat из экосистемы Podman. Стал Sandbox-проектом CNCF в январе 2025 года.</li></ul><h2>Почему стоит рассмотреть werf и как начать</h2><p>Помимо низкоуровневых инструментов, таких как Kaniko, BuildKit и Buildah, существует также высокоуровневое решение — <a href="https://ru.werf.io/?utm_source=web&amp;utm_medium=tproger&amp;utm_campaign=kaniko">werf</a>. Это production-ready-инструмент, предназначенный не только для сборки, но и для доставки контейнеров в Kubernetes. Утилита позволяет использовать любую предпочтительную CI-систему. Является <a href="https://www.cncf.io/projects/werf/">Sandbox-проектом в CNCF</a>.</p><p>Что предлагает werf:</p><ul><li>Native Kubernetes-ориентированная архитектура, то есть можно легко интегрировать сборку, деплой и управление приложениями прямо в Kubernetes-кластере.</li><li>Поддержка Buildah или BuildKit в качестве backend для сборки, причём Buildah полностью интегрирован в werf и может работать в rootless-режиме. Это позволяет собирать образы без необходимости запуска процессов с правами root.</li><li>Удобная интеграция с другими инструментами доставки софта в Kubernetes (включая GitLab, GitHub Actions и Argo CD). Например, связка из werf и Argo CD позволяет полностью интегрировать между собой любую CI/CD-систему и Argo CD. При этом от каждого из инструментов берутся свои возможности и особенности.</li></ul><ul><li>Автоматическое кэширование сборки и тегирование на основе содержимого, как результат — инкрементальные сборки и оптимальное использование container registry.</li><li>Надёжное развёртывание и управление релизами в Kubernetes. werf расширяет возможности Helm, используя встроенный инструмент Nelm, который обеспечивает точное отслеживание состояния ресурсов, умное ожидание их готовности, мгновенное завершение проблемных релизов и применяет более надёжный метод обновления ресурсов — Server-Side Apply. При этом сохраняется полная совместимость с Helm-чартами и релизами.</li><li>Дистрибуция релизных артефактов. Утилита упаковывает Helm-чарт и связанные с ним образы контейнеров в единый бандл, который затем можно опубликовать в OCI-совместимый реестр. Кроме того, бандлы можно копировать между реестрами, выгружать на USB-флеш-накопитель и развёртывать в Kubernetes с помощью werf или других решений, которые поддерживают работу с OCI-чартами (Helm, Flux, ArgoCD).</li><li>Умная очистка container registry, которая автоматически удаляет неактуальные теги образов с учётом их использования в Kubernetes и истории Git, что позволяет безопасно освобождать место и контролировать рост хранилища без риска удаления нужных образов.</li></ul><h2>Примеры использования werf</h2><p>Как будет выглядеть werf в CI/CD-системах? В общем случае достаточно добавить в свой пайплайн CLI-команду werf converge, которая собирает образ, пушит его в registry и выкатывает в Kubernetes.</p><p>Листинг с конфигурацией .github/workflows/converge.yml для использования werf в GitHub Actions может выглядеть так:</p><p>А использовать werf в GitLab CI/CD можно так:</p><p>Более подробные инструкции для доставки приложений в Kubernetes с werf можно найти <a href="https://ru.werf.io/getting_started/?utm_source=web&amp;utm_medium=tproger&amp;utm_campaign=kaniko">в официальном руководстве по началу работы проекта</a>.</p><p>В документации можно найти интерактивные сценарии, пояснения терминов, готовые CI-конфигурации и Helm-интеграцию. Всё это будет полезно и новичкам, и опытным DevOps-инженерам.</p><h2>Вместо заключения</h2><p>Поскольку Kaniko больше не развивается, многие могут задуматься о миграции на другой инструмент. Помимо очевидных вариантов вроде BuildKit и Buildah, рекомендуем попробовать werf. Он подойдет, если вам нужен CI-first-подход с нативной Kubernetes-интеграцией и интересны дополнительные фичи «из коробки» для CI/CD, например дистрибуция релизных артефактов и умная очистка container registry.</p><p>Чтобы попробовать werf, переходите <a href="https://ru.werf.io/getting_started/?utm_source=web&amp;utm_medium=tproger&amp;utm_campaign=kaniko">на официальный сайт утилиты</a> и изучайте подробную документацию с пошаговыми руководствами и примерами.</p><p><i>Реклама. Рекламодатель: АО «Флант». ИНН 772366143. erid: 2W5zFGNuWcp.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>В Сети нашли каталог из 3200+ готовых ИИ-агентов под любые задачи. Можно запускать в один клик без кода</title>
      <link>https://tproger.ru/news/v-seti-nawli-katalog-iz-3200--gotovyh-ii-agentov-pod-lyubye-zadachi--mozhno-zapuskat-v-odin-klik-bez-koda</link>
      <comments>https://tproger.ru/news/v-seti-nawli-katalog-iz-3200--gotovyh-ii-agentov-pod-lyubye-zadachi--mozhno-zapuskat-v-odin-klik-bez-koda?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/v-seti-nawli-katalog-iz-3200--gotovyh-ii-agentov-pod-lyubye-zadachi--mozhno-zapuskat-v-odin-klik-bez-koda</guid>
      <description><![CDATA[<p>Каталог из 3200+ ИИ-агентов и готовых автоматизаций на n8n доступен бесплатно: запускаем в один клик.  </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/v-seti-nawli-katalog-iz-3200--gotovyh-ii-agentov-pod-lyubye-zadachi--mozhno-zapuskat-v-odin-klik-bez-koda">В Сети нашли каталог из 3200+ готовых ИИ-агентов под любые задачи. Можно запускать в один клик без кода</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Парсинг]]></category>
      <category><![CDATA[Slack]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Discord]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Notion]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 07 Jul 2025 12:19:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>В Сети обнаружили огромный <a href="https://n8nworkflows.xyz/">каталог </a>из более чем 3200 готовых рабочих процессов и ИИ-агентов для автоматизации рутинных задач через визуальный конструктор n8n. Сервис позволяет запускать агентов в один клик, настраивать пайплайны под свои потребности и быстро собирать целые «команды» из нейросетей для маркетинга, разработки, продаж, кибербезопасности, дизайна и исследования рынков.</p><p>Больше новостей — в нашем тг-канале <a href="https://t.me/+WYtyV4-XYmdhZTMy">Представляешь</a></p><h2>Что такое n8n</h2><p>Рост использования ИИ в рутине разработки, маркетинга и бизнеса приводит к потребности в простых и гибких инструментах, которые позволяют быстро соединять модели, API и данные в работающие пайплайны. Каталог n8n даёт инженерам и продуктовым командам фору: можно за день собрать MVP своего ассистента или системы автоматизации, сократив месяцы разработки.</p><p>Кроме того, открытый характер библиотеки помогает командам учиться на чужих кейсах, улучшать процессы и участвовать в развитии сообщества.</p><p>На данный момент на сайте доступно:</p><ul><li>457 простых пайплайнов для новичков;</li><li>1349 пайплайнов среднего уровня сложности;</li><li>1440 продвинутых решений для профессионалов и команд автоматизации.</li></ul><p>Каждый агент сопровождается документацией, описанием кейсов использования и рекомендациями по настройке. Также обновляется для совместимости с последними версиями n8n.</p><p>Запуск агента в n8n обычно занимает несколько минут:</p><ol><li>Вы выбираете нужный шаблон из каталога (например, автоматический парсинг HackerNews с публикацией в Telegram, автоматическую вёрстку в Notion, управление AWS-ключами через Slack или генерацию отчётов с помощью Claude).</li><li>Импортируете шаблон в свою среду n8n (SaaS или локально). Настраиваете ключи API или доступ к нужным сервисам (Telegram, Notion, Discord, AWS, HubSpot и др.).</li><li>Запускаете и получаете работающий агент, готовый к эксплуатации без написания кода.</li><li>Все процессы визуализированы, поэтому можно легко редактировать логику работы, добавлять свои шаги (например, постобработку с помощью GPT, уведомления в Slack или отправку в CRM) и адаптировать агента под свои задачи.</li></ol><h2>Какие задачи можно автоматизировать</h2><p>В каталоге есть ИИ-агенты и пайплайны для:</p><ul><li>SMM и маркетинга (сбор лидов, управление постингом, аналитика трендов);</li><li>Кибербезопасности (мониторинг SSL, автоматические алерты, управление ключами AWS);</li><li>Разработки (поддержка TypeScript Intellisense, автоматизация CI/CD);</li><li>Продуктивности (сбор и структурирование заметок в Notion, автоматизация писем, напоминания);</li><li>Исследований (поиск и структурирование данных с помощью ИИ, генерация дайджестов);</li><li>Дизайна (подготовка медиафайлов и управление рабочими процессами);</li><li>Продаж и клиентского сервиса (онбординг клиентов, автоматические уведомления и CRM-интеграции).</li></ul><p>Эти решения помогают запускать собственных ИИ-ассистентов для узких задач, ускорять работу команд и сокращать время на рутину.</p><h3>Что есть для разработчиков</h3><p>n8n остаётся платформой с открытым исходным кодом, поэтому разработчики могут:</p><ul><li>Клонировать и адаптировать любые из 3200+ рабочих процессов под свои нужды.</li><li>Интегрировать LLM (GPT-4o, Claude, Gemini) для создания сложных агентов с мультимодальными возможностями.</li><li>Выстраивать корпоративные пайплайны и автоматизированные рабочие места для команд.</li><li>Подключать плагины и собственные ноды для кастомных сценариев.</li><li>Запускать пайплайны локально или в облаке, сохраняя контроль над данными.</li></ul><p>Если вы строите собственных корпоративных ассистентов, хотите ускорить процессы или тестируете гипотезы, библиотека n8n может стать отличным полигоном для быстрой проверки решений без написания инфраструктурного кода.</p>]]></content:encoded>
    </item>
    <item>
      <title>Безопасное исполнение ненадёжного кода</title>
      <link>https://tproger.ru/articles/bezopasnoe-ispolnenie-nenadyozhnogo-koda</link>
      <comments>https://tproger.ru/articles/bezopasnoe-ispolnenie-nenadyozhnogo-koda?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Межов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bezopasnoe-ispolnenie-nenadyozhnogo-koda</guid>
      <description><![CDATA[<p>Методы безопасного исполнения ненадёжного кода. Рассматриваются уровни изоляции кода, методы ограничения ресурсов процесса, проблемы жёсткого лимитирования и подходы к их решению. Обсуждаются вопросы управления песочницами, а также использование инструментов контейнеризации.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bezopasnoe-ispolnenie-nenadyozhnogo-koda">Безопасное исполнение ненадёжного кода</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Песочница]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 06 Jul 2025 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мы привыкли к тому, что ведем разработку, используя лучшие инженерные практики, включая настройку CI/CD-конвейера. Сначала код проходит многоэтапные стадии проверки и тестирования, а только потом попадает в production-среду.</p><p>Давайте представим ситуацию, что нужно запустить код, минуя все эти стадии. Прям в production-среде. На первый взгляд — бред! Но если подумать, то на самом деле, не такая уж редкость. Например, некоторые системы предоставляют своим пользователям возможность расширять функциональность за счет прикладных скриптов. Наш любимый CI/CD-конвейер зачастую построен на пользовательских скриптах.</p><p>С одной стороны, для большинства подобная постановка вопроса — крайность. С другой, появляется возможность рассмотреть проблему с разных ракурсов. Уверен, что какие-то части общего решения, о котором пойдёт речь далее, могут быть использованы повторно и в других проектах.</p><p>Предлагаю по частям разобрать проблему безопасного исполнения ненадёжного кода. Последовательно рассмотрим вопросы, ответы на которые поворотные в выборе целевой архитектуры. Большая часть статьи касается разработки, но в конце сделаны важные акценты относительно администрирования и развертывания.</p><h2>Ненадёжный код</h2><p>Для начала определимся, что же считать ненадёжным кодом? На самом деле ответ зависит от решаемой задачи, правил и процессов, принятых в компании:</p><ul><li>Код, который не прошел CI, review и т.п.</li><li>Код из ненадёжного или неизвестного источника.</li><li>Закрытый (проприетарный) код.</li><li>Код, содержащий уязвимости.</li><li>Код, использующий запрещенные функции.</li><li>Любой код, который написал коллега:)</li></ul><p>Чтобы отделять код разрабатываемого приложения от ненадёжного, первый буду называть кодом приложения, а второй — <i>ненадёжным</i> или <i>внешним кодом</i>. Необходимость запуска ненадёжного кода в некоторых случаях буду называть <i>задачей</i>.</p><h2>Уровни изоляции кода</h2><p>Можно выделить три варианта запуска внешнего кода — три уровня изоляции. Каждый следующий увеличивает дистанцию между кодом приложения и запускаемым кодом. Чем выше уровень изоляции, тем меньше вероятность, что запускаемый код нанесет вред приложению и системе.</p><h3>Уровень 1: тот же процесс</h3><p>Запуск внешнего кода в адресном пространстве процесса приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/191fd454-6837-4e91-abbf-c6d4a1fb6121.png" alt="Запуск внешнего кода в адресном пространстве процесса приложения." /><figcaption>Запуск внешнего кода в адресном пространстве процесса приложения.</figcaption></figure><p>Такой способ определяет самый слабый уровень изоляции, поскольку запущенный код теоретически имеет доступ ко всему тому, к чему имеет доступ код самого приложения.</p><p>Примером может служить использование интерпретаторов скриптов (<a href="https://github.com/mozilla/rhino">Rhino</a>, <a href="https://github.com/IronLanguages/ironpython3">IronPython</a>, <a href="https://github.com/jython/jython">Jython</a> и т.п.), визуальных языков программирования (workflow-движков) или подключение модулей расширения (плагинов).</p><p>Способов защиты на этом уровне не так много. Пожалуй, самым эффективным выступает (self-sandboxing), при котором приложение делает самозапрет на доступ к некоторым ресурсам системы. Например, сразу после инициализации — самозапрет на доступ к файловой системе.</p><p>Дополнительно запускаемый код можно подвергать строгому (синтаксическому) анализу, запрещая использование определенных функций, модулей, пакетов и т.п. Некоторые интерпретаторы имеют точки расширения, которые позволяют контролировать процесс исполнения. Если такой возможности нет, можно воспользоваться одной из техник самоизоляции — <a href="https://www.kernel.org/doc/html/latest/userspace-api/seccomp_filter.html">фильтрацией системных вызовов</a>.</p><p>Что же касается плагинов, то они призваны расширять возможности приложения, поэтому их использование изначально не предполагает сильной изоляции. Здесь можно предложить усилить контроль взаимодействия на уровне контракта (API). В идеале — если плагины будут публиковаться в некоторый центральный репозиторий, которому вы доверяете и который может производить дополнительные проверки и тестирование до этапа запуска кода плагина.</p><h3>Уровень 2: отдельный процесс</h3><p>Запуск внешнего кода на той же машине, но в отдельном процессе ОС.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/e0bf62de-65a9-4370-9986-ed21c6e63b8e.png" alt="Запуск внешнего кода на той же машине, но в отдельном процессе ОС." /><figcaption>Запуск внешнего кода на той же машине, но в отдельном процессе ОС.</figcaption></figure><p>Поскольку и приложение, и внешний код взаимодействуют в рамках одного узла, используя локальные ресурсы ОС (оперативная память, файловая система и т.п.), скорость межпроцессного взаимодействия очень высокая.</p><p>Этот уровень изоляции предполагает использование широкого арсенала возможностей. Как минимум, внешний код может быть запущен от имени менее привилегированного пользователя, с ограниченным доступом к ресурсам ОС. Сильные способы изоляции ограничивают ресурсы с помощью средств ОС или инструментов контейнеризации. Однако, чем сильнее контроль, тем больше накладных расходов на запуск и исполнение процесса, что при решении некоторых задач неприемлемо дорого или неоправданно сложно.</p><h3>Уровень 3: отдельная машина</h3><p>Запуск внешнего кода на отдельной машине — песочнице.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/5e48bc50-75c9-4789-9dc7-3bbf2c1659a7.png" alt="Запуск внешнего кода на отдельной машине — песочнице." /><figcaption>Запуск внешнего кода на отдельной машине — песочнице.</figcaption></figure><p>Это максимальный уровень изоляции из всех возможных. Здесь появляется возможность ограничить ресурсы самой песочницы (CPU, память, дисковое пространство, доступ к сети и т.п.). Если в результате исполнения внешнего кода песочница выйдет из строя, приложение продолжит свою работу.</p><p>Самый главный недостаток этого подхода — необходимость сетевого взаимодействия между узлом, на котором работает приложение, и песочницей. Передача входных данных в песочницу, запуск процесса внутри, ожидание окончания его исполнения, получение выходных данных — всё это сетевые обращения. Так существенно замедляется процесс исполнения, а само взаимодействие подвержено сетевым сбоям, что ведёт к нестабильности системы и получаемых результатов.</p><h2>Использование песочницы</h2><p>Предположим, требуется максимальный уровень изоляции ненадёжного кода, следовательно, нужно остановиться на варианте запуска на отдельной машине. Если так, то для принятия последующих архитектурных решений нужно ответить на следующую пару вопросов.</p><h3>Пересоздание или переиспользование песочницы</h3><p>Песочницу требуется пересоздавать перед исполнением каждой задачи, если требуется особенное окружение (например, определенная версия ОС, пакетов или ресурсов) или идентичность этого окружения (для стабильности получаемых результатов). Схожие вопросы возникают, например, при интеграционном тестировании: каждому тесту нужны свои предустановки.</p><p>Переиспользование песочницы становится возможным, если задачи могут исполняться в одном окружении и не оказывают влияния друг на друга (предыдущая задача не портит результаты последующей). Продолжая аналогию с интеграционным тестированием: всем тестам нужны одинаковые предустановки, и тесты могут запускаться повторно на одном стенде, демонстрируя один и тот же результат.</p><p>Основным преимуществом пересоздания песочницы выступает стабильность получаемых результатов. К недостаткам относится медленный запуск и перерасход ресурсов. На пересоздание песочницы уходят десятки секунд или даже минут, следовательно, большая часть ресурсов будет тратиться именно на это. Существует множество техник ускорения пересоздания, благодаря которым можно сократить время запуска. Прежде всего, сюда можно отнести backup/restore (snapshot песочницы, базы данных и т.п.). Также если поток задач небольшой и ресурсы позволяют, можно попробовать организовать пул песочниц и создавать их заранее.</p><p>Ставка на переиспользование делается в случае, когда поток задач большой и нужно сократить время ожидания их запуска. При этом возрастает вероятность получения нестабильных результатов и, возможно, требуется производить какую-то очистку окружения до или после исполнения очередной задачи.</p><h3>Последовательное или параллельное исполнение</h3><p>Теперь осталось ответить на вопрос, как именно можно или нужно исполнять задачи: последовательно или параллельно. Последовательное исполнение требуется в следующих случаях:</p><ul><li>важен порядок следования и исполнения задач;</li><li>задачам нужен эксклюзивный доступ к определенному ресурсу;</li><li>задачи ёмкие и их совместное исполнение вызовет нехватку ресурсов;</li><li>задачи могут мешать исполнению друг друга из-за борьбы за ресурсы.</li></ul><p>Например, шаги установки и настройки ПО; шаги CI/CD-конвейера; рендеринг изображения на GPU; интенсивные вычисления. Все эти задачи, скорее всего, придётся исполнять <b>последовательно</b>.</p><p>В остальных случаях допустимо <b>параллельное исполнение</b>. Яркой аналогией может служить одна из лучших практик в тестировании: тесты не должны оказывать влияние друг на друга, а порядок их запуска не должен иметь значения.</p><p>Последовательное исполнение обеспечивает стабильность получаемых результатов, однако приводит к низкой пропускной способности и дороговизне масштабирования (песочница обходится дороже процесса ОС). Параллельное исполнение, напротив, увеличивает пропускную способность системы и улучшает утилизацию ресурсов песочницы, но одновременно повышает вероятность нестабильных результатов. Более того, при параллельном исполнении появляется шанс перегрузить песочницу или вывести её из строя таким образом, что приведет к увеличению времени исполнения всех запущенных задач или потере результатов их работы.</p><p>На практике было замечено, что при параллельном исполнении, несмотря на увеличенную общую пропускную способность, время исполнения каждой отдельной задачи увеличивается. Если уровень параллелизма становится больше числа CPU-ядер, время исполнения начинает деградировать намного сильней.</p><h2>Управление песочницами</h2><p>Допустим, переиспользование песочниц возможно. В таком случае необходимо определить способ управления ими. Можно выделить два подхода, основанные на принципах микросервисной архитектуры, но адаптированные к специфике рассматриваемой проблемы.</p><h3>Оркестрация</h3><p>Оркестрация предполагает, что приложение совмещает две роли: оркестратор исполнения и оператор песочниц. Оркестратор координирует процесс исполнения кода: выбор подходящей песочницы, загрузка в неё входных данных, запуск удалённого процесса, получение результатов его работы и т.п. Оператор, в свою очередь, отслеживает доступные песочницы и их состояние.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/93758cab-2542-4a80-b47a-d65b04ef4f14.png" alt="Оркестрация песочниц." /><figcaption>Оркестрация песочниц.</figcaption></figure><p>Основное преимущество оркестрации в контексте решаемой проблемы — её простота и ясность. Код легко читается и сосредоточен в одном месте. Однако у этого решения есть и недостатки. Рассмотрим их в порядке от простого к сложному.</p><ul><li><i>Синхронное взаимодействие.</i> Так или иначе, для результата приложение вынуждено ожидать окончания исполнения задачи. Для продуктивного использования ресурсов приходится прибегать к техникам асинхронного программирования: пока задача исполняется, приложение будет занято полезной работой. Это малозаметный недостаток в языках со встроенной поддержкой концепции асинхронного программирования. Для упрощения работы с асинхронным кодом в Java я создал небольшую вспомогательную библиотеку <a href="https://github.com/AlexMAS/asynchronizer">asynchronizer</a>, снабдив её подробной <a href="https://github.com/AlexMAS/asynchronizer/blob/main/docs/README.ru.md">документацией</a>.</li></ul><ul><li><i>Отслеживание доступности песочниц.</i> Поскольку хотелось бы, чтобы количество песочниц менялось в зависимости от нагрузки на систему, придётся отслеживать их доступность. Это прямая обязанность оператора песочниц, которую можно выделить в отдельный discovery-сервис (например, на базе <a href="https://github.com/spring-cloud/spring-cloud-netflix">Netflix Eureka</a>), либо реализовать как часть приложения с использованием инфраструктурных механизмов (например, <a href="https://github.com/fabric8io/kubernetes-client">Kubernetes API</a>). Важно отметить, что оператор песочниц не имеет отношения к бизнес-логике приложения.</li></ul><ul><li><i>Отслеживание загруженности песочниц.</i> Оркестратор исполнения должен выбрать подходящую <a href="https://samwho.dev/load-balancing/">стратегию балансировки</a>, основанную на состоянии песочниц, предоставляемых оператором. На практике наилучшую эффективность демонстрирует алгоритм Least connections, с помощью которого можно выбирать наименее загруженные песочницы. Для этого достаточно вести учёт количества задач, исполняемых каждой песочницей. Конечно, это не серебряная пуля, а лишь частное наблюдение, поэтому в идеале нужно предусмотреть несколько стратегий балансировки и выбрать наилучшую по результатам нагрузочного тестирования.</li></ul><ul><li><i>Неопределённость результата, если нет ответа от песочницы.</i> Песочница может быть недоступна по различным причинам, включая не только проблемы с сетью, но и падения песочницы из-за ненадёжного кода. К сожалению, в общем случае эта проблема не имеет решения, так как делать повторные запуски (retries) может быть опасно. Всё, что остаётся, это использовать таймауты и откладывать неуспешную задачу на потом.</li></ul><p>Ещё один существенный минус, который стоит упомянуть, это возможный побочный эффект, возникающий при масштабировании системы и проявляющийся в виде перегрузки песочниц. Для наглядности рассмотрим конкретный пример.</p><p>Для отслеживания нагрузки на песочницы экземпляр приложения ориентируется на количество задач в каждой из доступных песочниц. Предположим, что было принято решение увеличить количество экземпляров приложения. Этот экземпляр исполняет 5 задач в двух песочницах (3 процесса в одной и 2 в другой). Известно, что каждая песочница может вынести максимум 4 параллельных задачи.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/623f7e7c-71d0-41da-8681-731ef43d3716.png" alt="Экземпляр исполняет 5 задач в двух песочницах (3 процесса в одной и 2 в другой)." /><figcaption>Экземпляр исполняет 5 задач в двух песочницах (3 процесса в одной и 2 в другой).</figcaption></figure><p>Добавив новый экземпляр приложения, неизвестно, сколько задач исполняет каждая песочница. Такая ситуация может произойти по разным причинам.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/7131d310-7c0d-44b8-b031-055436bd64d8.png" alt="Новый экземпляр приложения не знает, сколько задач исполняет каждая песочница." /><figcaption>Новый экземпляр приложения не знает, сколько задач исполняет каждая песочница.</figcaption></figure><p>Вполне очевидно, что новый экземпляр приложения направит очередную задачу в первую попавшуюся песочницу, чем может спровоцировать её перегрузку. В итоге результат исполнения будет испорчен или потерян из-за падения песочницы.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/c65090e5-020f-4eff-826b-566d3dc6da5c.png" alt="Очередная задача направляется в первую песочницу и провоцирует её перегрузку." /><figcaption>Очередная задача направляется в первую песочницу и провоцирует её перегрузку.</figcaption></figure><p>В качестве решения можно предложить два способа, каждый из которых уменьшает вероятность возникновения перегрузок, но не избавляет от них.</p><ul><li><i>Для контроля количества исполняемых задач в песочнице использовать распределённый счётчик</i> (например, на базе Redis). Проблема в том, что распределённый счётчик имеет латентность и на момент запуска задач может выдать устаревшее значение. Кроме того, в системе появляется еще один инфраструктурный компонент, который не несёт бизнес-пользы.</li></ul><ul><li><i>Выделить каждому экземпляру приложения эксклюзивное подмножество песочниц.</i> Подобное решение существенно усложнит deployment-скрипты и процесс масштабирования, а также снизит степень утилизации выделенных ресурсов, ведь нет никаких гарантий того, что экземпляр приложения сможет хорошо нагрузить все выделенные ему песочницы.</li></ul><p>Кстати, после доклада на TechLeadConf 2025 мне задали интересный вопрос: <i>Можно ли при балансировке нагрузки на песочницы учитывать не только количество исполняемых задач, но и процент загрузки CPU, памяти и прочих ресурсов? </i>Если у кого-то возник такой же вопрос, то отвечу, что это не имеет смысла, поскольку ситуация в песочнице может поменяться мгновенно. Полученный практический опыт и нагрузочное тестирование показали, что простой подсчёт задач работает эффективно.</p><h3>Самоорганизация</h3><p>В микросервисной архитектуре подобный подход принято называть хореографией, однако чтобы не возникало неправильных ассоциаций, предлагаю использовать термин <i>самоорганизация</i>.</p><p>Ключевой момент в архитектуре — это появление двух очередей: очередь задач на исполнение (Task Queue) и очередь результата их исполнения (Result Queue). Все поступающие задачи приложение направляет в первую очередь, а результаты — во вторую. Дополнительно появляется роль агента — микросервиса, который исполняется в рамках узла песочницы и координирует исполнение поступающих задач.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/0d449846-e767-49bd-bd50-d1c77c49cf10.png" alt="Самоорганизация песочниц." /><figcaption>Самоорганизация песочниц.</figcaption></figure><p>Основной недостаток самоорганизации — распределённый процесс обработки задач. Учитывая простоту алгоритма обработки, это не так существенно. Стоит отметить преимущества этой архитектуры.</p><ul><li><i>Максимальная изоляция ненадёжного кода.</i> Ненадёжный код, как и в случае с оркестрацией, по-прежнему работает в песочнице в рамках отдельного процесса ОС.</li></ul><ul><li><i>Скорость и стабильность взаимодействия.</i> Никаких проблем с сетью  из-за локальности взаимодействия между агентом и песочницей.</li></ul><ul><li><i>Контролируемая нагрузка на песочницы.</i> Агент, выступая в роли консюмера очереди задач, может точно контролировать степень параллелизма и выбирать новые задачи только тогда, когда он закончил обрабатывать предыдущие.</li></ul><ul><li><i>Минимум инфраструктурного кода.</i> Очереди избавляют от необходимости иметь оператор песочниц, отслеживать их состояние и осуществлять балансировку нагрузки.</li></ul><ul><li><i>Простота масштабирования.</i> Приложение и песочницы масштабируются независимо друг от друга без негативных побочных эффектов.</li></ul><h2>Запуск процесса ОС</h2><p>К запуску процесса ОС, в рамках которого будет исполняться ненадёжный код, нужно подойти с особой осторожностью. Здесь важно ответить как минимум на три вопроса.</p><ul><li><i>Как ограничить права доступа к ресурсам.</i> Самое простое решение — запуск процесса от имени пользователя с ограниченными правами (на доступ к ресурсам ОС).</li></ul><ul><li><i>Как ограничить объем используемых ресурсов.</i> Для запускаемого процесса нужно определить доступные ресурсы и возможные действия.</li></ul><ul><li><i>Как осуществлять анализ поведения и результатов исполнения.</i> Наличие и решение этой проблемы целиком и полностью зависит от специфики проекта. Здесь невозможно предложить универсального решения.</li></ul><p>Рассмотрим варианты ограничения ресурсов процесса ОС.</p><h3>Ограничение ресурсов процесса</h3><p>Ресурсы процесса могут быть ограничены на трех уровнях:</p><ul><li><i>Лимиты узла.</i> Физические ограничения машины, на которой исполняется процесс. В частном случае можно говорить об инфраструктурных лимитах, определённых для Docker/Kubernetes контейнера.</li></ul><ul><li><i>Лимиты контейнера.</i> Программные лимиты, задаваемые выбранным инструментом контейнеризации (cgroup, Docker, <a href="https://dzen.ru/a/Z8sdaQvf5w96SRes">Bubblewrap</a>, <a href="https://github.com/AlexMAS/ProcessSandbox">ProcessSandbox</a> и т.п.).</li></ul><ul><li><i>Лимиты процесса.</i> Программные лимиты, задаваемые средствами ОС. На этом уровне можно осуществлять гибкую настройку вариантов запуска и исполнения.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/d11a1ee8-1780-4ca6-b826-a09d4d95ed0d.png" alt="Уровни лимитирования ресурсов процесса." /><figcaption>Уровни лимитирования ресурсов процесса.</figcaption></figure><p>Можно использовать все три уровня лимитирования, либо какой-то определенный.</p><p>Между тем, важно отметить некоторые трудности, которые могут возникнуть при использовании инструментов контейнеризации.</p><p>Например, для использования cgroup или Docker внутри Kubernetes-контейнера нужно эскалировать привилегии контейнера, что в общем случае небезопасно в контексте исполнения ненадёжного кода. Более того, практика показала, что легковесных rootless-средств, предоставляемых ОС, вполне достаточно, чтобы снять большую часть рисков. В частности, Linux API позволяет не только лимитировать CPU и память, но и блокировать доступ к некоторым возможностям самой ОС. Например, можно наложить фильтр, который запретит вызов определённых системных функций.</p><h3>Проблемы жёсткого лимитирования</h3><p>Рассмотренные выше способы лимитирования задают жёсткие границы (hard limit), нарушение которых замедляет исполнение процесса, либо приводит к его принудительному завершению. При этом поведение наблюдаемого процесса и системы сильно варьируется в зависимости от того, какой лимит был превышен. Например, превышение по использованию CPU может привести к троттлингу (throttling), приостановке работы или принудительному завершению; превышение по использованию памяти заканчивается принудительным завершением со стороны ОС (OOM Killer) либо самостоятельным падением процесса (с ошибкой Out Of Memory).</p><p>Подобная вариативность осложняет <i>анализ поведения и результатов исполнения.</i> В этом случае можно использовать подход с программной мягкой границей (watchdog limit). Суть заключается в запуске дополнительного следящего потока (или процесса) ОС, который контролирует поведение и расход ресурсов у наблюдаемого. Как только детектируется превышение одного из лимитов, производится принудительное завершение наблюдаемого процесса, но уже не со стороны ОС, а со стороны приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/e38eb138-04f3-439f-89b5-9b810f112a69.png" alt="Программная мягкая граница (watchdog limit)." /><figcaption>Программная мягкая граница (watchdog limit).</figcaption></figure><p>Такой подход имеет несколько преимуществ.</p><ul><li><i>Точное определение причин принудительного завершения.</i> Жёсткие лимиты чуть выше мягких, благодаря чему для исполняемого кода создаётся иллюзия отсутствия каких-либо лимитов. Между тем, если лимиты всё-таки нарушаются, процесс всё равно будет завершен (либо со стороны приложения, либо гарантированно со стороны ОС). Но подобный дополнительный контроль со стороны приложения оставляет для него гораздо больше шансов понять причину принудительного завершения наблюдаемого процесса.</li></ul><ul><li><i>Возможность гибкого лимитирования ресурсов.</i> Приложение (или агент), ответственное за запуск наблюдаемого процесса, может обратиться к средствам ОС (в частности, к Linux API) и гибко настроить параметры запуска и исполнения. Как минимум, жёстко определить лимиты по CPU и памяти; наложить ограничения на объем I/O; создать запрет на вызов некоторых системных функций (например, запрет использования сетевых операций или файловой системы) и т.п.</li></ul><p>Такой подход я назвал watchdog и в целях иллюстрации реализовал его в виде .NET-библиотеки <a href="https://github.com/AlexMAS/ProcessSandbox">ProcessSandbox</a>. Помимо прочего, на странице проекта подробно рассмотрена проблематика контроля и анализа поведения процесса ОС со стороны прикладного кода.</p><p>Итоговая схема лимитирования может выглядеть так, как показано на рисунке ниже. Вместо тяжеловесных инструментов контейнеризации используется легковесный rootless-инструмент (watchdog) на базе средств ОС и только.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/2c5e74e4-125b-467d-8b27-30b005364523.png" alt="Лимитирование ресурсов процесса с помощью watchdog." /><figcaption>Лимитирование ресурсов процесса с помощью watchdog.</figcaption></figure><p>Для задач, где не нужен анализ поведения процесса и тонкая настройка лимитов, можно воспользоваться готовым инструментом — утилитой.</p><h2>Многоконтейнерные поды</h2><p>Зная, что контейнеры одного Kubernetes-пода работают на одном и том же узле, можно попытаться решить проблему нестабильности сетевого взаимодействия приложения и песочницы, разместив их контейнеры в одном поде.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/62400b6a-9c5b-4285-bff8-b0adb5ac8868.png" alt="Размещение контейнера приложения и песочницы в одном Kubernetes-поде." /><figcaption>Размещение контейнера приложения и песочницы в одном Kubernetes-поде.</figcaption></figure><p>Несмотря на всю заманчивость данной идеи, она несёт ряд недостатков.</p><ul><li><i>Плохая масштабируемость.</i> Соотношение приложение-песочница всегда один к одному. Однако не исключено, что в некоторых случаях это вполне приемлемо.</li></ul><ul><li><i>Плохая утилизация ресурсов.</i> Сможет ли приложение достаточно нагрузить песочницу, если количество песочниц будет в избытке; и наоборот, нужно ли столько же экземпляров приложения, сколько и песочниц.</li></ul><ul><li><i>Возможность перегрузки песочницы.</i> В распоряжении экземпляра приложения только одна песочница, которая может не справиться с потоком задач, обрабатываемых приложением.</li></ul><ul><li><i>Риск нарушить работоспособность приложения.</i> Выход песочницы из строя скорее всего приведет к перезапуску всего пода. Более того, если приложение и песочница обмениваются файлами через общий раздел (<a href="https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/">shared volume</a>), это может стать уязвимым местом.</li></ul><h2>Образ для песочницы</h2><p>Основные моменты, которые следует учесть при создании (Docker) образов песочниц:</p><ul><li><i>Заменить init-процесс</i> на <a href="https://github.com/krallin/tini">tini</a>, чтобы не превысить лимит по PIDs.</li></ul><ul><li><i>Создать непривилегированного пользователя,</i> ограничив ему права на доступ к ресурсам.</li></ul><ul><li><i>Регулярно сканировать версии образов</i> и пакетов на наличие уязвимостей.</li></ul><h2>Инфраструктура исполнения</h2><p>Основные моменты, которые следует учесть при настройке инфраструктуры исполнения:</p><ul><li><i>Обеспечить быстрый (пере)запуск песочниц.</i> Нужно быть готовым к тому, что песочницы будут падать. Если речь идет о Kubernetes, то улучшить время запуска может подходящая настройка <a href="https://kubernetes.io/docs/concepts/containers/images/">Image Pull Policy</a>. При этом лучше не использовать тег `latest`, а указывать конкретную версию или хэш-код образа, чтобы не тратить время на попытки определения последней версии при каждом запуске.</li></ul><ul><li><i>Установить приемлемый <a href="https://kubernetes.io/docs/concepts/policy/pid-limiting/">лимит на PIDs</a>.</i> Необходимо контролировать число активных процессов в системе. Особо вредоносный код может попытаться создать очень много дочерних процессов, поэтому при отсутствии лимита на PIDs узел быстро будет выведен из строя. Важно отметить, что лимит задаётся для пользователя, а не для запускаемого процесса. По этой причине он должен быть разумно большим.</li></ul><ul><li><i>Установить <a href="https://kubernetes.io/docs/concepts/policy/resource-quotas/">лимиты на ресурсы узла</a>.</i> В Kubernetes для каждого контейнера нужно указать, как минимум, лимиты по CPU и памяти. Значения лимитов лучше всего определить в ходе нагрузочного тестирования или путём сбора метрик приложения.</li></ul><h2>Заключение</h2><p>Как можно заметить, задача исполнения ненадёжного кода всегда решается в комплексе, начиная с анализа, продолжая разработкой и заканчивая вопросами уровня DevOps. Думаю, что многие техники и инструменты применимы и к коду самого приложения.</p><p>Я постарался показать последовательность шагов по направлению к целевой архитектуре, которая будет отвечать требованиям бизнеса и справляться с ненадёжным кодом. <i>Если вам интересна данная тематика, подписывайтесь на мой Telegram-канал Архитектоника в ИТ (@arch_and_dev). Буду рад поделиться опытом. </i></p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft выпустил бесплатный курс по Model Context Protocol с практикой на Python, C# и Java</title>
      <link>https://tproger.ru/news/microsoft-vypustil-besplatnyj-kurs-po-model-context-protocol-s-praktikoj-na-python--c--i-java</link>
      <comments>https://tproger.ru/news/microsoft-vypustil-besplatnyj-kurs-po-model-context-protocol-s-praktikoj-na-python--c--i-java?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/microsoft-vypustil-besplatnyj-kurs-po-model-context-protocol-s-praktikoj-na-python--c--i-java</guid>
      <description><![CDATA[<p>Microsoft запустил бесплатный практический курс по протоколу Model Context Protocol (MCP) с примерами на Python, C#, Java и TypeScript для разработки LLM-приложений и серверов MCP.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/microsoft-vypustil-besplatnyj-kurs-po-model-context-protocol-s-praktikoj-na-python--c--i-java">Microsoft выпустил бесплатный курс по Model Context Protocol с практикой на Python, C# и Java</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Microsoft Project Scorpio]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Jul 2025 10:13:53 GMT</pubDate>
      <content:encoded><![CDATA[<p>На GitHub появился полноценный <a href="https://github.com/microsoft/mcp-for-beginners/?tab=readme-ov-file">бесплатный курс</a> от Microsoft по Model Context Protocol (MCP) — протоколу, который помогает упростить интеграцию LLM и клиентских приложений и стандартизировать их взаимодействие. Учебная программа с открытым исходным кодом рассчитана на разработчиков ИИ, системных архитекторов и инженеров, которые хотят понять, как строить агентные системы и управлять контекстом запросов к языковым моделям.</p><p>Больше новостей — в нашем канале <a href="https://t.me/+WYtyV4-XYmdhZTMy">Представляешь</a></p><h2>Подробности</h2><p>MCP уже становится стандартом для корпоративных ассистентов и мультиагентных систем: протокол позволяет гибко управлять маршрутами вызовов между моделями и сервисами, снижает хаос в интеграциях и упрощает масштабирование LLM-приложений. Теперь у инженеров появилась возможность изучить MCP на практике: в курсе представлены готовые проекты и живой код на Python, C#, Java, TypeScript и JavaScript, есть пошаговые инструкции по настройке среды, запуску серверов и клиентов, интеграции с пайплайнами CI/CD, а также подробные объяснения архитектуры и рекомендаций по безопасности.</p><h3>Что есть в учебной программе</h3><p>Курс разделён на несколько блоков: от основ MCP и настройки окружения до практического создания серверов и клиентов, работы с потоковой передачей данных и построения мультимодальных систем. Также рассматриваются вопросы масштабирования, интеграции с Azure AI и OpenAI, построения защищённых серверов и развертывания LLM-агентов. Особое внимание уделено тому, как MCP помогает организовать работу с контекстом запросов и объединением нескольких моделей, включая сценарии корпоративного применения.</p><p>План следующий:</p><ul><li><b> Уроки 1–2 </b>— введение в протокол, настройка среды, запуск базового MCP-сервера и клиента, интеграция в существующие пайплайны, безопасность.</li></ul><ul><li><b> Урок 3 (большой модуль)</b> — создание и развертывание рабочего MCP-сервера и клиента: от локальной разработки и тестирования в Visual Studio Code с AI Toolkit до развертывания сервера с SSE и HTTP-стримингом, а также построения клиентов на Python и TypeScript.</li></ul><ul><li><b>Уроки 4–5</b> — практическое применение: от отладки и тестирования до масштабирования, мультимодальности и интеграции с Azure AI Foundry, OAuth2 и системами Entra ID.</li></ul><ul><li><b>Уроки 6–9</b> — лучшие практики, вклад сообщества, разбор реальных кейсов ранних внедрений, лабораторные работы.</li></ul><ul><li><b>Урок 10</b> — практическая лаборатория: создание MCP-сервера с помощью AI Toolkit для VSCode, демонстрация потоковой передачи данных в реальном времени, интеграции с внешними LLM и корпоративными пайплайнами.</li></ul><p>Курс будет полезен как тем, кто только начинает изучать работу с языковыми моделями и строит свои первые ассистенты, так и опытным разработчикам, которым нужны структурированные практики и кейсы. Для старта достаточно базового понимания Python, C# или Java, а также представления о модели клиент-сервер и API.</p><p>Учебная программа уже <a href="https://github.com/microsoft/mcp-for-beginners/?tab=readme-ov-file">доступна</a> в официальном репозитории MCP на GitHub. Там можно найти SDK с открытым исходным кодом, инструкции по работе с AI Toolkit для VSCode, шаблоны проектов и примеры кода, которые можно запускать и адаптировать под свои задачи.</p><p>Протокол MCP становится частью экосистемы OpenAI и Azure AI, и умение работать с ним может дать инженерам конкурентное преимущество в новых проектах, связанных с LLM и корпоративными ассистентами. Новые уроки и примеры будут постепенно добавляться в репозиторий, поэтому курс обещает оставаться актуальным в быстро меняющемся мире ИИ.</p><h4>Полезные ссылки</h4><ul><li><a href="https://modelcontextprotocol.io/">Документация MCP</a> — подробные учебные пособия и руководства пользователя</li><li><a href="https://spec.modelcontextprotocol.io/">Спецификация MCP</a> — архитектура протокола и технические рекомендации</li><li><a href="https://github.com/modelcontextprotocol">Репозиторий MCP на GitHub</a> — SDK с открытым исходным кодом, инструменты и примеры кода</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Микросервисная архитектура: от монолита к гибкой системе</title>
      <link>https://tproger.ru/articles/mikroservisnaya-arhitektura--ot-monolita-k-gibkoj-sisteme</link>
      <comments>https://tproger.ru/articles/mikroservisnaya-arhitektura--ot-monolita-k-gibkoj-sisteme?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/mikroservisnaya-arhitektura--ot-monolita-k-gibkoj-sisteme</guid>
      <description><![CDATA[<p>«Монолит или микросервисы» — вопрос, который до сих пор вызывает споры в IT. СТО Сервисной цифровой платформы в Газпромбанке делится личным опытом перехода к микросервисной архитектуре, разбирает реальные кейсы и объясняет, почему однозначного ответа не существует.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/mikroservisnaya-arhitektura--ot-monolita-k-gibkoj-sisteme">Микросервисная архитектура: от монолита к гибкой системе</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Ретро]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Архитектура приложений]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 27 Jun 2025 08:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Меня зовут Андрей Бирюков, я СTO Сервисной цифровой платформы в Газпромбанке. За свою карьеру поработал в нескольких компаниях — от стартапов до крупных корпораций — и видел разные архитектурные подходы.</p><p>И вот начала копиться усталость от обсуждения, что использовать — монолиты или микросервисы. Этот вопрос стал преследовать меня на конференциях, в офисе, в личных сообщениях. Я потратил столько времени на обсуждение этой темы, что иногда хочется просто распечатать какой-нибудь емкий ответ на футболке и ходить в ней на все митапы.</p><p>Шутки шутками, но тема действительно важная. Я прошел путь от классических монолитных приложений до сложных микросервисных, проектировал системы, которые работают под большой нагрузкой, и пришел к выводу, что однозначного ответа здесь не существует. И вообще, «монолит или микросервисы» — это неправильная постановка вопроса.</p><p>Недавно сходил с Витей на запись <a href="https://vkvideo.ru/video-145457488_456239831">подкаста</a> на эту тему и настолько преисполнился, что решил в текстовом виде формализировать свое отношение к теме (я гнался за вами три дня, чтобы сказать, как вы мне безразличны, ага), обобщить то, о чем говорили, и попытаться дать ответ на вопрос «когда микросервисы действительно помогают и как не сойти с ума, если вы с ними работаете». Порассуждаю о проектировании, поддержке, DevOps-культуре и попробую немного заглянуть в микросервисную архитектуру.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-27/98a19000-c584-440e-bf7a-af36d4409a2a.png" alt="" /><figcaption>Подкаст «Техно.Логично»</figcaption></figure><h2>Микросервисы: зачем они нужны и в чем их плюсы</h2><h3>Архитектура приложений: немного базы</h3><p>Под капотом современных приложений обычно скрываются три основные части:</p><ul><li>множество библиотек и зависимостей;</li><li>единый store, в котором живут состояние и данные;</li><li>компоненты, которые нужно собрать, чтобы сделать из них приложение.</li></ul><p>Собрать это все можно по-разному. Можно сложить в монолит, а можно попробовать модульный подход.</p><p>Монолитное приложение — старое доброе приложение, которое, как правило, создают один или несколько разработчиков, потом его дорабатывает армия джунов, синьоров и всех, кто оказался рядом. Каждый «чуть-чуть поправил», и вот уже никто не понимает, почему оно работает, — но трогать страшно. Монолиты пишут и сейчас — все зависит от бизнеса. Если нужно приложение для небольшого проекта, микросервисы могут и не понадобиться.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-27/02011912-2de9-4c86-9de2-44865eb93fab.png" alt="" /><figcaption>Как выглядит монолит</figcaption></figure><p>Однако наступает момент, когда бизнес расширяется, аудитория растет, нагрузка увеличивается — а масштабировать монолит становится все сложнее. Тогда и приходят на помощь микросервисы.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-27/739de2ec-05c4-4f68-bf1a-356380611028.png" alt="" /><figcaption>А вот приложение с микросервисной архитектурой</figcaption></figure><p>Масштабировать можно и монолиты, но у них всегда остается какая-то единая точка отказа — например, база данных. Особенно если это реляционная СУБД, завязанная на Oracle или PostgreSQL. Когда база достигает сотен гигабайт или даже терабайт, масштабировать такую штуку становится дорого, больно и ненадежно.</p><h3>Микросервисы — панацея? Не совсем</h3><p>Тренд на микросервисный подход появился в начале 2010-х годов, вместе с проникновением интернета в широкие слои населения. Первый iPhone вышел в 2007 году, люди стали гораздо ближе к интернету, к данным, к информации. Бизнес захотел дотянуться до этой аудитории, и тогда началась диджитализация, сложность систем стала повышаться. Особенно остро это почувствовали крупные организации вроде банков: функциональность увеличивалась, и монолит начал «трещать» не только технически по инфраструктуре, но и по возможностям команд разработки, которые с ним работали.</p><p>Плюсы микросервисов очевидны: масштабируемость, независимая разработка, изоляция компонентов. Но вместе с этим пришли новые проблемы — усложнились мониторинг и поддержка, стали требоваться все новые инструменты, чтобы обеспечивать работу огромной инфраструктуры. Так появился DevOps.</p><h2>Распространение DevOps-культуры и инструменты оркестрации</h2><p>Раньше разработчик писал код, собирал артефакт и перекидывал его через забор в поддержку. Коллеги за забором его деплоили, запускали — и разработчику можно было больше не думать про плоды своей работы.</p><p>В новой реальности количество артефактов, которые нужно перекидывать через забор, кратно выросло. Вместе с этим появилась и стала распространяться DevOps-культура: понимание, что за качественную раскатку в проде отвечает не только команда поддержки, но и разработчики.</p><p>Важно учитывать еще и то, что сложность поддержки кратно увеличилась. Если монолит можно было отдебажить, просто заглянув в логи, то с сотней микросервисов так не получится. Поэтому появились такие инструменты, как централизованное логирование, распределенный трейсинг — и сотни, если не тысячи других, связанных в первую очередь с observability. В таких обстоятельствах DevOps-культура стала особенно важна.</p><h2>Проектируем микросервисы без боли: от стандартов до DDD</h2><h3>Стандартизация — наше все</h3><p>Если каждый микросервис пишет логи в своем формате и использует свои библиотеки, получается зоопарк. Нужно, чтобы были выровнены стек и CI/CD pipeline, существовали одинаковые библиотеки логирования и формат.Микросервисы дают свободу писать на разных языках, но с ней приходит и ответственность: под каждый язык придется придумывать и поддерживать разные инструменты. А это приведет к еще большему увеличению сложности. Так что с языком тоже лучше соблюдать стандартизацию: если пишете на Java, то и решать все проблемы стоит с помощью этого языка.</p><p>При этом иногда другой язык вполне оправдан. Например, просто потому, что Java не может работать с такой высокой скоростью, какая нужна. В некоторых случаях даже на Java приходится писать особым образом, либо можно использовать C++, Go или Rust. Но это скорее исключение из правила.</p><p>Инженеры — натуры увлекающиеся и любят паттерн CV driven development, когда хочется новую технологию потрогать и внедрить у себя. А потом похвастаться этим на каком-нибудь ивенте по принципу «just because I can» («просто потому что могу»). При этом может оказаться, что бизнесу технология особо и не была нужна. Чтобы избегать таких ситуаций, необходим технологический радар — список того, что можно использовать в компании, а что нет. И исключения из такого радара должны приниматься и допускаться очень взвешенно.</p><h2>DDD: как правильно нарезать сервисы</h2><p>Одна из опасностей при проектировании микросервисов — скатиться в очень мелкую гранулярность, когда логика нарезается чуть ли не по отдельной функции на микросервис (на отдельный deployment unit). Это может привести к такой сложности, которой потом будет очень трудно управлять. Такая проблема была, например, у Uber в начале их пути, и им пришлось пересматривать свою архитектуру. Избежать этого помогает Domain-driven design (DDD) — предметно-ориентированное проектирование.</p><p>Вместо того чтобы пилить отдельные сервисы для авторизации, логирования и уведомлений, команда может подумать вот над чем: все это части одного бизнес-контекста — пользовательского доступа. И целесообразно оставить их в одном сервисе. Это и есть DDD в действии.</p><p>Существует и еще одна проблема, с которой DDD помогает справиться, — неправильная нарезка сервисов с точки зрения бизнесовой функциональности. Если не понимать бизнес-контекста, можно получить «распределенный монолит»: будет много отдельно стоящих сервисов, но профита никакого, только все сложности микросервисов плюс проблемы монолита с масштабируемой базой данных. Особенно остро это проявляется, когда изменения в одной части бизнес-процесса (в одном сервисе) влекут за собой изменения еще в трех-четырех-пяти других сервисах.</p><p>DDD помогает выделить bounded context — согласованные по бизнесу участки. Они позволяют более или менее правильно нарезать большой бизнес-функционал на отдельные части.</p><p>Еще один важный принцип правильной архитектуры микросервисов — у каждого микросервиса должна быть своя независимая маленькая база данных (если она вообще нужна).</p><p><b>Два эмпирических правила, которые касаются размера сервисов и помогают понять, правильно ли они спроектированы:</b></p><ul><li>Если вы не можете переписать сервис за две недели, значит, возможно, он неправильно нарезан, и его нужно декомпозировать.</li><li>Если вам страшно браться за переписывание сервиса, значит, он точно кандидат на декомпозицию.</li></ul><p>Внедрение микросервисов: с чего начать?</p><p>С микросервисным подходом есть проблема — нет четкого ответа, куда идти и что делать, чтобы научиться его создавать. Это одна из главных сложностей микросервисной архитектуры, особенно когда только начинаешь с ней работать. Если хочется изучить Spring или Oracle, можно почитать официальную документацию. А к такой большой и необъятной теме, как микросервисы, даже и непонятно, с какой стороны подступиться. Туториала к ней нет, есть только куча статей, подходов и практик. Причем одни практики подойдут конкретной команде, а другие — нет.</p><p>И вот тут возникает реальная сложность, особенно когда вы только начинаете, — глаза разбегаются. Здесь Kubernetes, здесь ELK, здесь Grafana, здесь observability, здесь всякие паттерны отказоустойчивости, CAP-теорема и прочее. Непонятно, куда бежать. И каждый день появляются новые инструменты, которые так или иначе упрощают жизнь.</p><p>Совет: задавайте себе вопрос о каждом инструменте, который вы хотите внедрить (будь то Kubernetes, OpenTelemetry с Jaeger или любой другой) — какую проблему мы решаем, втаскивая его в свою инфраструктуру? Ответ на этот простой вопрос может дать много инсайтов и просветлений.</p><p>Чтобы в первом приближении ознакомиться с темой, можно почитать материалы <a href="https://sre.google/books/">SRE</a> от Google, также будут полезны статьи и книги в<a href="https://martinfowler.com/"> блоге</a> Мартина Фаулера, в том числе <a href="https://martinfowler.com/microservices/">Microservices Guide</a>. Если вам нужна практика, можно попробовать пойти на тот же Udemy, где есть множество курсов по микросервисной архитектуре с хорошими рейтингами и отзывами.</p><p>И вот что важно: при проектировании и внедрении микросервисов лучше избегать «велосипедостроения». Если индустрия уже решила проблему, нет смысла изобретать новое логирование или оркестрацию. Собственное решение вряд ли будет работать лучше, а сил, времени ресурсов на него можно потратить очень много.</p><h2>Поддержка микросервисной архитектуры</h2><p>Мы каждый день используем разные приложения — например, мобильный банк. Если в магазине длинная очередь, а на кассе у вас вдруг вылетает ошибка, — это раздражает. Поэтому у бизнеса нет права на ошибку: мониторинг должен срабатывать раньше, чем клиент успеет заметить, а инциденты необходимо устранять за минуты.</p><p>В крупных организациях микросервисов могут быть сотни: например, в некоторых системах насчитывается почти 700 микросервисов на продакшене. Каждый инстанс еще масштабирован — это тысячи подов, которые постоянно обрабатывают клиентский трафик. И при этом в современных условиях нужно стремиться к доступности системы на уровне четырех девяток (99,99%), то есть к простою всего в несколько минут в год.</p><p>Если вы хотите достичь того, чтобы простой вашего приложения был минимальным, приходится продумывать много разных подходов, приемов и инструментов.</p><h3>Паттерны отказоустойчивости</h3><p>Микросервисы — это не про «разбили монолит», это про то, что сбой одного сервиса не должен валить весь продукт. Поэтому если какой-то важный сервис упал, то максимум, который нужно сделать, — чтобы клиент не увидел упавший кусочек функционала приложения.</p><p>Еще один хороший вопрос: как мониторить аварии? Необходимо очень быстро находить точку отказа. Для этого, собственно, и нужен observability-подход, трейсинг. Нужно смотреть, где какой RPS (число запросов в секунду), не произошло ли резкого скачка трафика, важно следить за latency (задержками).</p><p>Бывали случаи, когда из-за бага в мобильном приложении трафик внезапно удваивался, и системы не выдерживали такой нагрузки. Любая малейшая задержка в самом незначительном компоненте может привести к тому, что по цепочке пойдет отказ, — будут копиться потоки, соединения, и рано или поздно упадет вообще все. Чтобы подготовиться к таким ситуациям, важно изучить хотя бы <a href="https://sre.google/sre-book/monitoring-distributed-systems/">четыре «золотых сигнала» мониторинга</a> из SRE от Google.</p><p>Совет: возьмите на вооружение парадигму проектирования на отказ. Исходите из того, что в любой момент что угодно может пойти не так. Сеть будет нестабильной, железо начнет падать, интеграции станут работать неправильно. Если изначально придерживаться этого принципа, вы здорово подстрахуете себя завтрашнего. Это всегда спасает, особенно когда получаешь по наследству что-то, что не было спроектировано с учетом этого принципа.</p><p>Сейчас часто используют паттерны, которые помогают поддерживать отказоустойчивость системы:</p><ul><li><b>Circuit Breaker</b> — если сервис спамит ошибками, лучше временно прекратить попытки до него достучаться. Для клиента ничего не изменится, он как получал ошибки, так и будет получать. Но, по крайней мере, можно дать системе возможность восстановиться. А еще лучше — позволить ей переключиться на какой-то резервный канал, например сходить в кэш с неактуальными данными.</li><li><b>Rate Limiter</b> — абсолютно банальная, но необходимая вещь. Нужно ограничивать входящий поток на примерно максимальном уровне от того, который ожидается. Чтобы все не развалилось, если произойдет резкий скачок трафика.</li><li><b>Blue-Green Deployment</b> — значительно снижают на продакшене количество аварий и проблем, связанных с кривыми релизами. Можно не раскатывать новую фичу сразу на все 100 подов, а выкатить ее только на 1% трафика и проверить.</li></ul><p>И это только малая часть паттернов.</p><p>Все это must have для абсолютно любой системы. Даже если у вас низкая нагрузка, она когда-нибудь увеличится. Лучше вовремя предусмотреть это, заранее потратив чуть больше времени и реализовав эти паттерны.</p><h3>Как эффективно работать с инцидентами</h3><p>Начало всех начал в траблшутинге — мониторинг. Здорово, когда разработчики понимают, как устроена их система, и уже вложились в мониторинг: есть дашборд, где можно посмотреть по уровням абстракций основные точки отказа.</p><p>Первый уровень — это application-слой, сами сервисы, которые в подах крутятся в Kubernetes. Нужно проверить, все ли у них хорошо по точкам интеграции — нет ли тайм-аутов. Все ли в порядке у них по железу — по CPU, по памяти, по дискам.</p><p>Если на первом уровне все нормально, нужно опуститься на уровень ниже — либо на виртуалки, на которых Kubernetes развернут, либо на железки, если он развернут на Bare-metal. Недавно мы столкнулись с интересным случаем: виртуалка показывала нормальную загрузку CPU, но физический гипервизор, на котором она крутилась, был загружен на 99%. Естественно, виртуалка страдала, но уровнем выше этого не было видно.</p><p>Совет: если вы вдруг нашли что-то, что еще не мониторится, — это повод поскорее добавить эту метрику, начать ее мониторить и ретроспективно отслеживать.</p><p>Еще одна важная вещь в работе с инцидентами — культура постмортемов. Ретроспективы по каждой аварии пишутся не просто так — их можно свести по категориям и понять, из-за чего чаще всего происходят аварии: например, из-за протухших сертификатов либо человеческого фактора в конфигурации. Категорий причин отказа обычно не так много. С постмортемами проще выработать стратегию технического инженерного развития.</p><p>Вообще, человеческий фактор — это отдельная боль. Все привыкли менять что-нибудь руками: заходить в виртуалки, поправлять конфиг. Чтобы такого было как можно меньше, важно вкладываться в infrastructure as a code и даже everything as a code. В идеале следует стремиться к zero access production — нулевому доступу к продакшену — и все раскатывать через Git, через конфигурации, включая политики безопасности.</p><h2>Культура ответственности и изменение ролей в команде</h2><p>Представим, что происходит инцидент — падают 15 микросервисов. Как должна быть устроена система, которая позволит оперативно справляться с авариями?</p><p>Организационно все достаточно просто — хотя не так просто на земле, при устранении инцидента. Все сервисы должны быть каталогизированы, сгруппированы по командам или продуктовым стримам. Необходима матрица эскалации, позволяющая найти по зоне ответственности человека, которому можно позвонить и попросить подключить необходимых инженеров.</p><p>Подобную конструкцию важно поддерживать в актуальном состоянии. Это часть процесса непрерывности, и в нее надо вкладываться. В крупных компаниях этим занимаются целые отделы, в небольших организациях — отдельный человек, но такая информация всегда должна быть в общем доступе. Иначе время «отскока» после инцидента увеличится кратно.</p><p>Желательно, чтобы в компании был специальный ситуационный центр, в котором сразу можно создать конференцию, если случилась авария, и поделиться информацией, чтобы все подключились к решению проблемы.</p><p>Однако эти организационные моменты еще не гарантируют быстрого решения проблемы. Ключевой фактор — культура компании. На людей часто нападает отстраненность — авария случилась, и все думают: «Кто-нибудь другой разрулит. Я разработчик, ну, что я там сделаю?»</p><p>Многие привыкли жить по старой парадигме: написали код, потестировали, отдали поддержке и забыли. Но культура в команде должна дорасти до такого уровня, когда каждый понимает: я не только разрабатываю или тестирую код, но еще и отвечаю за него на продакшене.</p><p>Из-за этого разрыва в осознании между командами поддержки и разработки возникают конфликты. У каждой разные цели, и зачастую одна команда не понимает, чего хочет другая. Чтобы лучше понять природу этих конфликтов, важно вспомнить про DevOps-культуру и SRE. В их парадигме разработчики не только пишут код, но и деплоят в продакшен.</p><p>Проще говоря, есть два варианта взаимодействия с поддержкой: классический, когда она административно отделена, и SRE-подобный, когда сотрудники «второй линии» прямо интегрированы в команду разработки. Могу сказать, что второй эффективнее.</p><p>При этом не обязательно сливать всех в одну плоскую структуру на уровне административного деления. Достаточно, чтобы люди, даже находясь в разных административных юнитах, работали как команда и коммуницировали постоянно, а не от случая к случаю. Важно, чтобы все были проактивными — если что-то случилось, сразу подрывались и по инструкции пытались устранить проблему.</p><p>Это то самое SRE, о котором пишет Google. Но людей нужно долго обучать такой культуре — это не дело одного месяца. Благодаря такому подходу инженеры, которые раньше были просто разработчиками или аналитиками, глубже осознают свою ответственность за стабильность продакшена. И это действительно правильное направление развития. Потому что и DevOps, и SRE — это в первую очередь культура, а уже во вторую — набор инструментов.</p><h3>Будущее микросервисов: тренд на AI Ops</h3><p>Разработчики уже используют AI как copilot — и это очень мощный инструмент в умелых руках. Он не заменяет инженера, но сильно экономит ему время. Эту помощь от нейросетей очень хочется растянуть и на инфраструктуру, и на эксплуатацию, чтобы получить крутой AI Ops.</p><p>Нейросеть будет находить протухшие сертификаты внутри инфраструктуры, работать инструментом для early warning, подсвечивать риски.Кажется, что все инструменты для этого есть уже сейчас. Надо только, чтобы кто-то сложил этот пазл в рабочее решение.</p><p>Есть прототипы — например, Big Panda или Moocsoft (который был недавно куплен Dell), но пока это точечные решения. Возможно, на горизонте 5–7 лет (скорее 5, чем 10) они станут серьезной частью индустрии и очень мощным прорывом, который упростит разработчикам жизнь.Кроме того, важно, чтобы развивались и более «приземленные» технологии: инструменты контейнеризации, оркестрации, observability, а также APM — Application Performance Monitoring.</p><h3>Инженер остается в центре всего</h3><p>Никакие микросервисы, Kubernetes и AI Ops не спасут, если за системой не стоит инженер, который думает головой, правильно работает руками и отвечает за результат. Важны его навыки, кругозор и культура работы. Именно такие люди превращают набор сервисов в работающий продукт. Все остальное — только инструменты.</p><p>P. S. Если интересно, как мы решаем эти задачи на практике, <a href="https://technologichno.mave.digital/">слушайте </a>(и <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvkvideo.ru%2Fvideo-145457488_456239831&amp;postId=1982175">смотрите</a>) наш подкаст «Техно.Логично» — там регулярно обсуждаем самое актуальное в IT-сфере.</p>]]></content:encoded>
    </item>
    <item>
      <title>5 инструментов, которые используют айтишные команды</title>
      <link>https://tproger.ru/articles/5-instrumentov--kotorye-ispolzuyut-ajtiwnye-komandy</link>
      <comments>https://tproger.ru/articles/5-instrumentov--kotorye-ispolzuyut-ajtiwnye-komandy?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-instrumentov--kotorye-ispolzuyut-ajtiwnye-komandy</guid>
      <description><![CDATA[<p>Показываем, какими инструментами пользуются внутри айтишных команд и какие можно использовать для себя здесь и сейчас или внедрить в свою команду.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-instrumentov--kotorye-ispolzuyut-ajtiwnye-komandy">5 инструментов, которые используют айтишные команды</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Статистика]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[Отладка]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Adobe]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 26 Jun 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В статье собрали 5 решений — от трекеров задач и онлайн-досок до комплексных платформ для управления проектами. Инструменты помогут закрывать горящие дедлайны, ускорять разработку и четко распределять задачи — все то, что используют в больших командах. Рассказываем, что делать с этими фичами и как их использовать.</p><h2>1. МояДоска</h2><p><a href="https://moyadoska.com/">«МояДоска»</a> — это российский SaaS-сервис для совместной работы и визуализации идей. У онлайн-доски бесконечный размер: это значит, что вы можете размещать сколько угодно элементов и никогда не упретесь в границу. Так, команды, преподаватели и креативные специалисты могут проводить брейнштормы, планирования, презентации и обучение в одном пространстве.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/4fe2215f-6b29-4d0c-a490-281b2d045ddc.jpeg" alt="" /></figure><h3>Что под капотом</h3><p>Фронт написан на React + PixiJS, а бэк — Node.js + PostgreSQL. Это обеспечивает быстрый и понятный интерфейс и стабильную работу даже при большом объёме объектов на доске. Команда выпускает обновления несколько раз в месяц, а о новинках можно узнать в <a href="https://t.me/moyadoska">Telegram-канале</a> сервиса. Например, в недавнем апдейте появилась возможность превратить фрейм в таблицу или тетрадь за пару кликов, а еще задать нужное число столбцов, колонок, толщину границ и цвет.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/0f1a8489-ffe3-4003-8ecc-09d25bbba3b3.png" alt="" /></figure><p><b>Из главных функций:</b></p><ul><li>Понятный интерфейс</li><li>Совместная работа в реальном времени</li><li>Привычные инструменты: фигуры, стрелки, стикеры, текст, загрузка файлов, маркер, карандаш</li><li>Обрезка фото прямо на доске, воспроизведение аудио, поддержка PDF</li><li>Гибкое управление доступом</li><li>Возможность повторного использования шаблонов</li><li>Поддержка фреймов и создание логичных пространств для разных задач</li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/21a6ecbd-a6b5-40c9-ae19-71a85b919c46.png" alt="" /></figure><h3>Переезд на сервис</h3><p>«МояДоска» интегрируется в процессы на разных этапах, упрощая жизнь команде. Например, сама команда сервиса перешла с Miro на свою доску для стратегического планирования. С помощью стикеров и стрелок они построили дерево решений, чтобы лучше расставить приоритеты. А одно маркетинговое агентство перевело все документы и сессии планирования на доску, отказавшись от Google Docs и таблиц. Это ускорило принятие решений: сотрудники работали с данными в одном формате, точно собрались в одном кабинете перед маркерной доской.</p><h2>2. METEOR</h2><p><a href="https://u-meteor.ru">METEOR</a> — инструмент управления проектами. Это трекер задач с дашбордами, досками канбан, диаграммами Ганта и API, который работает в виде веб-приложения как в облаке, так и на своих серверах. Продукт создавался как универсальный центр управления задачами: он объединяет в себе все — от разработки и тестирования до маркетинга и поддержки. Сейчас его используют более 250 команд и свыше 2000 пользователей ежедневно.</p><h3>Что под капотом</h3><p>В основе — стек Ruby on Rails, React и TypeScript, PostgreSQL и Redis, плюс современная инфраструктура на Docker и Kubernetes.</p><p>Система разбита на микросервисы — за фоновую обработку, нотификации и работу с файлами отвечает отдельный функционал. Авторизация построена через OAuth 2.0 (Google, Yandex), а для аналитики используется Posthog и ELK-стек. Мониторинг реализован на Prometheus + Grafana. Обновления выходят каждую неделю, а обратная связь приходит разработчикам METEOR через Telegram-бот.</p><p><b>Вот главные функции:</b></p><ul><li>Гибкие доски задач (Kanban, Scrum) — 6 видов.</li><li>Списки задач с группировками и иерархией.</li><li>Автоматические отчеты (ежедневные/еженедельные сводки).</li><li>Умные напоминания (Telegram-бот, email).</li><li>Глубокая аналитика (время выполнения задач, загрузка команды).</li><li>Потоковая автоматизация процессов</li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/60e0eb0a-c1b1-473b-b343-1c4fb1b3fbd6.png" alt="" /><figcaption>Упрощенная схема сущностей системы</figcaption></figure><p>METEOR — мощный инструмент для автоматизации процессов, с триггерами, серверными функциями и ИИ-аналитикой. Он позволяет гибко настраивать сложные операции.</p><p>Все данные анализируются, и внутри самого сервиса можно понять, как работает команда: кто загружен, сколько времени уходит на задачи, где стопперы в процессе.</p><p>Разработчики используют METEOR для линковки задач с pull-requests и контроля бэклога. Менеджеры получают отчеты автоматически и не тратят часы, чтобы собрать всю информацию вручную. QA ведут тест-кейсы и баги в удобных досках, а DevOps отслеживают инциденты и шаги деплоя. Даже HR подключаются — через систему проходят кандидаты и стажеры.</p><h3>Переезд на сервис</h3><p>После внедрения METEOR команды замечают, что продуктивность их работы сильно повышается:</p><ul><li>скорость выполнения задач увеличивается в среднем на 25% — благодаря автоматическим напоминаниям и чётким процессам;</li><li>количество потерянных задач снижается на 70% — исчезают хаотичные чаты и забытые письма;</li><li>на составление отчетов и сбор метрик уходит не 5 часов, а всего 30 минут в неделю;</li><li>а экономия времени — около 75 часов в месяц на команду из 10 человек.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/f3f086f0-5846-4a35-adba-dc4fbe17f1c0.png" alt="" /><figcaption>Карточка задачи</figcaption></figure><p>METEOR не просто помогает контролировать задачи — он становится частью операционного «ядра» команды, избавляя от хаоса, ускоряя работу и делая все немного спокойнее.</p><h2>3. Gitlife</h2><p><a href="https://gitlife.ru">GitLife</a> — это универсальная платформа для хостинга репозиториев и построения полного DevOps-процесса внутри компании. Разработана с прицелом на закрытые контуры, импортозамещение и гибкость — подходит как для современных Git-проектов, так и для инфраструктур, где все еще используется SVN.</p><p>Помимо самого Gitlife, разработчики делают Gitlife AI, в котором есть доступ к топовым ИИ-моделям и инструментам, чтобы разрабатывать ИИ-решения.</p><h3>Что под капотом</h3><p>Внутри Gitlife собраны модули для:</p><ul><li>Кода — репозитории, ветвление.</li><li>Задач — бэклоги, спринты, дашборды.</li><li>Документации — совместное редактирование документов, управление правами.</li><li>Аналитики — карты потока ценности, качество кода, метрики по инженерам.</li><li>Пайплайны — модуль «Конвейер» управляет сборками и CI/CD.</li></ul><p>Gitlife используется ИТ-отделами и R&amp;D-подразделениями в компаниях с высокими требованиями к информационной безопасности. Подходит как для небольших команд, так и для распределённых корпораций с десятками проектов.</p><p>Что решает:</p><ul><li>Безопасный и полностью локальный хостинг исходного кода (Git + SVN)</li><li>Управление задачами и CI/CD в одном месте</li><li>Централизованный доступ, права, аудиты и история изменений</li><li>Полная поддержка DevOps-процессов на российском ПО</li><li>Альтернатива GitHub, GitLab и Bitbucket в условиях ограниченного доступа и санкционных рисков</li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/bb3f815f-ce07-4c9d-9243-7ace4b14d5ba.png" alt="" /><figcaption>Создание пайплайна</figcaption></figure><h3>Переезд на сервис</h3><p>Инструмент подходит практически всем командам — от инди-разработчиков до крупных проектов с множеством ролей. Например, гейм-девелопер может разрабатывать персональный проект и хранить код бесплатно, стартап — разрабатывать MVP, а крупный бизнес — управлять большими командами и проектами максимально безопасно.</p><h2>4. Cerebro</h2><p><a href="https://cerebrohq.com/ru/">Cerebro</a> — профессиональная система для совместной работы и управления проектами. Она помогает ставить задачи, планировать этапы, следить за выполнением, обмениваться файлами и комментировать их прямо в системе. Особенно полезна для команд, которые делают VFX, 3D, анимацию или дизайн — но при этом легко адаптируется и под другие команды.</p><p>Платформа охватывает полный цикл — от первых идей и планирования до комментирования финальных шотов (отдельных сцен или кадров в видео/анимации) и соблюдения дедлайнов. Такой подход помогает команде ускорить работу на 20%, сократить время на правки и держать весь процесс под контролем — от начала до сдачи проекта.</p><p>Cerebro подходит для команд от 1 до 1000+ человек с задачами на проекте от 1 до 10000+. Сервис работает с 2009 года, сейчас им пользуются более 400 команд в России и СНГ.</p><h3>Что под капотом</h3><p>Cerebro поддерживает десктоп (Windows, Mac и Linux), веб-версию и мобильное приложение, локальное, облачное и гибридное развертывание. Инструмент построен на клиент-серверной архитектуре — она гибкая, поэтому можно настраивать конфиги исходя из потребностей бизнеса.</p><p>Из технологий:</p><ul><li><b>Backend:</b> C, C++, Python, SQL</li><li><b>Frontend:</b> JS, TypeScript, ReactJS, Qt, PyQt</li><li><b>Мобильные клиенты:</b> React Native</li><li><b>БД: </b>PostgreSQL с проприетарными расширениями + SQLite</li><li><b>Файловое хранилище:</b> Cargador</li><li><b>Плагины: </b>Tentaculo (встраивается в производственные программы)</li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/d51c709f-2b9c-4e0b-95c0-2b78d61f5c1e.png" alt="" /></figure><p>Cerebro покрывает весь пайплайн — от идеи до финала. Вот основные возможности сервиса:</p><ul><li>Множественные уровни вложенности задач — подходит для сложных иерархий продакшена</li><li>Планирование с помощью диаграммы Ганта и специального инструмента «План»</li><li>Канбан-доска для визуального контроля задач</li><li>Инструмент «Моё пространство» — для персонализированной фильтрации и отбора задач</li><li>Уровни доступа и ролевое управление</li><li>Расширенная статистика по проектам, командам, сотрудникам</li><li>Совместная работа над большими файлами (видео, изображения, 3D) — Mirada позволяет комментировать, делать подрисовки, оставлять голосовые заметки</li><li>Интеграция с пакетами Adobe, Autodesk и мессенджерами, возможность встраивать в любые пайплайны</li><li>Удобное подключение фрилансеров</li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/5411ad9d-a74b-46ed-9774-61d60ff69885.png" alt="" /><figcaption>Навигатор и форум</figcaption></figure><h3>Переезд на сервис</h3><p>Обычно внедрение начинается еще на этапе препродакшена — во время разработки концепции и четкого плана действий. Затем система сопровождает проект на всех стадиях, вплоть до постпродакшена (финального тестирования и релиза), где она закрывает 80-100% задач. Cerebro позволяет собирать всё в одном месте: задачи, правки, сроки, бюджеты, загрузку сотрудников и статус проекта в целом.</p><p>После переезда снимается много рутинных задач: больше не нужно вручную назначать исполнителей, комментировать медиаконтент, передавать файлы между программами и так далее. В среднем проекты выполняются на 20% быстрее, без потери качества. В больших студиях объем выпускаемых шотов может вырасти до 20+ тысяч — это уже работает у других клиентов, среди которых СберМаркетинг, Sinners, Black Point и другие. Cerebro также помогает переехать с других такс-трекеров и систем для управления проектами.</p><h2>5. Replit Teams</h2><p><a href="https://replit.com/teams">Replit Teams</a> — это платформа для совместной разработки в реальном времени. По сути, это интегрированная IDE + git-репозиторий + система управления задачами — и все доступно через браузер. Подходит как для командной работы в стартапах, так и для образовательных проектов, хакатонов и небольших продуктовых команд.</p><p>А главная фишка — встроенный ИИ, к которому можно обращаться прямо во время написания кода. Инструмент разработан с акцентом на простоту входа, командную работу и быстрое прототипирование. Поддерживает более 50 языков программирования и позволяет запускать полноценные веб-приложения в облаке.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-26/70b00e25-9ec7-4858-911c-b2d7a181104e.png" alt="" /></figure><h3>Что под капотом</h3><p>Внутри Replit Teams есть интерфейсы для:</p><ul><li>Кода — редактор с автокомплитом, подсветкой синтаксиса, терминалом и интеграцией с Git.</li><li>Задач — встроенный таск-менеджер с распределением задач по участникам.</li><li>Общения — встроенные комментарии в коде, возможность ревью и обсуждений.</li><li>CI/DevOps — запуск и отладка приложений без настройки окружения.</li><li>Доступа — гибкие роли, приглашения по ссылке, настройки приватности.</li></ul><h3>Переезд на сервис</h3><p>Replit Teams позволяет моментально начать работу: не нужно ставить зависимости, конфигурировать CI или закупать сервера. Подходит как для быстрой прокачки навыков, так и для реальных командных проектов в продакшене.</p><p>Сейчас инструмент активно используют в стартапах — для быстрого MVP, парного программирования, хакатонов и удаленных командах — как замена локальным IDE и конфигурациям.</p><p>Рассказывайте в комментариях, какими сервисами пользуетесь вы.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как защитить pet-проект почти бесплатно, но эффективно</title>
      <link>https://tproger.ru/articles/kak-zashhitit-pet-proekt-pochti-besplatno--no-effektivno</link>
      <comments>https://tproger.ru/articles/kak-zashhitit-pet-proekt-pochti-besplatno--no-effektivno?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Светлана Гринь]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-zashhitit-pet-proekt-pochti-besplatno--no-effektivno</guid>
      <description><![CDATA[<p>Как эффективно защитить pet-проект: управление секретами, логирование, бэкапы, локальные туннели и другие базовые правила безопасности
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-zashhitit-pet-proekt-pochti-besplatno--no-effektivno">Как защитить pet-проект почти бесплатно, но эффективно</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Slack]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[ICO]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 17 Jun 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Pet-проекты помогают развивать профессиональные навыки и воплощать собственные идеи, но не стоит забывать об их информационной безопасности. Делать сервис и не думать об инфобезе — всё равно что строить дом без фундамента: выглядит добротно, но всё может рухнуть в самый неожиданный момент. Разберём, как недорого и эффективно защитить проект.</p><h2>Что такое pet-проект и зачем его защищать</h2><p><b>Pet-проект</b> (от английского pet — «домашний питомец») — тренировочный проект, который разработчик создаёт в свободное время по собственному желанию. Обычно их делают, чтобы освоить новую технологию, пополнить портфолио или поучаствовать в хакатонах.</p><p>Такие проекты часто воспринимают как что-то «несерьёзное», но пренебрежение информационной безопасностью может привести к неприятным последствиям. Злоумышленники используют уязвимости pet-проектов для получения доступа к ресурсам разработчика, кражи данных и будущих атак на более крупные цели.</p><p>Кроме того, защита pet-проекта — важный навык, который высоко ценится работодателями.</p><p>Рассмотрим основные правила кибербезопасности, которые нужно учитывать при работе над pet-проектом.</p><h2>Безопасное управление секретами</h2><p><b>Секреты</b> — это чувствительные данные, такие как пароли, токены доступа, ключи API, SSH-ключи, сертификаты и другие данные, которые обеспечивают аутентификацию и шифрование. Если добавить секреты в код, злоумышленники могут получить полный контроль над вашей инфраструктурой.</p><h3>Какие правила нужно соблюдать</h3><ul><li>Не храните секреты в коде. Храните секреты в отдельных файлах env. и добавьте эти файлы в .gitignore, чтобы они не попадали в репозиторий.</li><li>Придерживайтесь принципа минимальных привилегий. Каждый сервис должен иметь только те права, которые необходимы для выполнения своих задач.</li><li>Регулярно обновляйте секреты. Меняйте токены и пароли периодически, особенно после обнаружения утечек или изменений в проекте.</li><li>Используйте менеджеры секретов. Популярные сервисы: Doppler, HashiCorp Vault, AWS Secrets Manager, 1Password Developer Tools.</li><li>Мониторьте утечки. Можно использовать такие инструменты, как GitGuardian, TruffleHog, Gitleaks.</li><li>Шифруйте секреты. Используйте библиотеки типа cryptography в Python и подключайте шифрование на уровне операционной системы.</li></ul><h2>Безопасность CI/CD</h2><p><b>Пайплайн CI/CD</b> (Continuous Integration / Continuous Delivery) — автоматизированный процесс сборки, тестирования и развёртывания приложений. Он помогает автоматически интегрировать код и деплоить его на различные среды.</p><p>Если злоумышленник получит доступ к пайплайну, он может внедрить вредоносный код в ваше приложение, остановить весь процесс разработки или развёртывания, украсть данные пользователей и т.д.</p><h3>Способы защиты пайплайна</h3><ul><li>Моделируйте угрозы. Оцените, какие угрозы наиболее вероятны на каждом этапе пайплайна: от коммита кода до деплоя на сервер.</li><li>Проверяйте зафиксированный код. Используйте статический анализ кода для автоматического поиска уязвимостей.</li><li>Защитите Git-репозитории. Настройте двухфакторную аутентификацию (2FA), ограничьте доступ к репозиториям, используйте обязательную проверку пул-реквестов двумя разработчиками.</li><li>Изолируйте пайплайн. Не запускайте его на том же сервере, где крутится ваше продакшн-приложение.</li></ul><p>Дополнительно стоит шифровать секреты в пайплайне и минимизировать их передачу между этапами сборки.</p><h2>Сервисы мониторинга и логирования</h2><p><b>Логирование</b> — запись событий, ошибок и других данных о работе приложения в специальные файлы или базы данных. По сути, это дневник.</p><p><b>Мониторинг</b> — наблюдение за состоянием приложения, инфраструктуры или сервисов в реальном времени для своевременного выявления падения сервера, роста ошибок и других проблем.</p><p>Анализ логов помогает выявлять баги, попытки несанкционированного доступа, долгие запросы, ошибки базы данных. Мониторинг позволяет мгновенно реагировать на сбои, а также с его помощью вы узнаете, хватает ли приложению серверных мощностей.</p><h3>Примеры популярных сервисов</h3><p><a href="https://logtail.ru/">Logtail </a>— простой инструмент для сбора и анализа логов, есть бесплатный тариф.</p><p><a href="https://github.com/paper-trail-gem/paper_trail">Papertrail</a> — удобный сервис для быстрого поиска по логам, бесплатный план для небольших проектов (10 Мб в день).</p><p><a href="https://docs.sentry.io/">Sentry</a> —  хорош для отслеживания ошибок в приложениях на клиентской стороне и сервере.</p><p><a href="https://betterstack.com/">BetterStack</a> — мониторинг доступности сайтов и серверов с бесплатными уведомлениями об инцидентах по почте, через SMS и Slack.</p><p><a href="https://grafana.com/pricing/">Grafana Cloud Free</a> — мониторинг с красивыми дашбордами, бесплатный лимит ресурсов до 10 тыс. серий данных, 50 ГБ трафика.</p><p><a href="https://prometheus.io/">Prometheus</a> и <a href="https://grafana.com/">Grafana</a> — Prometheus собирает метрики, Grafana их визуализирует.</p><p><a href="https://uptimerobot.com/">UptimeRobot</a> — проверка доступности вашего проекта каждые 5 минут, бесплатный тариф на 50 мониторингов.</p><h2>Бэкап и восстановление данных</h2><p><b>Бэкап</b> — это создание резервной копии данных, которую можно использовать для восстановления в случае утраты или повреждения оригиналов. Может показаться, что для pet-проекта это излишне, однако от случайных удалений данных, взломов серверов, утечек данных никто не застрахован. А ещё можно откатиться к рабочей версии, если будут ошибки в коде и деплойменте.</p><h3>Как сделать бэкап пошагово</h3><ol><li>Определите данные, которые необходимо бэкапить: какие данные критически важны, какие можно восстановить вручную.</li><li>Выберите место хранения: облачные сервисы, собственные серверы, внешние носители, Git-репозиторий.</li><li>Выберите тип бэкапа: при полном копируются все данные целиком, при инкрементном — изменения с момента последнего копирования, при дифференциальном — изменения с момента последнего полного бэкапа.</li><li>Настройте автоматизацию, чтобы не забывать делать бэкапы вручную. Можно использовать скрипты, планировщики задач или бэкап-сервисы.</li><li>Проверьте бэкап. Проведите тестовое восстановление.</li><li>Определите частоту бэкапа. Например, можно проводить полный бэкап раз в неделю и инкрементные бэкапы каждый день.</li><li>Защитите чувствительные данные.</li></ol><h2>Локальные туннели</h2><p>При разработке pet-проекта может возникнуть необходимость показать результат внешнему миру. Кроме того, многие внешние сервисы, такие как платёжные системы и мессенджеры, тоже требуют «боевые» URL для отправки запросов. Однако открывать порты на своём устройстве напрямую небезопасно. Локальные туннели создают временный внешний URL-адрес без развертывания на реальном сервере.</p><p>Когда вы запускаете туннель через специальный инструмент, он:</p><ul><li>устанавливает зашифрованное соединение между вашим компьютером и своим публичным сервером;</li><li>создаёт внешний адрес;</li><li>пересылает все запросы, которые приходят на этот адрес, вашему локальному приложению.</li></ul><p>Трафик при этом шифруется и проходит через защищённый канал.</p><h3>Примеры инструментов</h3><p><a href="https://ngrok.com/?ref=gobigger">Ngrok </a>— самый известный инструмент для быстрого создания туннелей. Есть бесплатный тариф.</p><p>Порты от<b> VSCode</b> — отличное решение для пользователей Visual Studio Code, удобно для быстрой демонстрации.</p><p><a href="https://dev.vk.com/ru/libraries/tunnel">VK Tunnel</a> — российская альтернатива, подходит для работы через VK Cloud.</p><p><b>Tuna</b> и <a href="https://xtunnel.ru/">xTunnel </a>— простые в использовании решения, есть бесплатные тарифы.</p><h2>Чек-лист по инфобезу для тех, кто делает pet-проект</h2><ol><li>Регулярно обновляйте зависимости. Используйте автоматические инструменты, например, Dependabot или npm audit.</li><li>Настройте базовые HTTP-заголовки безопасности. Добавьте заголовки Content-Security-Policy, X-Frame-Options, Strict-Transport-Security, чтобы минимизировать риск XSS, Clickjacking и других атак.</li><li>Используйте бесплатные SSL-сертификаты. Подключите HTTPS через бесплатные сервисы, например, Let's Encrypt.</li><li>Очищайте и валидируйте ввод данных. Фильтрация и валидация данных защитит от SQL-инъекций и XSS.</li><li>Создайте отдельные учётные записи для разных сервисов. Не используйте одну и ту же учётную запись везде.</li><li>Минимизируйте доступы к базе данных. Если сервису нужно только читать, не давайте права на запись или удаление.</li><li>Используйте бесплатные инструменты для сканирования уязвимостей. Проверьте код через такие сканеры, как SonarQube Community Edition, Snyk, OWASP ZAP.</li><li>Делайте резервные копии. Настройте автоматические бэкапы базы данных и важных файлов.</li><li>Не храните секреты в коде. Используйте .env файлы и убедитесь, что они добавлены в .gitignore.</li><li>Включите двухфакторную аутентификацию (2FA). На всех сервисах, где это возможно, включите 2FA для дополнительной защиты.<br /></li></ol><p>А больше про разработку и все, что с ней связано, в нашем<a href="https://t.me/tproger_web"> тг-канале</a>!</p>]]></content:encoded>
    </item>
    <item>
      <title>6 советов, которые реально прокачают навыки работы с Docker</title>
      <link>https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker</link>
      <comments>https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker</guid>
      <description><![CDATA[<p>Шесть практик, которые прокачают навыки работы с Docker: минимизация образов, ручная сборка, sandbox-подход, нестандартная контейнеризация и отказ от Docker CLI.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker">6 советов, которые реально прокачают навыки работы с Docker</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Безопасный код]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 03 Jun 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Docker давно стал стандартом в разработке: контейнеры запускают фронтенд, бэкенд, базы данных, пайплайны и тесты. Но большинство разработчиков использует его как ещё один способ запустить проект, не вдаваясь в детали. А ведь за docker build и docker run скрывается целая экосистема. Сегодня рассмотрим шесть практик, которые реально прокачают навыки работы с Docker.</p><h2>Сделайте минимальный Docker-образ, не ломая прод</h2><p>Большинство Docker-образов в проектах содержат больше данных, зависимостей и инструментов, чем требуется для работы приложения. Это приводит к избыточному объёму, медленной сборке и повышенным рискам безопасности. Умение собирать минимальный образ — один из базовых навыков работы с Docker, который напрямую влияет на стабильность и скорость развёртывания.</p><p>Начать стоит с multi-stage сборки: на первом этапе — установка зависимостей и сборка, на втором — только нужные артефакты. Это позволяет исключить лишние файлы и утилиты из финального образа. В качестве базового слоя лучше использовать alpine, distroless или даже scratch, если вы точно понимаете, какие бинарники и библиотеки требуются приложению.</p><p>Хорошая практика — использовать утилиты docker history и dive для анализа того, какие файлы и слои попали в образ. Если размер превышает ожидания, стоит проверить, не остались ли во внутреннем слое временные файлы, dev-зависимости или директории кэша.</p><p>Полезный навык — намеренно уменьшить образ до минимума и посмотреть, на каком этапе он перестанет работать. Это позволяет выявить неочевидные зависимости, которые могут мешать переносимости и воспроизводимости. Например, отсутствие системной библиотеки, необходимость в переменных окружения или некорректная настройка путей.</p><p>Результат — меньше уязвимостей, быстрая сборка и уверенность в том, что образ содержит только то, что действительно нужно для запуска в проде.</p><h2>Попробуйте контейнизировать то, что изначально не предназначалось для этого</h2><p>Работа с Docker чаще всего начинается с бэкенд-приложений, сервисов и утилит, которые изначально проектировались как самостоятельные процессы. Они хорошо вписываются в модель контейнеров: запускаются из CLI, работают в изоляции, не требуют доступа к UI или железу. Но стоит выйти за эти рамки — начинаются сложности.</p><p>Попробуйте упаковать в контейнер любую графическую программу. Технически это возможно: X11 или Wayland можно пробросить через сокет, устройства передать через volume, окружение прописать вручную. Но на практике вы столкнётесь с рядом ограничений: отсутствие звука, глюки интерфейса, ошибки в драйверах, проблемы с доступом к GPU или нестабильное поведение при рендеринге.</p><p>В этом упражнении ценен не сам результат, а путь. Вы увидите, как устроена изоляция в Docker, почему графические приложения не работают «из коробки» и где находятся реальные границы контейнеризации. Контейнер — это не виртуальная машина, у него нет полноценного init, драйверов или прямого доступа к оборудованию. Многие фичи, которые работают локально, в контейнере требуют дополнительных танцев с бубном.</p><p>Такая практика особенно полезна, если вы имеете дело с devtool'ами, UI-обвязкой или тестированием в headless-средах. Понимание, что именно ломается и почему, позволяет более точно проектировать окружение и избегать архитектурных ловушек в будущем.</p><h2>Соберите базовый образ с нуля</h2><p>Когда разработчик пишет FROM node или FROM ubuntu, он автоматически получает десятки слоёв, библиотек и утилит, о которых, скорее всего, не задумывается. Это удобно, но не даёт понимания, как вообще работает контейнер на низком уровне. Попробуем разобраться.</p><p>Укажите в Dockerfile FROM scratch — и не увидите ни bash, ни glibc, ни стандартных каталогов. Вам придётся самостоятельно добавить всё необходимое: бинарник, зависимости, библиотеки, конфигурацию. Если пишете на Go, задача упрощается: можно собрать статически слинкованный исполняемый файл и скопировать его в образ. Для других языков, особенно тех, что зависят от динамических библиотек или рантайма (например, Python или Node.js), придётся вручную подтягивать зависимости.</p><p>Такая практика заставляет иначе взглянуть на структуру контейнера. Вы начнёте понимать, чем отличается CMD от ENTRYPOINT, зачем в некоторых образах используется sh -c, и что произойдёт, если не задать WORKDIR. Вы столкнётесь с ошибками «no such file or directory» даже тогда, когда файл вроде бы существует — потому что в контейнере не хватает нужной libc.</p><p>Отдельный повод для размышлений — Alpine. Его любят за размер и минимализм, но он использует musl вместо glibc, и не всё с ним работает корректно. В процессе сборки на практике увидите, почему иногда проще остаться на Debian Slim, чем пытаться адаптировать всё под Alpine.</p><p>Этот эксперимент не нужен для продакшена — он нужен вам, как разработчику. Прокачивает понимание, как устроен Docker, что по-настоящему важно приложению для запуска, и какие зависимости вы добавляете бессознательно.</p><h2>Делайте разные варианты Docker-образов</h2><p>Хороший Dockerfile — тот, который гибко адаптируется под разные сценарии: продакшен, отладку, тестирование, запуск на ARM или x86. Если вы умеете собирать только один универсальный образ — вы ещё не освоили Docker по-настоящему.</p><p>Попробуйте собрать сразу несколько версий своего образа: на Debian и на Alpine, с минимальным размером и с полным набором утилит, для amd64 и arm64. Добавьте build-аргументы (ARG) — они позволяют передавать параметры на этапе сборки: выбрать базовый образ, включить или выключить зависимости, задать переменные окружения. Используйте RUN if или шаблонизацию через Dockerfile.template, чтобы варьировать поведение без дублирования кода.</p><p>Вот типичный пример: в режиме отладки вам нужен образ с установленным curl, vim, доступом к логам и расширенной трассировкой. А в продакшене — максимально облегчённый, с удалёнными временными файлами, сжатым слоем и только необходимыми бинарниками. Один и тот же проект — два разных образа. Добавьте сюда ещё поддержку разных архитектур (multi-arch build через --platform), и вы выйдете на уровень CI/CD, где из одного пайплайна собирается три-четыре артефакта.</p><p>Такая практика решает сразу несколько задач. Во-первых, помогает лучше понять, как влияет каждый шаг сборки на финальный размер и поведение контейнера. Во-вторых, избавляет от лишних костылей, когда на проде всё работает, а на локалке — нет. И главное — прокачивает навык автоматизации. Один Dockerfile, разные образы, ноль копипасты.</p><h2>Поиграйте в «А что если запустить чужой (небезопасный) код?»</h2><p>Представьте задачу: вам нужно запустить код, который написал кто-то другой. Вы не уверены, что он безопасен. Это может быть скомпилированный бинарник, питоновский скрипт или даже npm-зависимость с подозрительным хуком. Где-то в коде может быть rm -rf /, попытка выйти за пределы контейнера, установить рутовый доступ или просто майнить крипту. И теперь этот код запускается на вашей машине — внутри Docker.</p><p>Кажется, контейнер защитит? Не всегда.</p><p>Docker не является полноценной песочницей. По умолчанию контейнер может обращаться к файловой системе, к ядру и к хостовым ресурсам — особенно если вы запускаете его                 с --privileged или без ограничения пользователя. Даже docker run -it ubuntu работает от root внутри контейнера, что уже создаёт риски.</p><p>Если вы действительно хотите запустить небезопасный код, нужно жёстко ограничить контейнер:</p><ul><li>отключить права root (через --user);</li></ul><ul><li>запретить модификацию файловой системы (--read-only);</li></ul><ul><li>отобрать лишние возможности ядра (--cap-drop=ALL);</li></ul><ul><li>включить seccomp-профиль, AppArmor или SELinux;</li></ul><ul><li>отключить доступ к сети или монтированию сокетов.</li></ul><p>Список можно продолжать. Главное — понять, что Docker по умолчанию не даёт изоляции на уровне VM. Если вы работаете с кодом, которому не доверяете, этого может быть недостаточно.</p><p>Это упражнение учит думать о безопасности как о процессе. И особенно важно пройти его, если вы когда-нибудь планируете запускать user-generated code: плагины, кастомные скрипты, пайплайны CI. Только на практике становится ясно, где заканчиваются возможности Docker и начинаются границы настоящей песочницы.</p><h2>Работайте без Docker CLI</h2><p>Если убрать Docker CLI — что останется? Больше, чем кажется.</p><p>Docker ― это не единый монолит. Он работает поверх набора инструментов и стандартов: buildkit, containerd, спецификация OCI. CLI просто прячет эту архитектуру за удобными командами: docker build, docker run, docker push. Но всё, что кажется магией, можно повторить вручную.</p><p>Попробуйте отказаться от docker как от инструмента. Сконфигурируйте buildctl напрямую и соберите образ без Dockerfile. Или вообще создайте его вручную: сформируйте структуру, описания слоёв, метаданные, манифест. Прочитайте спецификацию <a href="https://github.com/opencontainers/image-spec">OCI Image Format </a>и идите по ее шагам. Понадобится tar, sha256sum, немного JSON — и внимательность.</p><p>Образ собрали? Отлично. Теперь отправьте его в реестр без docker push. Используйте oras, skopeo или curl с аутентификацией и ручной отправкой слоёв по HTTP API. Узнаете много нового: как работает digest, что такое manifest list и зачем нужны media types.</p><p>Наконец, запустите контейнер без docker run. Через ctr, runc или даже напрямую с помощью systemd-nspawn.</p><p>Зачем это нужно? Чтобы воспринимать Docker глубже. Так, вы понимаете, как устроен pipeline сборки и запуск контейнера, и точнее управляете им. Особенно это важно в продакшн-среде: когда образы не собираются, push падает, реестр отвечает 403, а пайплайн горит.</p><p>Ты точно программист, если читаешь это! Больше мемов, инсайтов и боли кодеров <a href="https://t.me/+ajgz7pDecB4xZTI6">тут</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сломал ногу — выучил Python: как ИИ помог экс-консультанту стать программистом за 100 дней</title>
      <link>https://tproger.ru/news/slomal-nogu---vyuchil-python--kak-ii-pomog-eks-konsultantu-stat-programmistom-za-100-dnej</link>
      <comments>https://tproger.ru/news/slomal-nogu---vyuchil-python--kak-ii-pomog-eks-konsultantu-stat-programmistom-za-100-dnej?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/slomal-nogu---vyuchil-python--kak-ii-pomog-eks-konsultantu-stat-programmistom-za-100-dnej</guid>
      <description><![CDATA[<p>Экс-консультант стал программистом за 100 дней с помощью ChatGPT и Python — собрал портфолио, прошел собеседование и получил работу без курсов и Leetcode</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/slomal-nogu---vyuchil-python--kak-ii-pomog-eks-konsultantu-stat-programmistom-za-100-dnej">Сломал ногу — выучил Python: как ИИ помог экс-консультанту стать программистом за 100 дней</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 02 Jun 2025 18:09:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Эрик Леннрот, бывший консультант в Big Four, <a href="https://eriklonnroth.com/100-days/">стал программистом</a> всего за 100 дней — благодаря больничному, упорству и ChatGPT.</p><p>Все началось, когда 38-летний Эрик сломал лодыжку во время пробежки. Лежа дома, он увидел в соцсетях истории о том, как люди запускали SaaS-проекты за выходные с помощью ИИ. Это вдохновило его на третью попытку освоить программирование.</p><h2>Учеба без бюджета — только ИИ и бесплатные курсы</h2><p>Эрик решил не тратить ни копейки на курсы. Он выбрал Python как основной язык и прошел CS50 от Гарварда — сначала курс по Python, потом по веб-разработке.</p><p>С ИИ он работал как с личным наставником: писал псевдокод, просил ChatGPT раскритиковать его, затем вручную набирал код. Синтаксис — по запросу. Такой подход позволил быстрее понять концепции, а не просто запомнить команды.</p><p>Свой первый проект он сделал по мотивам Wordle — игру на угадывание слов он реализовал на Python под названием PyWordle.</p><p>Затем собрал полноценное веб-приложение Make My Meal Plan: генерация рецептов, списки покупок, TailwindCSS, Django, PostgreSQL, CI/CD и даже тестирование через Playwright — все своими руками за 150 часов. Проект включал 25 000 строк кода.</p><h2>Работа после 100 дней</h2><p>Через 3 месяца обучения он получил оффер. Без Leetcode, без алгоритмических задач — только благодаря портфолио. Его взяли на испытательный срок в консалтинговую компанию в Лондоне, чтобы он заменил Excel и устаревшие тулзы на автоматизированные пайплайны.</p><p>Эрик честно рассказал, что научился программировать за пару месяцев и активно использовал ИИ — и все равно его приняли.</p><p>По его словам, весь путь стоил $120 — подписки на Claude Pro и Cursor. Все остальное — бесплатные курсы и открытые материалы. Недавно он прошел испытательный срок, получил повышение и теперь работает с геоданными и статистикой, используя pandas и ArcGIS. Параллельно пишет Django-приложение для анализа населения и доходов в Великобритании.</p><h2>«Точно вовремя» вместо «на всякий случай»</h2><p>Эрик считает, что его история — отражение новой реальности: вместо долгих программ и формального образования — самостоятельное обучение под задачи, с фокусом на инициативу и реальные результаты. ИИ в этом — не костыль, а катализатор.</p>]]></content:encoded>
    </item>
    <item>
      <title>Serverless vs Kubernetes: самое подробное руководство для разработчиков</title>
      <link>https://tproger.ru/articles/serverless-vs-kubernetes--samoe-podrobnoe-rukovodstvo-dlya-razrabotchikov</link>
      <comments>https://tproger.ru/articles/serverless-vs-kubernetes--samoe-podrobnoe-rukovodstvo-dlya-razrabotchikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/serverless-vs-kubernetes--samoe-podrobnoe-rukovodstvo-dlya-razrabotchikov</guid>
      <description><![CDATA[<p>Подробное сравнение Serverless и Kubernetes: архитектура, масштабирование, стоимость, безопасность. Какой подход выбрать для MVP, high-load и гибридных приложений?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/serverless-vs-kubernetes--samoe-podrobnoe-rukovodstvo-dlya-razrabotchikov">Serverless vs Kubernetes: самое подробное руководство для разработчиков</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DevSecOps]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 28 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Что выбрать: мощную, но сложную инфраструктуру Kubernetes или лёгкий в старте Serverless? Вместе с <a href="https://solvery.io/ru/mentor/ikryvanos?utm_source=article&amp;utm_medium=partner&amp;utm_term=tproger&amp;utm_content=serverless_kubernetes&amp;utm_campaign=ihar_kryvanos">Игорем Кривоносом</a>, Tech Lead в Mapbox и ментором <a href="https://solvery.io/?utm_source=article&amp;utm_medium=partner&amp;utm_term=tproger&amp;utm_content=serverless_kubernetes&amp;utm_campaign=main_page">Solvery,</a> разобрали оба подхода — от архитектуры до стоимости — и собрали главное, что нужно знать разработчику, выбирающему стек для продакшена.</p><h2>В чем отличия Serverless от Kubernetes?</h2><p>В последние годы разработчики всё чаще стоят перед выбором: использовать Kubernetes или Serverless для запуска и масштабирования приложений. Особенно это актуально для небольших команд и стартапов, которым важно быстро протестировать гипотезу, не тратя ресурсы на инфраструктуру. Оба подхода решают схожие задачи — деплой, масштабирование, устойчивость — но делают это принципиально по-разному.</p><h3>Какой подход лучше подходит под разные стадии продукта?</h3><p>Kubernetes — это мощная платформа для оркестрации контейнеров, предоставляющая максимальный контроль над инфраструктурой. Но именно за эту гибкость приходится платить: и в буквальном смысле, и в виде технической сложности. Kubernetes требует серьёзной подготовки, как от DevOps-специалиста, так и от команды в целом.</p><blockquote>У Kubernetes высокий порог входа. Чтобы начать его использовать, нужно правильно его засетапить. И, как правило, приходится конфигурировать то, что на первых этапах проекта не нужно или не обязательно. А также стоит вопрос цены — на старте Kubernetes будет стоить дороже.</blockquote><p>Serverless, наоборот, создан для быстрого старта. Вы пишете код, загружаете его в облако — и он исполняется по запросу. Всё остальное — масштабирование, устойчивость, мониторинг — берёт на себя провайдер. Такой подход идеален на ранних стадиях, когда важно выпустить MVP как можно быстрее.</p><blockquote>Serverless имеет модель pay-as-you-go — вы платите за использование, что очень выгодно на старте, когда необходимо получить первых платящих клиентов при минимуме затрат.</blockquote><h3>В чём принципиальное отличие парадигм?</h3><p>Главное различие между подходами — уровень абстракции и контроля. Kubernetes предоставляет разработчику и администратору максимум свободы: вы сами управляете кластерами, контейнерами, ingress-контроллерами, настройками автоскейлинга. Это даёт гибкость — но требует времени и экспертизы.</p><p>Serverless же предлагает максимальную абстракцию: вы не управляете серверами, не заботитесь о подах и ресурсах. Это упрощает жизнь, но и ограничивает в возможностях. Например, вы не можете контролировать, как именно масштабируются функции или где именно они выполняются. У вас нет постоянного сервера, вы не можете использовать локальную файловую систему, а выполнение кода может прерываться.</p><blockquote>Serverless часто берёт на себя вопросы безопасности, доступности, надёжности и многое другое. Вам нужно написать минимум кода, чтобы получить рабочий продукт. Но за это вы расплачиваетесь ограничениями по времени выполнения, доступной памяти, невозможностью использовать файловую систему или некоторые библиотеки.</blockquote><h3>Как выбор влияет на архитектуру приложения?</h3><p>Архитектура проекта в Serverless и Kubernetes будет строиться по-разному.</p><p>В Serverless вы вынуждены проектировать архитектуру вокруг событий: очереди, триггеры и т.д.. Это стимулирует модульность и микросервисный подход, но в то же время требует внимания к ограничениям исполнения и логике обработки состояний.</p><p>Kubernetes позволяет строить более традиционные микросервисные архитектуры с постоянными сервисами, сложными внутренними зависимостями и тонкой настройкой ресурсов. Он лучше подходит для систем с тяжёлыми расчётами, сложной логикой, долгоживущими процессами и кастомными требованиями к инфраструктуре.</p><blockquote>Kubernetes требует подготовки — инфраструктура, CI/CD, мониторинг, управление секретами. Эти вещи нужны, но не сразу. Поэтому на раннем этапе, когда проекту нужно просто выйти в прод, K8s действительно может показаться избыточным.</blockquote><h2>Архитектура и принципы работы: разбираемся под капотом</h2><p>Чтобы по-настоящему понять разницу между Kubernetes и Serverless, важно заглянуть внутрь — как устроены эти технологии, какие компоненты они используют и как всё это влияет на производительность, масштабирование и отладку.</p><h3>Как работают контейнеры, поды, ingress, autoscaling и т.д. в Kubernetes?</h3><p>Kubernetes — это система оркестрации контейнеров, и её архитектура состоит из множества компонентов, которые работают вместе, обеспечивая гибкость и контроль:</p><ul><li>Контейнеры и поды — основная единица развертывания в Kubernetes. Это pod, внутри которого один или несколько контейнеров. Все они разделяют сетевую среду и тома, что удобно для развертывания тесно связанных процессов.</li><li>Ingress-контроллеры обеспечивают маршрутизацию внешнего трафика к нужным подам. Это сложная, но гибкая система, которая требует настройки, но взамен даёт возможность строить кастомные маршруты, поддерживать HTTPS, аутентификацию и прочее.</li><li>Autoscaling в Kubernetes работает на уровне Horizontal Pod Autoscaler (HPA), который масштабирует количество подов в зависимости от нагрузки (например, CPU).</li></ul><p>Все эти компоненты дают мощный инструментарий, но требуют грамотной конфигурации и поддержки — от развёртывания Helm-чартов до настройки Prometheus и Grafana для мониторинга.</p><h3>Что происходит в Serverless: cold start, логи, триггеры, event-driven подход</h3><p>Serverless — это радикально другая архитектура. Ваша функция запускается только по событию (например, HTTP-запрос, сообщение в очереди, изменение в базе данных). Это называется event-driven подход.</p><ul><li>Cold start — ключевая особенность. При первом вызове функции платформа инициализирует среду выполнения, подгружает зависимости, запускает код — это может занять от десятков миллисекунд до нескольких секунд. Cold start особенно заметен на неактивных функциях.</li><li>Триггеры — основа Serverless. Они могут быть HTTP-запросами (через API Gateway), событиями из очередей, облачных хранилищ, баз данных и прочее. Вы не пишете сервер — вы пишете реакцию на событие.</li><li>Логирование и отладка завязаны на провайдере. Вы не можете подключиться к серверу — вы смотрите логи через облачную консоль или SDK. Это упрощает DevOps, но усложняет глубокую отладку.</li></ul><p>Serverless требует иного мышления: каждую функцию вы проектируете как минимальную, независимую единицу логики. Это отлично для модульности, но усложняет сложные взаимодействия и обработку состояний.</p><h3>Как это влияет на latency, отладку, масштабирование?</h3><p>Начнем с latency. У Kubernetes задержки зависят в основном от сетевой инфраструктуры и нагрузки, но отсутствует проблема cold start. В Serverless cold start — это реальная боль, особенно на старте и при нерегулярных запросах.</p><p>Что касается отладки, в Kubernetes у вас полный контроль: можно SSH-нуться в под, включить отладчик, проксировать трафик. В Serverless всё зависит от возможностей платформы и логирования. Это быстрее на старте, но ограничивает возможности при сложных багах.</p><p>Наконец, масштабирование. Kubernetes позволяет масштабировать по кастомным метрикам, вплоть до GPU-потребления, и балансировать нагрузку между сервисами. Serverless масштабируется автоматически, мгновенно и по запросу — но вы не можете это контролировать или тонко настраивать.</p><blockquote>При правильной подготовке любой стек работает с любой технологией. Но в основном для Serverless выбирают не типизированные языки вроде JavaScript или Python. По фреймворкам — очень часто Serverless вынуждает использовать конкретный фреймворк, совместимый с конкретным провайдером</blockquote><p>Таким образом, Kubernetes даёт больше свободы в выборе технологий и окружения. Serverless, в свою очередь, предлагает скорость и простоту, но за счёт зависимости от экосистемы конкретного облачного провайдера.</p><h2>Простота запуска и поддержки</h2><p>Один из главных факторов при выборе технологии — насколько просто с ней стартовать. Особенно это важно для небольших команд или MVP-проектов: чем меньше времени уходит на инфраструктуру, тем быстрее продукт попадает в руки пользователей.</p><h3>Что проще развернуть и поддерживать: Kubernetes с Helm или Lambda с API Gateway?</h3><p>Запуск приложения в Kubernetes требует полноценной инфраструктуры:</p><ul><li>Создание и загрузка Docker-образа,</li><li>Настройка Docker Registry (например, ECR),</li><li>Подготовка Helm-чартов или манифестов YAML,</li><li>Настройка кластера (виртуальные машины, ingress-контроллеры, сеть),</li><li>Мониторинг, алертинг, логирование — вручную.</li></ul><p>Это даёт гибкость и контроль, но требует ресурсов: как человеческих, так и вычислительных.</p><p>С Serverless (например, AWS Lambda) всё иначе. Вы можете написать функцию в редакторе прямо в консоли, задать один конфиг (например, триггер — HTTP-запрос), и она будет готова к работе. Инфраструктура, масштабирование, логирование и отказоустойчивость берёт на себя облако. Поддержка тоже проще: не нужно следить за серверами или контейнерами.</p><h3>Кто должен уметь работать со стеком в команде?</h3><p>Kubernetes требует DevOps-компетенций. Даже в небольшом проекте вам нужен человек, который понимает, как устроены кластеры, CI/CD, безопасность, ingress-контроллеры, storage и пр. Без этого можно утонуть уже на этапе деплоя.</p><p>Serverless часто позволяет обойтись усилиями самих разработчиков. Один fullstack может написать бизнес-логику, подключить API Gateway и базу, задать IAM-политику — и всё заработает. Это идеальное решение для стартапов или небольших продуктовых команд.</p><h3>Что с CI/CD: где проще интегрировать и автоматизировать?</h3><p>В Kubernetes CI/CD обычно реализуется через пайплайны, которые:</p><ul><li>Собирают образы,</li><li>Заливают их в registry,</li><li>Применяют Helm-чарты или YAML-манифесты,</li><li>Вызывают kubectl apply или helm upgrade.</li></ul><p>Это мощно, но требует настройки и инфраструктуры: Runner'ов, прав доступа, секрета для Docker registry и прочее.</p><p>В Serverless всё проще: провайдеры предлагают свои CI/CD-инструменты (например, AWS CodePipeline, Google Cloud Build), а комьюнити — фреймворки вроде Serverless Framework, которые позволяют деплоить из GitHub Actions одной командой. Для небольших проектов достаточно обычного push-to-deploy.</p><h3>Какой минимальный сетап нужен, чтобы ваш подход заработал на проде?</h3><p>По мнению Игоря, для Serverless вам нужно написать минимум одну функцию и один конфиг, затем загрузить их в облако. Иногда функцию можно написать прямо в интерфейсе провайдера, и, как правило, этого должно хватить для старта.</p><p>С Kubernetes всё сложнее: вам нужно сбилдить Docker-образ, создать Docker Registry и загрузить туда образ, сделать его доступным для K8s, написать K8s-темплейты и конфиги, создать пул виртуальных машин для запуска контейнеров — и всё это соединить и заставить работать.</p><p>Это отлично иллюстрирует, почему Kubernetes часто называют «тяжёлой артиллерией», даже если проект только на ранней стадии. Serverless в этом плане — минималистичный и быстрый в реализации подход.</p><h2>Масштабируемость и производительность</h2><p>Когда трафик стабильно растёт или возникают пиковые нагрузки —  архитектура должна выдерживать всё это без сбоев. Поэтому важно понимать, как Kubernetes и Serverless справляются с масштабированием и производительностью.</p><h3>Как масштабируются функции в Serverless и поды в Kubernetes?</h3><p>Serverless масштабируется автоматически: вы не заботитесь о количестве инстансов. Если одновременно поступают тысячи запросов — платформа (например, AWS Lambda, Google Cloud Functions) автоматически создаёт необходимое количество контейнеров для их обработки. В теории масштабирование происходит «до бесконечности», на практике — в рамках лимитов аккаунта или конкретного региона.</p><p>Kubernetes масштабируется через Horizontal Pod Autoscaler (HPA), который отслеживает метрики (например, загрузку CPU или latency) и увеличивает количество подов при росте нагрузки. Это требует правильной настройки метрик, ресурсов и инфраструктуры (в том числе — наличия нод, на которых эти поды можно развернуть).</p><p>В обоих подходах масштабирование работает, но требует разных усилий: в Serverless — вы просто «надеетесь» на провайдера, в Kubernetes — вы должны всё спроектировать, развернуть и мониторить.</p><h3>Что происходит при пике трафика — и где это может навредить?</h3><p>В Serverless основная проблема — cold start: когда функция вызывается впервые (или после паузы), нужно время, чтобы её контейнер был запущен. На пике cold start'ов становится больше, что увеличивает задержки. Кроме того, облачные провайдеры могут ввести троттлинг — ограничение на количество одновременных вызовов, особенно если вы не запросили лимит вручную.</p><p>В Kubernetes всё зависит от вашего кластера. Если у вас настроен autoscaling не только подов, но и нод (через Cluster Autoscaler), то при необходимости создадутся новые ноды и на них поды — но это не мгновенно. Также нужно следить за пулом ресурсов: при перегрузке возможны очереди, ошибки, отказ в обслуживании.</p><h3>Кто быстрее реагирует на нагрузку?</h3><p>В теории Serverless масштабируется быстрее, потому что вся автоматика на стороне облака. Но это верно только в идеальных условиях. В реальности cold start, ограничение по инстансам и сети может привести к замедлениям.</p><p>Kubernetes масштабируется чуть медленнее, особенно если нужно создать новые VM (в облаках это может занять до минуты), но если инфраструктура настроена правильно, поды могут масштабироваться практически мгновенно.</p><blockquote>Что быстрее справляется с нагрузкой: Kubernetes HPA или Serverless-автоскейлинг? Однозначно Kubernetes — если он был правильно настроен. Я бы даже сказал, что с Kubernetes вы можете контролировать скейлинг, а с Serverless вы должны рассчитывать на механизмы вашего провайдера.</blockquote><p>То есть Kubernetes требует больше усилий на старте, но даёт больше контроля и предсказуемости. Serverless проще и автоматизирован, но менее прозрачен и может вести себя непредсказуемо на высоких нагрузках.</p><h2>Стоимость: что выгоднее?</h2><p>Архитектурные решения — это не только про технологии, но и про деньги. Особенно когда вы строите стартап, запускаете MVP или масштабируете продукт. Serverless и Kubernetes используют принципиально разные модели оплаты, и от понимания этой разницы зависит, сколько вы заплатите в итоге.</p><h3>Сравниваем модели оплаты: за запросы vs за инфраструктуру</h3><p>Serverless работает по принципу pay-as-you-go: вы платите только за фактическое выполнение кода. Обычно это тарифицируется по времени выполнения и количеству вызовов, плюс может учитываться объём используемой памяти.</p><p>Например, если ваша функция выполняется 100 тысяч раз в месяц по 200 миллисекунд — вы платите за суммарные 20 тысяч секунд выполнения. В простой фазе жизни продукта, когда трафик небольшой, это может стоить буквально копейки.</p><p>Kubernetes, напротив, требует оплачивать инфраструктуру: количество и мощность виртуальных машин, дисков, балансировщиков и т.п. Даже если приложение не получает ни одного запроса, кластер всё равно работает и потребляет ресурсы, которые вы оплачиваете.</p><h3>Где и как можно переоптимизировать?</h3><ul><li>В Serverless можно снизить затраты, уменьшив время выполнения функций, снизив память или объединив вызовы.</li><li>В Kubernetes можно тюнинговать ресурсы подов, использовать spot-инстансы или автоскейлинг нод, чтобы минимизировать простои.</li></ul><p>Но важно понимать, что в Serverless платформа делает это за вас (до определённой степени), а в Kubernetes всё ложится на инженеров.</p><h3>Почему K8s может быть дешевле при постоянной нагрузке, а Serverless — при нерегулярной?</h3><p>Когда трафик нестабильный, Serverless показывает отличную эффективность: вы не платите за idle-инфраструктуру, функции «спят» между вызовами.</p><p>Но если у вас стабильный поток запросов, то постоянные вызовы функций могут превысить стоимость фиксированной инфраструктуры в Kubernetes.</p><blockquote>Всё очень зависит от вашего приложения, но при росте количества пользователей неминуемо настанет точка, когда Kubernetes станет стоить дешевле, чем Serverless. На одном моём проекте Kubernetes стал выгоднее, когда суммарное время выполнения запросов на сервере в день перевалило за 6 часов — у нас было около 30 тыс. запросов в день. Но мы ещё долго использовали Serverless, потому что было важнее делать новые фичи и привлекать клиентов, чем сэкономить 100 долларов в месяц.</blockquote><p>То есть Serverless выигрывает на ранних этапах: меньше затрат, меньше DevOps-нагрузки, можно быстрее экспериментировать. Kubernetes выигрывает в долгую, когда вы готовы инвестировать в инфраструктуру и автоматизацию — и когда каждый доллар становится важен на масштабах.</p><h2>Безопасность и контроль</h2><p>Когда речь заходит о продакшн-системах, вопрос безопасности выходит на первый план. Serverless и Kubernetes решают его по-разному — и с разной степенью ответственности на плечах команды.</p><h3>Кто отвечает за безопасность в Serverless?</h3><p>В Serverless часть задач снимается с разработчиков и ложится на провайдера. Это называется моделью shared responsibility — вы отвечаете за код и конфигурацию, а поставщик (например, AWS, Google Cloud) — за изоляцию, обновления окружения, патчи на ОС, сетевую безопасность и многое другое.</p><p>Это удобно: провайдер гарантирует изоляцию между функциями и пользователями, автоматически обновляет среду выполнения, даёт встроенные инструменты вроде IAM, шифрования и логгирования.</p><p>Но минусы тоже есть:</p><ul><li>Вы меньше контролируете окружение — нельзя установить свои агенты безопасности или специализированное ПО.</li><li>Иногда трудно реализовать специфические требования — например, если заказчик требует аудита определённого уровня.</li></ul><h3>Как настраивается безопасность в Kubernetes — и почему это сложно?</h3><p>В Kubernetes вы получаете полный контроль, но и полную ответственность. Здесь всё в ваших руках:</p><ul><li>Кто имеет доступ к API-серверу?</li><li>Какие политики срабатывают при запуске подов?</li><li>Как настроены роли, namespace'ы и изоляция?</li></ul><p>Это гибко, но требует:</p><ul><li>понимания сетевых политик,</li><li>настройки RBAC,</li><li>работы с контейнерной безопасностью,</li><li>внедрения мониторинга и алертов.</li></ul><p>На старте эти задачи могут быть избыточны — особенно если нет выделенной DevSecOps-команды.</p><h3>Что с логами, отладкой и доступами?</h3><ul><li>Serverless предлагает встроенные решения — вы быстро получаете логи, метрики, алерты. Но ограничены их форматом и глубиной. Прямого SSH-доступа, конечно, нет.</li><li>В Kubernetes вы сами выбираете стек наблюдаемости (Prometheus, Grafana и т. д.). Это мощно, но потребует ресурсов на установку и поддержку.</li></ul><h3>Кому проще пройти аудит: команде с Kubernetes или Serverless?</h3><blockquote>Однозначно — с Serverless. У вас меньше компонентов и, соответственно, меньший скоуп аудита. К тому же провайдер берёт на себя многие аспекты, важные для аудиторов — включая физическую безопасность, шифрование, сертификацию дата-центров.</blockquote><p>Если вы стартап, который выходит на рынок с первым продуктом, и вам нужно быстро пройти аудит — Serverless может подойти больше. Но в крупных компаниях всё чаще наблюдается гибридный подход: Serverless для быстрой разработки и MVP, Kubernetes — для кастомных требований и полного контроля.</p><h2>Что выбрать? Финальное сравнение</h2><p>Kubernetes и Serverless — это не конкуренты, а инструменты для разных задач и этапов развития продукта. Важно понимать их сильные и слабые стороны, чтобы не попасть в архитектурную ловушку.</p><h3>Когда выбирать Serverless?</h3><p>Serverless идеально подходит, если:</p><ul><li>вы запускаете MVP и вам важно выйти на рынок за недели, а не месяцы;</li><li>в команде нет DevOps-инженера, и время разработки — основной ресурс;</li><li>у вас редкие, но значимые пиковые нагрузки;</li><li>вы хотите платить только за фактическое использование, а не простаивающие виртуалки.</li></ul><h3>Когда брать Kubernetes?</h3><p>Kubernetes — ваш выбор, если:</p><ul><li>проект растёт, и вы хотите полный контроль над окружением, сетью и скейлингом;</li><li>нагрузка стабильная и высокая, и вы не хотите переплачивать за каждый вызов;</li><li>архитектура предполагает сложную микросервисную структуру, зависимости, очереди и кастомные компоненты;</li><li>вам важна портируемость и независимость от одного облачного провайдера.</li></ul><p>По словам <a href="https://www.linkedin.com/in/ihar-kryvanos-7066b886">Игоря Кривоноса</a>, берите Serverless для быстрого старта, получайте первых клиентов. А когда упрётесь в непреодолимые ограничения — переходите на Kubernetes.</p>]]></content:encoded>
    </item>
    <item>
      <title>Защита API-ключей: как избежать утечек</title>
      <link>https://tproger.ru/articles/zashhita-api-klyuchej--kak-izbezhat-utechek</link>
      <comments>https://tproger.ru/articles/zashhita-api-klyuchej--kak-izbezhat-utechek?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zashhita-api-klyuchej--kak-izbezhat-utechek</guid>
      <description><![CDATA[<p>Защита API-ключей. Показываем, как избежать утечек в API. Рассматриваем пошаговую инструкцию и инструменты ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zashhita-api-klyuchej--kak-izbezhat-utechek">Защита API-ключей: как избежать утечек</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Лучшая практика]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Яндекс]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 27 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>API-ключи стали цифровыми пропусками в современную веб-инфраструктуру. Они открывают доступ к данным, сервисам и функционалу, но их утечка превращает этот удобный механизм в угрозу безопасности.</p><p>Техническая уязвимость идентификаторов — не единственная проблема. Защита API-ключей требует комплексного подхода, сочетающего технические решения и организационные меры. Практика показывает, что большинство утечек происходит не из-за направленных атак, а по причине пренебрежения базовыми принципами безопасности.</p><p>Поэтому важно не просто правильно хранить ключи, но и контролировать их использование, своевременно обновлять и ограничивать область действия. Понимание этих рисков — первый шаг к созданию надежной защиты API для ваших интерфейсов и данных.</p><p>В этой статье разберем основные причины утечек, а также практические методы защиты API-ключей, которые помогут избежать распространенных ошибок и минимизировать риски.</p><h2>Основные причины утечек</h2><p>API-ключи обеспечивают доступ к критически важным системам — от платежных шлюзов до облачных хранилищ данных. Их компрометация может привести к катастрофическим последствиям — утечке конфиденциальных данных, финансовым потерям и даже к полному захвату контроля над системой.</p><p>Разберем основные причины утечек.</p><h3>Хардкодинг ключей в исходном коде</h3><p>Пожалуй, самая распространенная и опасная практика — прямое внедрение API-ключей в исходный код приложения. Разработчики часто делают это для удобства тестирования, забывая удалить секретные данные перед релизом.</p><p>Особенно критично, когда ключи остаются:</p><ul><li>в конфигурационных файлах (config.php, .env);</li><li>в закомментированных блоках кода;</li><li>в тестовых сборках, которые по ошибке попадают в продакшен;</li><li>в шаблонах и примерах кода.</li></ul><p>Яркий пример — <a href="https://xakep.ru/2023/09/07/microsoft-post-mortem/">инцидент с Microsoft в 2023</a> году, когда утечка ключа MSA (Microsoft Account) через устаревший код позволила хакерам получить доступ к почтовым ящикам правительственных организаций США, включая Министерство торговли. Как показало расследование Microsoft Security Response Center, проблема возникла из-за ключа подписи, который продолжал использоваться в legacy-системах и попал в руки злоумышленников.</p><p>Главная опасность хардкодинга в том, что даже после удаления ключа из актуальной версии кода он может сохраняться в истории версий или бинарных файлах. Современные сканеры секретов легко находят такие уязвимости, что делает подобную практику особенно рискованной.</p><h3>Случайные коммиты в публичные репозитории</h3><p>Системы контроля версий типа Git хранят полную историю изменений, что создает дополнительные риски. Даже если ключ удален из текущей версии кода, он может остаться в истории коммитов.</p><p>Типичные сценарии:</p><ul><li>временное добавление ключа для отладки с последующим «удалением»;</li><li>позднее добавление .env-файла в .gitignore;</li><li>слияние веток с чувствительными данными;</li><li>автоматические коммиты IDE и инструментов разработки.</li></ul><p>В публичные репозитории GitHub ежедневно попадают сотни активных ключей — некоторые из них даже предоставляют доступ к платежным системам и базам данных.</p><h3>Ошибки в настройке CI/CD</h3><p>Автоматизированные системы сборки и деплоя могут невольно способствовать утечкам:</p><ul><li>передача ключей через аргументы командной строки;</li><li>попадание секретов в логи сборки;</li><li>неправильная настройка переменных окружения;</li><li>хранение ключей в незащищенных артефактах;</li><li>избыточные права доступа для CI-сервисов</li></ul><p>Особенно опасны ситуации, когда CI-пайплайн настроен на публикацию артефактов сборки, включающих конфигурационные файлы с ключами.</p><h3>Логирование чувствительных данных</h3><p>Разработчики часто добавляют отладочный вывод, который затем забывают удалить:</p><ul><li>console.log (“API Key: “, secretKey);</li><li>погирование полных HTTP-запросов с заголовками авторизации;</li><li>дампы ошибок с конфиденциальными данными;</li><li>журналирование параметров запросов.</li></ul><p>Такие записи могут попасть в системные логи, инструменты мониторинга (Kibana, Grafana), браузерную консоль (для фронтенд-приложений) и облачные сервисы хранения логов.</p><p>Проблема усугубляется тем, что многие фреймворки по умолчанию включают подробное логирование, а разработчики не всегда задумываются о последствиях. В корпоративных системах это может привести к накоплению секретов в централизованных системах мониторинга, доступ к которым имеют десятки сотрудников.</p><h2>Неправильное управление доступами</h2><p>Часто проблема кроется не в технических решениях, а в процессах управления:</p><ul><li>отсутствие ротации ключей — некоторые из них используются годами;</li><li>использование одних ключей для разных сред (dev/stage/prod);</li><li>избыточные права доступа — принцип минимальных привилегий не соблюдается;</li><li>хранение ключей в общих хранилищах и чатах;</li><li>отсутствие аудита использования ключей.</li></ul><p>Часто утечки происходят из-за совокупности нескольких перечисленных факторов. Например, типичный сценарий: ключ сначала попадает в код, затем в репозиторий, обнаруживается в логах CI-системы, а потом оказывается в общем доступе из-за неправильных настроек прав.</p><p>Особую опасность представляет практика использования долгоживущих ключей с широкими правами доступа. В отличие от временных токенов, такие ключи редко проверяются и могут годами оставаться незамеченными в случае утечки. Поэтому современные подходы к безопасности рекомендуют использовать краткосрочные реквизиты для входа с минимально необходимыми правами.</p><h2>Безопасное хранение и использование API-ключей</h2><p>API-ключи — это критически важные элементы инфраструктуры, и их утечка недопустима. Чтобы минимизировать риски, важно соблюдать несколько принципов.</p><p>Переменные окружения — один из базовых, но эффективных способов изоляции ключей от кода. Хранение их прямо в скриптах или конфигурационных файлах, особенно в публичных репозиториях, — распространенная ошибка.</p><p>Сканер секретов GitHub ежедневно обнаруживает сотни случайно залитых ключей, несмотря на предупреждения. Переменные окружения позволяют отделить конфиденциальные данные от кода, но важно убедиться, что файлы .env не попадают в билды или логи.</p><p>Для более сложных сценариев стоит рассмотреть специализированные хранилища секретов, такие как HashiCorp Vault, AWS Secrets Manager или Doppler. Они не только обеспечивают безопасное хранение, но и добавляют функции ротации ключей, аудита доступа и интеграции с системами мониторинга.</p><ul><li><b>Vault</b> динамически генерирует временные ключи для отдельных сервисов, сводя к нулю риск их повторного использования. Однако такие решения требуют настройки и контроля — при некомпетентном подходе компании сталкиваются с ошибками конфигурации при внедрении.</li><li><b>AWS Secrets Manager</b> — инструмент, который позволяет централизованно хранить конфиденциальную информацию, извлекать ее, управлять доступом, ротировать и мониторить.</li><li><b>Doppler</b> — кроссплатформенное решение с удобным интерфейсом и историей изменений. Особенно популярно среди стартапов.</li></ul><p>Главное преимущество таких систем — централизованное управление. При увольнении сотрудника или компрометации ключа его можно отозвать мгновенно для всех сервисов.</p><p>Шифрование обязательно как при передаче, так и при хранении. Даже если злоумышленник получит доступ к базе данных или логам, зашифрованные ключи останутся бесполезными без расшифровки. Современные стандарты, такие как AES-256 или алгоритмы на основе PQC (постквантовой криптографии), уже встроены в большинство облачных провайдеров. Но важно не забывать про управление ключами шифрования (KMS): их утечка сведет на нет всю защиту.</p><p>Ограничение доступа — еще один уровень безопасности. Даже корректно хранимый ключ должен работать только с определенных IP-адресов, в заданные промежутки времени и для конкретных методов API. Например, ключ для чтения данных не должен разрешать запись. Cloudflare <a href="https://blog.cloudflare.com/">рекомендует</a> комбинировать геофильтрацию, ограничение частоты запросов и сигнатурный анализ запросов для блокировки аномальных действий.</p><p>Наконец, мониторинг помогает обнаружить утечку до того, как ею воспользуются. Инструменты вроде AWS GuardDuty или открытый вариант Falco отслеживают подозрительные операции: неожиданные запросы из новых регионов, аномальную частоту вызовов API или попытки доступа к заблокированным эндпоинтам.</p><p>Важно: ни один метод не дает 100% защиты API. Нужно комбинировать подходы и регулярно аудировать систему. Безопасность API-ключей — это не разовая настройка, а процесс, требующий регулярного пересмотра политики адаптации к новым угрозам.</p><h3>Лучшая практика работы с ключами</h3><p>Хранение API-ключей требует особого внимания, так как их компрометация может привести к серьезным последствиям. Около половины всех утечек ключей происходят из-за их хардкодирования в исходном коде. Это базовая ошибка, которую легко избежать, используя переменные окружения или специализированные хранилища секретов.</p><p>Вот самые эффективные практики:</p><ul><li>Первое правило — никогда не оставлять ключи в коде. Даже если репозиторий приватный, всегда существует риск случайной публикации или утечки через резервные копии. Инструменты вроде pre-commit хуков помогают предотвратить подобные инциденты, автоматически проверяя изменения перед отправкой. Например, скрипт может сканировать коммиты на наличие строк, похожих на ключи, и блокировать их сохранение.</li><li>Регулярная ротация снижает потенциальный ущерб от возможной компрометации. Ключи, которые не обновлялись годами, представляют особую опасность. Современные системы, такие как HashiCorp Vault или AWS Secrets Manager, позволяют автоматизировать этот процесс.</li><li>Принцип минимальных привилегий должен применяться ко всем ключам. Если токен нужен только для чтения данных, он не должен иметь прав на запись или удаление. Ограничение области действия каждого токена — простой, но эффективный способ снизить риски.</li><li>Мониторинг использования помогает выявлять аномалии в реальном времени. Неожиданные всплески активности, запросы из новых регионов или попытки доступа к неиспользуемым методам API — все это сигналы потенциальной компрометации. Инструменты типа AWS CloudTrail или Elastic SIEM позволяют отслеживать подобные события и оперативно реагировать на угрозы.</li><li>Обучение команды не менее важно, чем технические меры. Регулярные тренинги и чек-листы помогают поддерживать уровень осведомленности.</li></ul><p>Централизованное управление упрощает контроль за ключами. Когда все токены хранятся в одном защищенном месте, проще отслеживать их использование, вовремя обновлять и отзывать при необходимости. Это также облегчает аудит, который часто требуется для соответствия стандартам вроде PCI DSS или ГОСТ Р 56939-2024.</p><p>Процесс отзыва должен быть максимально оперативным. В случае компрометации ключа важно не только сгенерировать новый, но и убедиться, что старый уже недействителен. Некоторые сервисы, например Google Cloud, позволяют автоматически блокировать ключи при обнаружении подозрительной активности.</p><h3>Автоматическое выявление утечек</h3><p>Обнаружение утекших API-ключей должно быть неотъемлемой частью стратегии безопасности. Современные инструменты позволяют выявлять компрометацию секретов на ранних стадиях, минимизируя потенциальный ущерб.</p><p>Эффективный мониторинг начинается с проверки исходного кода. Такие инструменты, как <a href="https://www.gitguardian.com/">GitGuardian</a> и <a href="https://trufflesecurity.com/">TruffleHog</a>, сканируют git-репозитории, включая историю коммитов, на наличие случайно оставленных ключей. Они используют комбинацию шаблонов и энтропийного анализа, что помогает находить даже замаскированные секреты. Интеграция этих проверок в CI/CD-пайплайны позволяет перехватывать потенциальные утечки до их попадания в основную ветку.</p><p>Для обнаружения ключей за пределами репозиториев существуют специализированные сервисы, которые мониторят открытые площадки вроде Pastebin и технических форумов. Некоторые решения способны анализировать контекст, отличая реальные ключи от случайных последовательностей символов.</p><p>При выявлении компрометации критически важна оперативная реакция. Первый шаг — немедленный отзыв скомпрометированного ключа. Современные системы управления секретами позволяют делать это автоматически, одновременно инициируя процесс генерации замены. Задержки в этом процессе создают опасное окно уязвимости.</p><p>Проактивный мониторинг должен сопровождаться четким планом реагирования. Документированные процедуры позволяют сократить время реакции и минимизировать последствия инцидента. Важно регулярно тестировать эти процедуры на практике.</p><p>Автоматизированные системы обнаружения утечек работают наиболее эффективно в сочетании с обучением разработчиков. Технические средства бесполезны, если команда продолжает пренебрегать базовыми правилами безопасности. Регулярные тренировки помогают поддерживать высокий уровень готовности к реальным угрозам.</p><p>Важно понимать, что автоматическое обнаружение — это последний рубеж защиты. Оно не заменяет, а дополняет другие меры безопасности, такие как грамотное хранение ключей и контроль доступа. Комплексный подход значительно снижает риски, связанные с компрометацией API-ключей.</p><h2>Как реализовать безопасный доступ на фронтенде</h2><p>Основная проблема фронтенд-разработки в контексте работы с API — невозможность полностью защитить клиентский код. В отличие от серверной части, JavaScript остается открытым для анализа, а сетевые запросы легко перехватываются. Однако существуют проверенные подходы, позволяющие минимизировать риски утечки ключей.</p><p>Первое и главное правило — никогда не хранить приватные ключи в клиентском коде. Даже минифицированный JavaScript легко декомпилируется, а строковые константы извлекаются за несколько минут с помощью стандартных инструментов разработчика.</p><p>Вместо этого рекомендуется использовать архитектурный паттерн Backend-for-Frontend (BFF), когда фронтенд общается с промежуточным сервером, а тот уже взаимодействует с основными API. Так ключи остаются на защищенной стороне, а клиент получает только временные токены с ограниченным сроком действия.</p><p>Для аутентификации пользователей оптимально подходит OAuth 2.0 с расширением PKCE (Proof Key for Code Exchange). Этот механизм обеспечивает безопасный обмен токенами даже в публичных клиентах. В отличие от обычного потока авторизации, PKCE добавляет дополнительный уровень защиты через одноразовые ключи верификации, что предотвращает перехват кодов злоумышленниками.</p><p>В случаях, когда фронтенду необходим доступ к публичным API без аутентификации пользователя, стоит использовать ограниченные токены. Например, для картографического сервиса можно выпускать ключи, разрешающие только чтение данных с жестким лимитом запросов. Такой подход применяют многие крупные платформы, включая Яндекс.Карты. Даже если токен будет скомпрометирован, его полезность для злоумышленников окажется минимальной.</p><p>Дополнительную безопасность обеспечивает динамическое получение ключей. В этой схеме фронтенд сначала запрашивает у сервера одноразовый код, затем использует его для подписи запроса. После проверки подписи сервер выдает временный ключ, действительный только для текущей сессии. Этот метод значительно усложняет массовый перехват и повторное использование украденных данных.</p><p>Фронтенд должен получать ровно столько данных, сколько необходимо для отображения интерфейса, а все критические операции должны выполняться на сервере. Комбинация прокси-серверов, временных токенов и строгого контроля доступа позволяет создать надежную систему защиты даже для чувствительных API.</p><p>Последний рубеж безопасности — верификация среды выполнения. Современные библиотеки анализируют параметры браузера, выявляя признаки эмуляции или автоматизации. Это позволяет блокировать запросы от ботов и скриптов, пытающихся массово собирать данные через API. Такой подход особенно важен для финансовых сервисов и платформ с ценной информацией.</p><p>Главный вывод: фронтенд действительно представляет угрозу для безопасности API-ключей, но грамотная архитектура и продуманные механизмы авторизации позволяют снизить риски до приемлемого уровня. Ключевой принцип защиты API — минимализм в правах доступа и максимальное делегирование ответственности серверной части.</p><p>Хочешь писать код, который не стыдно показывать? Всё для фронтендеров и бэкендеров в <a href="https://t.me/+c6lPaQBXLvE4YmMy">одном месте</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Конвейер DevOps, часть 3: пайплайны и хуки в Git</title>
      <link>https://tproger.ru/articles/konvejer-devops--chast-3--pajplajny-i-huki-v-git</link>
      <comments>https://tproger.ru/articles/konvejer-devops--chast-3--pajplajny-i-huki-v-git?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Олег Филон]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/konvejer-devops--chast-3--pajplajny-i-huki-v-git</guid>
      <description><![CDATA[<p>В этой серии статей Олег Филон, ментор Эйч Навыки, рассказывает, как прийти к крутому CI/CD пайплайну. Сегодня разбираемся, как работать с пайплайнами и хуками в Git.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/konvejer-devops--chast-3--pajplajny-i-huki-v-git">Конвейер DevOps, часть 3: пайплайны и хуки в Git</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[unix]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[ICO]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 26 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Я — Олег Филон,<a href="https://h.careers/curators/oleg-philon"> ментор Эйч Навыки</a> и Senior DevOps Engineer. В этой статье расскажу, как организовать CI/CD пайплайн для контейнеризованного проекта с использованием утилиты make, сравню подходы для Docker и Podman, а также поделюсь хаком с использованием Git bare репозитория для автоматизации деплоя.</p><p>Первые две части лежат здесь: <a href="https://tproger.ru/articles/konvejer-devops--chast-1--kak-organizovat-rabochee-mesto-i-nastroit-oblako-iz-kvm-libvirt">рабочее место/облако</a> и <a href="https://tproger.ru/articles/konvejer-devops--chast-2--polzuemsya-fedora-core-i-mise">Fedora Core/mise</a>.</p><h2>Начало проекта и утилита make</h2><p>Представим идеальную ситуацию: я не только девопс, но и проектный менеджер, выбираю архитектуру проекта, и инструменты, и команду разработчиков, то есть полностью контролирую проект. В жизни такое вряд ли встретишь, но нам это нужно для примера, чтобы рассмотреть разные варианты.</p><p>Первый — классический пайплайн — это утилита make. Обычно она используется для сборки программ из исходного кода. На самом деле make хорошо подходит для решения сразу нескольких задач.</p><ul><li>Первая задача — отслеживание зависимостей одних файлов от других, например, при изменении сервиса пересобрать только соответствующий контейнер.</li><li>Вторая задача, легко реализуемая через make — сборка в один файл много команд или скриптов, чтобы удобно их организовать. Как правило, сборка образа, его загрузка в репо, удаление временных файлов и прочее делается несколькими рутинными командами. Точно так же можно поместить в Makefile команды запуска сервисов и тестирование приложения локально.</li><li>Если эти этапы прошли успешно, можно выполнить коммит кода в репо проекта, сделать деплой в dev или stage environment. В github actions это называется jobs и steps. В make такая группа команд называется целью, она указывается параметром при вызове.</li></ul><p>Так, несмотря на разную терминологию, по сути можно создать полноценный пайплайн для современного проекта с контейнеризованными сервисами.</p><h3>Разбираемся на практике</h3><p>Возьмём для примера проект с прокси сервером traefik и бэкендом на golang из репозитария <a href="https://github.com/ophilon/awesome-pods">awesome-pods</a>. Этот репо задуман как форк замечательного проекта <a href="https://github.com/docker/awesome-compose">awesome-compose</a>, в котором собраны конфиги docker compose для 41 самого популярного сервиса. Я же пытаюсь сделать что-то похожее для манифестов podman. Приглашаю к сотрудничеству начинающих девопс — сможете поучаствовать в открытом проекте, заработать почётные гитхаб-бейджи и улучшить своё резюме. Подробнее — <a href="https://github.com/ophilon/awesome-pods/blob/main/CONTRIBUTING.md">здесь</a>.</p><p>Мой проект в интересном положении: сделаны манифесты для нескольких сервисов, опробованы описанные выше подходы для миграции конфигов compose.yaml в манифесты kube.yaml. Но захотелось большего: а почему бы не сделать сразу пайплайны для тестирования, коммита в апстрим, деплоя и прочее. Зайдём в каталог traefik-golang и создадим пару мейк-файлов. Для начала сделаем всё это локально, начнём с make_compose:</p><p>Этот файл уже в истории, равно как и соответствующий README.md, привожу его для примера. Так как я делаю конфиги сразу для двух платформ — docker и podman, для включения соответствующего Makefile’а нужно сделать линк на него: ln -s make_compose Makefile.</p><p>Отлично, основную идею обсудили, идём дальше. В docker’е есть замечательная опция context, позволяющая работать с любыми серверами, где настроен доступ. В нашем случае список контекстов выглядит так:</p><p>Здесь я использовал простейший хак — сделал копию дефолтного контекста с именем localhost. Теперь мы можем сделать наш пайплайн способным на удалённый деплой. Достаточно прописать в /etc/hosts имя и адрес нашего dev сервера. Вот новая версия make_compose:</p><p>Поясню немного подробнее.</p><ul><li>Самая первая строка — стандартное объявление списка целей.</li><li>Строки 2-4 задают дефолтное значение переменной, если оно не задано в текущем env.</li><li>В хелп — строки 5-10 — добавлено предупреждение о текущем контексте, он задаётся в глобальной переменной, например, export DKR_CONTEXT=localhost для локального контекста.</li><li>Также добавлена цель commit в репо — строки 17-21 — после выполнения цели test.</li><li>Test — строки 31-32 — в свою очередь, выполняется для текущего контекста, см. хак #1. Имя контекста должно совпадать с именем хоста нашего dev-сервера.</li><li>Добавлена также цель clean: очистка старых образов с локальном репо,и зависимости в цель up. Здесь убеждаемся, что образ пересобран и старые контейнеры остановлены.</li></ul><p>Отлично, пайплайн для докера работает. Пробуем сделать то же самое для подмана. Здесь нас ждёт сюрприз, попробую рассказать в стиле прямого репортажа. Первоначально наш пайплайн для podman выглядел вот так:</p><p>В строке 5 определяются зависимости: target back соберёт исполняемый файл только в том случае, если код main.go или сам make_pods новее уже собранного бинарника.</p><p>Строка 6 удаляет backend контейнер с едва заметным знаком минус -, чтобы игнорировать ошибку, если контейнер с именем backend не существует.</p><p>Строки 7–10 создают контейнер с именем backend из пустого (scratch) контейнера — команды buildah следуют обычным командам Dockerfile, но в нижнем регистре: FROM -&gt; from, COPY -&gt; copy, RUN -&gt; run, ENTRYPOINT -&gt; config –entrypoint и т. д. Здесь вы видите основное отличие от традиционного docker buildx подхода — вы работаете в двух контекстах одновременно: в локальном контексте, используя установленный компилятор go, и в контексте контейнера, копируя файлы в/из контейнера, запуская команды внутри контейнера и т. д. Другая новая возможность buildah — вы можете собирать образ шаг за шагом, то есть отлаживать процесс сборки.</p><p>Строка 8 компилирует main.go в исполняемый файл back с соответствующими флагами.</p><p>Строка 11 создаёт из контейнера новый образ (image) с тегом backend:latest.</p><p>Цель up — строка 16 — зависит от цели down — строка 14, — то есть она сначала останавливает pod и удаляет контейнеры, если они всё ещё запущены, затем запускает новый под.</p><p>Цель down в строке 15 подставляет глобальную переменную $XDG_RUNTIME_DIR из env пользователя в kube.yaml, используемый далее в podman kube командах, принимая новый манифест со стандартного ввода. Это также специфика podman — он работает полностью в пространстве пользователя, контейнеры взаимодействуют через собственный podman.sock. Таким образом, делаем пайплайн независимым от UID.</p><p>В подмане есть фунциональность наподобие docker context, под другим именем, в подкоманде system connection:</p><p>Первым в списке стоит настроенная в <a href="https://tproger.ru/articles/konvejer-devops--chast-2--polzuemsya-fedora-core-i-misel">прошлой статье ВМ</a>. Пока искал правильные опции для создания коннекшена (aka контекст в докере), столкнулся с подсказкой от подмана — «создайте сначала машину», а именно:</p><p>Выполнил эти рекомендации, подман выкачал, настроил и добавил два новых коннекшена для новой ВМ. Какой же меня ждал сюрприз, когда я стал смотреть, что же это за machine. Во-первых, в моём HOME появились новые файлы и каталоги:</p><p>Во-вторых, это полноценная ВМ fedora coreos:</p><p>Конечно, приятно, что моё мнение совпало с мнением авторов подмана, точнее, со стратегией RedHat — fedora coreos наиболее подходящая система для контейнерных приложений. С другой стороны, ВМ в подмане крутится полностью внутри пространства пользователя. У меня уже настроена почти такая же для удалённой работы всей команды разрабов. Решено: останавливаем новую виртуалку и правим мейкфайл для подмана по образцу компоуза, делаем пайплайн для деплоя и локально, и на удалённый дев-сервер.</p><p>Но прежде нам понадобится ещё один хак #2. Если в случае докера переключение контекста можно было сделать любой переменной, то для подмана между локальным соединением через сокет и удалённым, через uri:ssh, имя переменной фиксировано <a href="https://docs.podman.io/en/stable/markdown/podman.1.html">CONTAINER_HOST</a>. Вот как выглядит пайплайн make_pods.v1, настроенный и для локальной сборки, и для деплоя в наш дев-сервер:</p><p>По большей части цели мейкфайла остались теми же, но для удалённого деплоя настраиваем переменную export CONTAINER_HOST=ssh://dev@fc42dev:22/run/user/1001/podman/podman.sock — берём её из коннекшена, она служит переключателем между локальным и удалённым контекстом. Для локального контекста эту переменную надо удалить: unset CONTAINER_HOST. Команды в строках 19, 21 и 23 — это обычные команды шелла, они также меняются на локальное либо удалённое исполнение, переопределяются на основе этой же переменной CONTAINER_HOST.</p><p>Как заметил внимательный читатель, в цели back исчезла сборка контейнера утилитой buildah. Как и для docker compose, используется возможность самого подмана создавать образы на основе Containerfile, он же Dockerfile, эти названия синонимичны. Это намёк: пора отвыкать от слова докер, контейнеры уже давно стали основой облачных вычислений, для них созданы сотни приложений, например, <a href="https://www.cncf.io/">CNCF</a> и <a href="https://adriancitu.com/2021/12/30/containers-landscape-seen-through-oci-and-cncf-standards-lens/">общепризнанные стандарты</a>.</p><h2>Принципиальный вопрос о контейнерах</h2><p>Основное их преимущество — новый способ доставки приложений в облака, решение проблем с зависимостями, версиями библиотек, фреймворков и проч. Сборка контейнеров в контейнерах — побочный эффект облачных сервисов Github, Gitlab и других, с одной стороны, и ограничения Docker — с другой. Он не умеет, в отличие от подмана, точнее, от его сопутствующей утилиты buildah, выполнять билд и создавать образ, используя локальное окружение.</p><p>Основная проблема сборки образа внутри контейнера — неэффективное использование кэша. Да, появились возможности как-то сохранять объемные загрузки внешних библиотек, модулей: это опции --mount=type=cache для <a href="https://docs.docker.com/build/cache/optimize/#use-bind-mounts">некоторых языков</a>. Но, во-первых, эти возможности используются далеко не всегда. Во-вторых, опции для кэширования отличаются в podman и buildah, см. podman-build(1), придётся делать отдельный Containerfile. В-третьих, эффект от такого кэширования минимален. Предлагаю замерить время сборки, сделав ещё одну, третью версию пайплайна. Сначала соберём команды для buildah в отдельный файл:</p><p>и поправим пару строк в пайплайне:</p><p>Уточню условия нашего эксперимента — мы настроили одинаковую среду разработки с помощью утилиты mise (<a href="https://tproger.ru/articles/konvejer-devops--chast-2--polzuemsya-fedora-core-i-mise">предыдущая статья</a>) на нашем дев-сервере и у каждого из разрабов команды. Репозитарий git использует этот же дев-сервер, доступ к репо и серверу по ключу, парольный доступ закрыт. Пайплайны настроены как для локальной сборки, так и на дев-сервере. Перед запуском 3-й версии пайплайна на дев-сервере нужно сделать коммит изменений в репо — buildah не знает о коннекшенах, работает с кодом в текущем каталоге (строка 1): после логина на сервер переключается в корень проекта. Предварительно выкачиваем образ компилятора go для сборки в контейнере — это вполне честно, мы же выкачали и настроили компилятор golang заранее. Замеряем:</p><p>Мы получили 10+-кратный выигрыш по времени сборки образа для подмана. Абсолютные времена не важны, также не влияет, запускали мы сборку локально или на дев-сервере — мы сравниваем только билд в контейнере и в настроенном локальном окружении. Третье измеренное время — сборка в Docker. Он умеет собирать только в контейнере, для него настроили кэширование в Containerfile:</p><p>Но оно не сильно помогло. Конечно, наш проект игрушечный, golang кэширует лучше других языков, но в целом вывод понятен: сборка в контейнере далеко не оптимальный вариант, если есть возможность настроить дев-сервер для работы команды.</p><p>Ещё замечание: конечно, образы, собираемые buildah, совместимы с Docker, их можно использовать в конфигах compose.yaml. Но для этого надо настроить репозиторий образов и сначала загрузить образ в него. Локальные репозитории отличаются: Docker использует общий репо для всех пользователей — Docker Root Dir: /var/lib/docker, а в подмане всё хранится в домашнем каталоге пользователя — graphRoot: /home/$USER/.local/share/containers/storage.</p><p>Как я предположил в самом начале, мы попробовали вариант с гипотетической идеальной командой разрабов, работающей в Линукс и умеющей в make. А как быть обычному девопсу с разношерстой командой, где кто-то сидит на Винде, а кто-то ни за что не откажется от привычного Макбука на M4? Есть вариант и для этого случая. Пусть они пишут код и тестируют его как им нравится, а в нашем репо на дев-сервере мы сделаем хак #3, а именно git hook и bare репозиторий — githooks(5), выполняющий наши цели сборки и старта приложения при коммите в репо.</p><p>Для этого на пару минут придётся стать безжалостным хакером, удаляющим лишнее и открывающим скрытые возможности гита. Выполняем следующие шаги:</p><ol><li>Заходим под юзером dev на сервер, создадим пустой каталог, например, mkdir -pv ~/bare/t0. Это станет новым GIT_DIR, зайдём в него и выполним cd ~/bare/t0;git init --bare.</li><li>Видим, что файлы, обычно спрятанные в каталоге .git, лежат прямо в корне. Сделаем дополнительно каталог для логов mkdir logs. Переходим в каталог hooks и создаём файл, где укажем команды выполнения при каждом изменении в репо.</li></ol><p>Закомментированные строки 3, 8, 9 полезны при отладке пайплайна. Строки 4 и 5 задают, что есть, собственно, репозиторий, переменная GIT_DIR и переменная WORK_TREE (куда будут записываться файлы проекта). В цикле от строки 6 до 14 читаются и обрабатываются три переменные, с которыми гит вызывает этот хук. Строка 11 принимает все изменения в репо и обновляет WORK_TREE — всё то, что гит обычно делает в общем каталоге, как видим, в bare репо они разные. Далее, в 12 строим имя лога и строка 13 — собственно, пайплайн.</p><ol><li>Идём в каталог, где расположен репо проекта. Без страха и сожаления удаляем старый и создаём новый под тем же именем: cd ~/src;rm -rf traefik-golang;mkdir traefik-golang.</li><li>Завершаем сессию на дев-сервере, возвращаемся на рабочий комп и заходим в репо проекта. Конечно, репо цел, клоны репо не так просто уничтожить, пока есть хотя бы одна копия. Теперь смотрим старые настройки git remote -v и удаляем их git remote remove fc42dev в моём случае. Создаём новый remote, указывая новый гит bare репо: git remote add bare.t0 dev@fc42dev:~/bare/t0. Это также нужно сделать всем разрабам в их локальных копиях.</li><li>Проверяем результат. Возможно, нужно сделать новый комит и push в новый remote. Стоит посмотреть подробнее, как изменился репо проекта на сервере: проверить логи в ~/bare/t0/logs, сравнить конфиги обычного репо проекта и на сервере, проверить, какие команды перестали работать в серверном репо. Например, в WORK_TREE не работают команды гит status; branch; commit; log. То есть наш хак #3 с git --bare не только позволил делать деплой на сервере, но также защитил репо от локальных изменений, а серверный репо всегда в чистоте и порядке. Можно редактировать код, но закомитить его только через обычный репо. Изменения на сервере удалятся после любого коммита.</li></ol><p>Надеюсь, мне удалось показать, что пайплайны можно делать на основе древней забытой утилиты make. В следующей статье разберём, как можно добавить в наш скромный дев-сервер нечто похожее на монстров гит-сервисов, Gitlab и Github, создавать пайплайны, совместимые с github Actions, предоставить команде разрабов привычный интерфейс репо в браузере.</p>]]></content:encoded>
    </item>
    <item>
      <title>Cборка мусора в Java Highload</title>
      <link>https://tproger.ru/articles/cborka-musora-v-java-highload</link>
      <comments>https://tproger.ru/articles/cborka-musora-v-java-highload?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Artem M.]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/cborka-musora-v-java-highload</guid>
      <description><![CDATA[<p>Как мы убили 400ms лаги в банке и выжали из Java 55k транзакций/сек: хардкор про GC и адреналин</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/cborka-musora-v-java-highload">Cборка мусора в Java Highload</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Финтех]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 24 May 2025 09:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Несколько лет работаю Java инженером в финтехе. Недавно вывели на рынок очередное HL-решение со строгим SLA по RPS и Latency. Хотел бы кратко описать проблемы и путь их решения.</p><p>Когда бизнес затребовал систему для обработки транзакций в реальном времени с пиковой нагрузкой в 50 тысяч операций в секунду, я понял, что серые будни enterprise инженера наконец станут весельем. Наш сервис должен был не просто работать — он должен был дышать под давлением, сохраняя отклик в пределах 10 мс. Не все проблемы в мире можно решить горизонтальным масштабированием, и одним из камней преткновения стала Java, а точнее — её «мусор».</p><h2>Выбор GC: G1, Shenandoah или ZGC?</h2><p>Первое, с чем столкнулась наша команда, — продолжительные STW-прерывания при нагрузке. Изначально использовали G1GC как «дефолтный» выбор для баланса между latency и throughput. Но под нагрузкой 80% CPU даже G1 не справлялся: пиковые паузы достигали 400 мс, что для платежей было неприемлемо.</p><p>Мы устроили мозговой штурм с performance-инженерами. Варианты:</p><p>1. Shenandoah — низкие паузы, но требуется больше CPU.</p><p>2. ZGC — субмиллисекундные паузы даже на терабайтных хипах, но тогда (на старте проекта) он был экспериментальным в OpenJDK 11.</p><p>3. Ручная настройка G1 — максимизировать предсказуемость через MaxGCPauseMillis и InitiatingHeapOccupancyPercen.</p><p>После недели тестов на стенде с имитацией пиковой нагрузки (JMeter + Gatling) и профилирования через async-profiler, выбор пал на ZGC. Его паузы не превышали 2 мс даже при 32 ГБ куче, а алгоритм «цветных указателей» позволял масштабироваться без блокировок. Риск? Да. ZGC был новым, но его поддержка в последних LTS-версиях и тесты убедили нас.</p><h2>Тонкая настройка и проклятие «тихих» утечек</h2><p>С ZGC мы выставили:</p><p>1. -Xmx48g (с запасом для избежания частых аллокаций),</p><p>2. -XX:SoftMaxHeapSize=40g (чтобы ZGC активнее возвращал память ОС),</p><p>3. -XX:+UseLargePages (снижение overhead на page faults).</p><p>Но через месяц нагрузочного тестирования обнаружили «ползучее» увеличение потребления памяти. Performance-команда, анализируя дампы через Eclipse MAT, нашла проблему: кэш данных транзакций в Apache Ignite не учитывал soft-ссылки, накапливая объекты. Вместо ConcurrentHashMap перешли на `Caffeine` с политикой expiry после 10 секунд, что снизило давление на GC.</p><h2>Команда performance-инженеров: алхимики метрик</h2><p>Работа с perfomance-инженерами напоминала лабораторию безумных ученых. Каждый параметр JVM, каждый HTTP-эндпоинт тестировался через JMH, а Grafana-дашборды визуализировали следующее:</p><p>1. GC pauses (ZGC собирал статистику через -Xlog:gc*),</p><p>2. Allocation rate (до 1.5 ГБ/сек в пиках),</p><p>3. CPU utilization (наши самописные RateLimiter’ы съедали 15% ресурсов).</p><p>Совместно мы написали скрипты на Python, которые автоматически подбирали -XX:ConcGCThreads и -XX:ParallelGCThreads в зависимости от нагрузки на CI/CD стендах. Это сократило время настройки на 70%.</p><h3>Продакшн: огненное крещение</h3><p>После релиза первые дни мы мониторили всё: New Relic для трейсинга медленных методов, Prometheus для сбора JVM-метрик. ZGC не подвел — 99-й перцентиль отклика оставался на уровне 12 мс. Но однажды ночью мы получили алерты по потреблению CPU. Оказалось, фоновый процесс генерации отчетов создавал миллионы временных объектов. Решение: выделили его в отдельный микросервис с выделенным пулом памяти и CMS (ему хватало).</p><h2>Итоги</h2><p>Через полгода система обрабатывала 55k операций/сек с пиковыми паузами GC в 1.8 мс. Главные уроки:</p><p>1. GC — не серебряная пуля. Даже ZGC требует понимания аллокаций в коде.</p><p>2. Performance-инженеры — ваши лучшие союзники. Их взгляд со стороны JVM спас нас десятки раз.</p><p>3. Документировать всё. Наши конфиги и скрипты настройки GC стали стандартом для других команд банка.</p><p>Теперь, когда я вижу, как сервис работает без перебоев, вспоминаю те бессонные недели с дампами и тестами… и понимаю: это того стоило. Ведь в мире highload каждая миллисекунда — это деньги. Или, как говорят у нас в банке, «миллисекунда — миллион».</p>]]></content:encoded>
    </item>
    <item>
      <title>Как не сломать прод? Топ 5 самых частых ошибок при деплое</title>
      <link>https://tproger.ru/articles/kak-ne-slomat-prod--top-5-samyh-chastyh-owibok-pri-deploe</link>
      <comments>https://tproger.ru/articles/kak-ne-slomat-prod--top-5-samyh-chastyh-owibok-pri-deploe?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ne-slomat-prod--top-5-samyh-chastyh-owibok-pri-deploe</guid>
      <description><![CDATA[<p>Вы все сделали идеально, нажимаете кнопку Deploy, и наступает тот самый момент, когда сердце замирает. Прод горит, мониторинги упали, команда в ужасе. Что нужно сделать, чтобы такого не было — рассказываем в статье.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ne-slomat-prod--top-5-samyh-chastyh-owibok-pri-deploe">Как не сломать прод? Топ 5 самых частых ошибок при деплое</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Jenkins]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 23 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Когда вы деплоите, вы не просто заливаете код. Считайте, что это босс на последнем уровне, а значит — привет, ловушки и подводные камни. Ошибки на этом этапе могут стоить дорого: от недовольства техлида до потери клиентов. Мы собрали топ самых частых (и самых болезненных) багов при выкладке — рассказываем, как их избежать.</p><h2>Неправильная настройка инфраструктуры в CI/CD пайплайне</h2><p>Это одна из самых коварных и частых ошибок при деплое, особенно в сложных системах, таких как Kubernetes-кластеры, облака или гибридные инфраструктуры. Эта проблема возникает, когда шаги деплоя в пайплайне не учитывают специфику целевого окружения. Все это может вылиться в непредсказуемое поведение приложения и структуры в целом. Разбираемся, как с этим бороться.</p><h3>Настройте окружение</h3><p>Разные окружения (dev, staging, prod) часто имеют отличия в конфигурации (например, версии библиотек, лимиты ресурсов, настройки сетей). Например, переменные окружения, заданные для staging, перезаписываются в prod — зависимости ломаются.</p><ul><li>Используйте Infrastructure as Code (IaC) инструменты, такие как Terraform или Pulumi, для создания идентичных окружений.</li><li>Храните конфигурации окружений в репозитории (например, в формате YAML или JSON) и применяйте их через CI/CD.</li><li>Настройте переменные окружения через секреты (например, HashiCorp Vault, AWS Secrets Manager) и убедитесь, что они не перезаписываются случайно.</li></ul><h3>Разворачивайте по стратегии</h3><p>В Kubernetes, например, при неверной конфигурации стратегии возможны простои. Pods могут быть удалены до того, как новые успеют стартовать, или новые версии вообще не будут работать.</p><ul><li>В Kubernetes используйте RollingUpdate с настройками maxSurge и maxUnavailable, чтобы новые поды стартовали постепенно, а старые были постоянно доступны.</li><li>Настройте readinessProbe и livenessProbe, чтобы Kubernetes не направлял трафик на неготовые поды.</li><li>Ответственно подходите к настройке стратегии и выбору количества реплик.</li><li>Для Helm-чартов фиксируйте версии (helm dependency update, helm package) и используйте helm upgrade --atomic для автоматического отката при сбое.</li></ul><p>Например, в манифесте Deployment можно указать:</p><h3>Избегайте race conditions</h3><p>Параллельные процессы в CI/CD (например, одновременная сборка и деплой) могут вызывать состояния гонки.</p><ul><li>Настройте блокировки (locks) в CI/CD, чтобы не было параллельных деплоев в одно окружение (например, через environments в GitLab CI).</li><li>Используйте атомарные операции в Helm и Server Side Apply в kubectl.</li></ul><h3>Обрабатывайте ошибки</h3><p>Часто может быть такое, что нет нормальной обработки ошибок (логов, статусов). Например, доступ к сервису пропадает, но пайплайн все равно успешно завершается.</p><ul><li>Регулярно тестируйте пайплайн на staging-окружении, симулируйте реальные сценарии деплоя.</li><li>Проверяйте доступность сервисов после деплоя с помощью health-check скриптов.</li></ul><p>Новую проверку можно, например, добавить так:</p><p>curl --fail http://any-app.example.com/health</p><h2>Нет изоляции переменных окружения и секретов</h2><p>Представьте: в staging-окружении используются тестовые ключи, а в продакшене — боевые. Но из-за ошибки в CI/CD пайплайне или конфигурации staging берет продовые credentials. Как итог — тестовое удаление данных в песочнице стирает боевую базу. Или еще хуже: токены утекают из-за слабых прав доступа к Secret Manager, и вас могут спокойно взломать. Ниже рассказываем, как это пофиксить.</p><h2>Разделяйте секреты по окружениям</h2><p>Если переменные окружения или ключи не разделены между dev, staging и prod, они могут быть случайно использованы в неправильном контексте.</p><ul><li>Храните секреты в Secret Manager (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, Kubernetes Secrets) с четким разделением по окружениям (например, пути secrets/staging/db, secrets/prod/db).</li><li>Используйте префиксы или теги для идентификации окружения (например, STAGING_API_KEY, PROD_API_KEY).</li><li>Настройте права доступа CD так, чтобы пайплайн мог подтягивать только секреты, которые относятся к текущему окружению.</li></ul><p>Например, в Vault это настраивается так:</p><h2>Не храните секреты в коде</h2><p>Иначе утечка неизбежна.</p><ul><li>Уберите секреты из репозиториев и .env-файлов и используйте Secret Manager.</li><li>Для Kubernetes используйте Secret-объекты или интеграцию с внешними менеджерами (например, External Secrets Operator).</li><li>Проверяйте репозитории на утечки с помощью инструментов типа truffleHog или gitleaks.</li></ul><p>Вот пример Kubernetes Secret:</p><h2>Ограничивайте доступ</h2><p>Это принцип Scoped Permissions — с помощью него можно снизить риски случайного или намеренного использования секретов.</p><ul><li>Используйте IAM-роли в облаке (например, AWS IAM Roles for Service Accounts) с минимальными правами.<br /></li><li>Ограничивайте доступ разработчиков к продовым секретам через RBAC или Vault-профили.</li></ul><p>Вот AWS IAM-политика для staging:</p><h2>Ротируйте ключи</h2><p>Это поможет избежать ситуации, когда после инцидента или утечки ключи не обновляются.</p><ul><li>Настройте автоматическую ротацию ключей в Secret Manager (например, AWS Secrets Manager поддерживает ротацию через Lambda).</li><li>После инцидента сразу же ротируйте скомпрометированные ключи и пересоздавайте секреты.</li><li>Логируйте доступ к секретам для аудита (например, через Vault Audit Logs).</li></ul><h2>Неправильная настройка health-checks в Kubernetes или других оркестраторах</h2><p>Неправильная настройка readinessProbe и livenessProbe в Kubernetes — это, можно сказать, классика. Вы обновляете сервис, поды запускаются, но сразу же помечаются как unhealthy. Причина — неправильный readinessProbe или livenessProbe. Например, путь /healthz больше не существует, или проверка уходит в таймаут из-за долгой инициализации. В результате: контейнеры бесконечно рестартуются, сервис недоступен, кластер в панике.</p><h3>Разделяйте назначение проб</h3><p>readinessProbe проверяет, готов ли под принимать трафик, а livenessProbe — не завис ли он. Если их смешать, можно ждать сбой,  например, трафик пойдет на не до конца инициализированный сервис.</p><ul><li>Используйте разные endpoints для проб. Например, /health для readinessProbe (готовность сервиса) и /alive для livenessProbe (проверка зависаний).</li><li>Настройте readinessProbe так, чтобы она возвращала 200 только после полной инициализации (например, подключения к базе).</li><li>Для livenessProbe проверяйте минимальную работоспособность (например, ответ сервера без проверки внешних зависимостей).</li></ul><h3>Учитывай время инициализации</h3><p>Сервис может запускаться медленно, и слишком строгие таймауты приведут к сбоям.</p><ul><li>Установите initialDelaySeconds с запасом, чтобы учитывать время прогрева (например, загрузку кэша или подключение к базе).</li><li>Настройте timeoutSeconds и periodSeconds так, чтобы проба не завершалась слишком быстро, но и не крутилась вечно.</li><li>Используйте failureThreshold для нескольких попыток перед пометкой пода как unhealthy.</li></ul><p>Вот пример для сервиса с долгим стартом:</p><h3>Добавьте grace period</h3><p>Он дает сервису время корректно завершиться перед рестартом.</p><ul><li>Установите terminationGracePeriodSeconds в манифесте Deployment, чтобы под мог завершить запросы перед остановкой.</li><li>Настройте preStop хук, если нужно выполнить действия перед завершением.</li></ul><h3>Тестируйте на staging</h3><p>Проблемы с пробами часто всплывают только в проде, если staging не идентичен.</p><ul><li>Убедитесь, что staging-окружение повторяет прод по конфигурации и нагрузке.</li><li>Добавьте автоматические тесты в CI/CD для проверки endpoints (/health, /alive) перед деплоем.</li><li>Симулируйте реальные сценарии (например, медленный старт или сбой зависимостей) на staging.</li></ul><p>В CI/CD можно добавить:</p><h2>Неправильная работа с конфигурациями через Helm или Kustomize</h2><p>Представьте: обновили Helm-чарт, но в values.yaml остались старые переменные, которые ломают новые настройки. Или Kustomize патчит не тот ресурс, и манифесты применяются с ошибками. В итоге: поды падают, сервисы недоступны, и никто не знает что делать. Рассказываем, что с этим делать.</p><h3>Валидируйте Helm-чарты перед деплоем</h3><p>Так можно найти ошибки до применения манифестов.</p><ul><li>Используйте helm template или helm install –dry-run для рендеринга манифестов и их проверки.</li><li>Включите schema validation для values.yaml с помощью JSON Schema (поддерживается Helm v3.6+).</li><li>Проверяйте манифесты через kubeval или kubectl apply –dry-run=server для подтверждения соответствия Kubernetes API.</li></ul><h3>Тестируйте Kustomize-конфигурации</h3><p>Kustomize может патчить не то, что вы ожидали, если селекторы или структура неправильные.</p><ul><li>Прогоняйте kustomize build для генерации итоговых манифестов и проверяйте их перед деплоем.</li><li>Используйте kubectl apply –dry-run=server -k . для валидации в кластере.</li><li>Проверяйте селекторы патчей в kustomization.yaml на точность (например, name и namespace).</li></ul><h3>Управляйте версиями и структурой</h3><p>Несогласованность версий чартов или манифестов приводит к неожиданным изменениям.</p><ul><li>Фиксируйте версии Helm-чартов в Chart.yaml и используйте точные теги (например, 1.2.3, а не latest).</li><li>Храните values.yaml отдельно для каждого окружения (values-staging.yaml, values-prod.yaml).</li><li>Для Kustomize используйте базовые манифесты и патчи, разделённые по окружениям (например, overlays/staging, overlays/prod).</li></ul><h3>Документируйте и мониторьте</h3><p>Без документации сложно понять, что изменилось, а без мониторинга — почему упало.</p><ul><li>Ведите CHANGELOG.md для Helm-чартов и Kustomize патчей, описывая изменения в структуре и значениях.</li><li>Логируйте команды деплоя (helm upgrade –debug, kubectl apply -k .) для отладки.</li><li>Настройте мониторинг статуса подов через Prometheus, чтобы сразу видеть сбои из-за ошибок конфигурации.</li></ul><p>Вот пример получения подробного лога helm:</p><h2>Нет политики управления версиями артефактов</h2><p>С этой штукой шутить нельзя. Каждый новый билд заливается с тегом latest, и через неделю никто не помнит, какая именно версия работает в проде. А если что-то сломалось, откатиться просто невозможно: старый образ либо затерт в registry, либо его никто не пометил. На выходе — паника и хаос.</p><h3>Используйте семантическое версионирование (semver) или уникальные теги</h3><p>Так банально будет однозначность и отслеживаемость версий.</p><ul><li>Присваивайте образам теги по схеме semver (1.2.3), commit hash (abc1234) или временной метке (20250429-1345).</li><li>Избегайте latest в продакшене — это бомба замедленного действия.</li><li>В CI/CD автоматически генерируйте теги на основе версии приложения или Git commit.</li></ul><p>Вот пример тег-образа:</p><p>docker build -t my-app:1.2.3 -t my-app:$(git rev-parse –short HEAD)</p><h3>Фиксируйте версии в манифестах и пайплайнах</h3><p>Immutable теги гарантируют, что деплой всегда использует ожидаемую версию.</p><ul><li>В Kubernetes манифестах указывайте точные теги вместо latest.</li><li>Настройте CI/CD так, чтобы тег образа передавался в Helm или Kustomize как параметр.</li><li>Используйте инструменты вроде helm upgrade с фиксированными версиями чартов.</li></ul><h3>Настройте retention policy для артефактов</h3><p>Хранение старых образов позволяет откатиться к стабильной версии.</p><ul><li>В container registry (Docker Hub, AWS ECR, Harbor) настройте правила хранения, чтобы сохранять последние N версий или образы за последние X дней.</li><li>Регулярно очищайте устаревшие артефакты, но сохраняйте критические версии (например, те, что в проде).</li><li>Используйте теги для маркировки стабильных версий (например, prod-1.2.3).</li></ul><p>Пример — AWS ECR lifecycle policу:</p><h3>Автоматизируйте версионирование в CI/CD</h3><ul><li>В CI/CD пайплайне генерируйте теги на основе Git тегов, commit hash или переменных окружения.</li><li>Проверяйте, что образ с нужным тегом пушится в registry и используется в деплое.</li><li>Добавьте шаг валидации манифестов, чтобы убедиться, что теги фиксированы.</li></ul><p>Ошибки при деплое могут вылиться в серьезные проблемы для проекта. DevOps-инженеры не просто запускают пайплайны, а следят за жизненным циклом продукта — от инфраструктуры до мониторинга. Документируйте ошибки, создавайте чек-листы, автоматизируйте каждый шаг и учитесь на инцидентах. И главное — никогда не деплойте в пятницу вечером.</p>]]></content:encoded>
    </item>
    <item>
      <title>Делаем безопасные приложения: зачем нужен DevSecOps</title>
      <link>https://tproger.ru/articles/delaem-bezopasnye-prilozheniya--zachem-nuzhen-devsecops</link>
      <comments>https://tproger.ru/articles/delaem-bezopasnye-prilozheniya--zachem-nuzhen-devsecops?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/delaem-bezopasnye-prilozheniya--zachem-nuzhen-devsecops</guid>
      <description><![CDATA[<p>Василий Степаненко, генеральный директор облачного провайдера Nubes, рассказывает, как подход DevSecOps помогает строить безопасные приложения с самого начала.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/delaem-bezopasnye-prilozheniya--zachem-nuzhen-devsecops">Делаем безопасные приложения: зачем нужен DevSecOps</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Роскомнадзор]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DevSecOps]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 May 2025 14:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сейчас информационная безопасность — это не просто тренд, а необходимость, учитывая огромный масштаб киберугроз. Программное обеспечение обязано становиться защищённым с самого момента его создания и на всех дальнейших этапах вплоть до непосредственной эксплуатации. О том, как сделать разработку ПО безопасной с самого старта с помощью методики DevSecOps, рассказывает генеральный директор облачного провайдера Nubes Василий Степаненко.</p><h2>Что такое DevSecOps</h2><p>DevSecOps образовано от слов development (разработка), security (безопасность) и operations (эксплуатация или операции). Это подход к разработке приложений, при котором безопасность учитывается на каждом этапе CI/CD, чтобы минимизировать стоимость и повысить скорость исправления ошибок. К нему относятся не только инструменты, по типу различных сканеров библиотек и кода, но и определённые договоренности между разработчиками, DevOpsами и безопасниками.</p><p>Разработка приложений сегодня похожа на приготовление салата: берутся овощи, мясо, масла и приправы, все смешивается — и получается блюдо. Если хоть один ингредиент окажется плохим, то весь салат будет испорчен. Разработчики не всё пишут сами: в DevOps из общедоступных репозиториев могут браться готовые библиотеки: их соединяют, и в результате получается приложение (тот самый салат).</p><p>Если хоть одна из библиотек окажется плохой или дописанный разработчиком код для объединения библиотек будет некачественным, то весь салат будет непригодным для употребления. Стоимость исправления ошибки велика, ведь нужно найти испорченный ингредиент и заменить его. Однако с ПО все еще сложнее: библиотеки постоянно обновляются, а потому не понятно, в какой момент весь салат может стать непригодным — нужно постоянно следить за всеми ингредиентами блюда.</p><h2>Лицо врага</h2><p>Не все библиотеки с открытым исходным кодом, выложенные в публичные репозитории, можно считать безопасными. Их авторы часто остаются неизвестными — это могут быть как энтузиасты, так и злоумышленники, включая хакеров или представителей недружественных государств. В итоге даже при использовании сложных систем защиты — межсетевых экранов, VPN, антивирусов, DLP и PAM — компания может оказаться уязвимой. Уязвимость может прийти изнутри — через стороннюю библиотеку, которая станет «троянским конём» и даст злоумышленникам доступ к данным, производственным процессам и критичной инфраструктуре.</p><p>Процент небезопасных приложений в исследованиях российских компаний, занимающихся защитой приложений, в разные годы отличается и зависит от отрасли. Так, про финансовую отрасль <a href="https://plusworld.ru/daily/bezopasnost/positive-technologies-kriticheski-opasnie-uyazvimosti-vstrechautsya-v-90-sistem-dbo/">Positive Technologies в 2015 говорили о 90%</a>, в 2016 г. — о 71%, а в 2017 – о 56%. Если замеченный Positive Technologies тренд защищенности приложений финансового сектора сохранился бы в тех же пропорциях, то сегодня процент был бы ещё меньше. Однако <a href="https://mobile-stingray.ru/research/security-analysis">исследование «Стингрей Технолоджис»</a> 2024 г. говорит о 56% опасных приложений в финтехе.</p><p><a href="https://www.cnews.ru/news/line/2025-01-31_67_finansovyh_kompanij_schitayut">Ассоциация ФинТех проводила исследование</a>, и в 2025 году 82% компаний назвали разработку на базе открытого исходного кода оптимальной с точки зрения сроков и удобства внедрения. При этом использование таких библиотек несёт в себе риски на протяжении всего жизненного цикла продукта, и риски для данных, которые используются в приложениях.</p><p>У крупных финтех-компаний DevSecOps уже в работе — они вкладываются в безопасную разработку и задают статистику. Но для большинства игроков из второй и третьей лиги всё только начинается: подход к безопасности — пока больше на уровне обсуждений, чем практики.</p><h2>Какие есть риски для данных</h2><p>Основные риски для данных обычно связаны с нарушением их конфиденциальности. В процессе разработки важно проводить тесты, а для этого нужны данные, причём не сильно отличающиеся от настоящих. Также важен их объём, иначе не получится провести нормальные нагрузочные тесты. Выгрузка реальных данных — самый заманчивый вариант. Но если для стендов Dev и Test используются облачные среды или в процессах разработки задействованы подрядчики, то некоторые организации могут на такое не решиться из-за требований к ИБ. И это логично, поскольку в Prod есть комплексный подход к защите, а на стендах Dev и Test меры защиты могут быть минимизированы.</p><p>Один из способов снизить риски — использовать системы маскирования: они помогают обезличить персональные и финансовые данные (например, номера карт и счетов). Сейчас действует приказ Роскомнадзора №996 от 2013 г., но, необходимо отметить,  уже опубликован <a href="https://regulation.gov.ru/Regulation/Npa/PublicView?npaID=155867#">проект приказа Роскомнадзора</a> «Об утверждении требований к обезличиванию персональных данных и методов обезличивания персональных данных», который его заменит.</p><p>Контейнеры стали стандартом для запуска приложений, но вместе с удобством они приносят и риски — особенно в защите данных. Да, контейнеризация улучшает доступность и масштабируемость, но не решает проблем с конфиденциальностью и целостностью «из коробки». На российском рынке уже существуют отечественные платформы контейнеризации, например, Штурвал, DeckHouse, в которых сразу учтены механизмы безопасности либо есть накладные средства для kubernetes от Luntry, PT, Kaspersky и т.д.</p><h2>Как внедрять DevSecOps</h2><p>DevSecOps — подход, при котором безопасность вшита в код на всех этапах. Уязвимости ищут не в самом конце, а прямо по ходу разработки: в pull request'ах, CI/CD и при работе с зависимостями. Такой подход требует, чтобы разработчики, DevOps и специалисты по безопасности работали как одна команда, а не передавали задачи «по цепочке» в последний момент.</p><p>При этом каждой компании может требоваться сугубо индивидуальный набор инструментов — всё зависит от зрелости команды и доступных ресурсов (особенно человеческих). Важно договориться о недопустимых событиях, об уровне риск-аппетита с бизнесом, разработать модель угроз. Некоторым клиентам нужно наличие собственного доверенного репозитория, а для других достаточно GitHub, GitLab и т.д.</p><p>После аудита начинается внедрение. На этом этапе команда определяет инструменты, выстраивает процесс проверки кода и решает, как именно безопасность будет встроена в разработку.</p><p>Cloud Native — это подход к разработке приложений, изначально ориентированных на работу в облачной среде и интеграцию с облачными сервисами. Сегодня большинство новых решений проектируются именно так. Для безопасной работы таких приложений важно не только адаптировать архитектуру под облако, но и выстраивать взаимодействие с провайдером: от заключения договора до работы с API. Облачные провайдеры часто предлагают инструменты, которые помогают встроить безопасность в процесс разработки. У многих есть готовые сервисы Kubernetes, в том числе с учётом требований информационной безопасности. Также доступны решения уровня WAF и инструменты анализа безопасности кода (например, SAST, DAST, SCA) — иногда по подписке, как в случае с некоторыми российскими платформами.</p><p>Начать можно с внедрения бесплатных решений — например, SAST, SCA и DAST, которые уже можно интегрировать в текущий DevOps-стек. Когда команда понимает ценность и пользу этих проверок, можно переходить к платным продуктам с расширенными возможностями.</p><p>Затем практики DevSecOps внедряются в небольших проектах — так можно оценить эффективность их работы, заметить возможные недостатки, скорректировать решения, чтобы на выходе получить отличный рабочий вариант для применения в крупных проектах с потенциальным увеличением масштабов в будущем.</p><p>Однако не стоит думать, что это финальная точка. DevSecOps — постоянный процесс: мониторинги, улучшения, обновления стандартов ИБ и поиски идеальных практик.</p><h2>Цена вопроса</h2><p>Вернемся к примеру с салатом. Все любят разное: кто-то — «цезарь», другой – «селёдку под шубой». Разные языки программирования, риск-аппетиты в командах в отношении принятия требований безопасности, цели внедрения DevSecOps (кому-то нужно в итоге получить сертификат, а кому-то страшно за конечный продукт и важно обеспечить реальную максимальную безопасность) — всё это не позволяет создать коробочный продукт с фиксированной ценой, хотя на рынке есть те, кто предлагает поставить 2-3 сканера и удовлетвориться этим, назвав DevSecOps.</p><p>При внедрении DevSecOps стоит учитывать затраты на разделение сред Dev, Test и Prod — это не входит в концепцию по западным лекалам. Однако от руководства компаний-клиентов нам часто поступают запросы на усиление безопасности разработки, поскольку разработчик перепутал стенд, после чего важнейшие системы компании пострадали. Вынести в облако Dev и Test и оставить у себя Prod кажется хорошей идеей (или наоборот). Для некоторых она способна полностью решить вышеупомянутую проблему.</p><p>Однако тем, кому важно углубиться именно в DevSecOps, следует внедрить процесс анализа библиотек с открытым исходным кодом. Мы не знаем разработчиков этих библиотек, в сообществах могут поменяться цели и их лидеры. Они, в свою очередь, вполне могут оказаться хакерами, желающими распространить через эти библиотеки свои инструменты.</p><h3>Сканеры библиотек могут быть бесплатными и платными</h3><p><b>Статический анализ кода (SAST)</b> — может быть реализован через бесплатные инструментов, таких как SonarQube, semgrep, gitleaks/trufflehog, но есть и платные – PVS-Studio, Svace, Solar appScreener и т.д.</p><p><b>Динамический анализ кода (DAST)</b> — можно осуществить с помощью бесплатных инструментов OWASP ZAP, Nuclei, NMAP, Burp Suite или платных, например, PT BlackBox.</p><p>И другие элементы DevSecOps (анализ мобильных приложений, API и т.д.) можно реализовать с использованием платных или бесплатных инструментов.</p><p>Таким образом, если не продавать какой-то сканер под видом DevSecOps, то сложно сказать цену для клиента, всё зависит от пожеланий. Если все же очень нужно грубо оценить DevSecOps, то его внедрение обходится примерно в одну треть от стоимости процессов DevOps, но это при использовании бесплатных инструментов. Платные автоматически увеличивают стоимость.</p><p>В процессы Ops можно также включить элемент безопасности WAF (Web Application Firewall). Доступны как бесплатные варианты (например, ModSecurity), так и платные (PTAF, Гарда WAF, Вебмониторэкс и т.д.).</p><p>Начинать стоит с бесплатных инструментов, поэтапно внедряя их в CI/СD, взаимодействуя с командой DevOps. По сути, DevSecOps – это консалтинг с возможностью применения платных инструментов, если к ним готова команда DevOps. И мы абсолютно уверены, что ради его внедрения точно не стоит жертвовать командой разработки. Кстати, для трактовки отчётов сканеров зачастую используются те же консалтеры, что внедряли DevSecOps.</p><p>Нельзя забывать и об обучении команды практикам безопасной разработки. Тут следует упомянуть, что сканеры типа CheckMarx наглядно демонстрируют эксплуатацию уязвимостей. Часто вендоры сводят DevSecOps к сканерам, консалтеры — к процессам, а про людей и их обучение — забывают.</p><p>Просто прочитать пару статей про DevSecOps — недостаточно. Команда должна <b>понимать реальные уязвимости</b>: как они появляются, чем опасны и как их избежать. Сейчас в России появляются обучающие платформы, которые показывают это на практике — с примерами уязвимого кода, проблемных библиотек и типовых ошибок. Но останавливать разработку ради курсов на две недели — нереально. Поэтому лучше встроить обучение в рабочий ритм: хотя бы один час в неделю на всю команду. Это немного, но в долгосрочной перспективе даёт устойчивую культуру безопасности. Стоимость зависит от числа участников и выбранных курсов — но в любом случае это обойдется дешевле, чем инцидент в проде.</p><h2>Требования к безопасной разработке ПО</h2><p>Уже сейчас требования по безопасной разработке (а если есть DevOps, то по сути это требования к внедрению DevSecOps) появились в:</p><ul><li>ГОСТ Р 57580.1-2017: СМЭ.6, СМЭ.7, ЖЦ.4, ЖЦ.5, ЖЦ.6, ЖЦ.7. ЖЦ.24;</li><li>PCI DSS 4.0.1: 6.2, 6.3, 6.5;</li><li>ГОСТ Р ИСО/МЭК 15408-3-2013: ALC_CMC, ALC_CMS, ALC_DEL, ALC_DVS, ALC_FLR, ALC_LCD, ALC_TAT.</li></ul><p>Если речь идет о <b>средствах защиты информации (СЗИ)</b>, которые нужно будет сертифицировать по требованиям ФСТЭК или ФСБ, важно помнить: <b>инструменты, которые вы используете для сканирования кода, тоже должны быть сертифицированы.</b> Иначе при испытаниях возникнут сложности — лаборатории не примут результаты без официальной документации.</p><p>Если же приложение не попадает под категорию СЗИ, жёстких требований к инструментам нет. Главное — понимать, от каких угроз вы защищаетесь, и подбирать инструменты под реальные задачи: будь то уязвимости в зависимостях, ошибки в логике или неправильные настройки.</p><h2>Куда будет развиваться DevSecOps</h2><p>Очевидно, что DevSecOps ждет намного более массовое внедрение и развитие — устранить проблемы на этапе разработки дешевле, чем позже латать пробоины в ИБ.</p><p>Скорость появления эксплоитов растёт — и это прямая угроза. Если раньше у команд была пара месяцев, чтобы закрыть уязвимость до начала атак, то теперь — всего несколько дней. <a href="https://www.opennet.ru/opennews/art.shtml?num=62065">Исследование Google</a> показало: в 2018–2019 годах эксплойты появлялись в среднем через 63 дня после патча, в 2020 — через 44, в 2021 и 2022 — уже через 32, а в 2023 году — всего через 5 дней. А с развитием ИИ этот срок может сократиться ещё сильнее.</p><p>В России сильные программисты, но собственные новации в сфере ИБ традиционно появляются позже, чем на Западе — чаще в виде адаптаций или копий существующих решений. Однако импортозамещение меняет ландшафт: появляются десятки отечественных продуктов, которых просто нет в зарубежных базах уязвимостей. А значит — и в популярных сканерах кода они тоже не учтены. Это открывает окно возможностей: российские команды смогут развивать собственные инструменты безопасности — от сканеров и доверенных репозиториев до платформ для DevSecOps. Плюс эти принципы начнут постепенно проникать в программы обучения в вузах.</p><p>Уже существуют реестр отечественного ПО (ведется под патронажем Минцифры), реестр сертифицированных средств защиты ФСТЭК России, реестр ФСБ России, реестр отечественных ПАК (ведётся Минпромторгом). Чтобы попасть туда в ближайшие годы, разработчики должны будут не просто заявлять о безопасности, а доказывать на практике — в процессах, документации и архитектуре. Это станет драйвером роста: инструменты для безопасной разработки будут развиваться, а вместе с ними — и культура DevSecOps.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что такое SOC (Security Operations Center) и как он защищает данные</title>
      <link>https://tproger.ru/articles/chto-takoe-soc--security-operations-center--i-kak-on-zashhishhaet-dannye</link>
      <comments>https://tproger.ru/articles/chto-takoe-soc--security-operations-center--i-kak-on-zashhishhaet-dannye?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-takoe-soc--security-operations-center--i-kak-on-zashhishhaet-dannye</guid>
      <description><![CDATA[<p>Что такое Security Operations Center. Показываем, как SOC защищает данные. Рассматриваем основные метрики и нюансы ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-takoe-soc--security-operations-center--i-kak-on-zashhishhaet-dannye">Что такое SOC (Security Operations Center) и как он защищает данные</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DevSecOps]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 21 May 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Киберугрозы сегодня — это уже не просто попытки взлома или внедрения вирусов, а сложные, многоступенчатые атаки, которые могут парализовать работу целых корпораций. Злоумышленники активно используют ИИ для генерации фишинга, автоматизации атак и обхода традиционных систем защиты. В таких условиях стандартных мер безопасности уже недостаточно — нужен централизованный механизм, который не просто фиксирует угрозы, а предупреждает их.</p><p>И такой механизм существует — называется он <b>Security Operations Center (SOC)</b>. Структура превращает хаотичный поток событий в управляемый процесс, сочетая технологии, аналитику и экспертизу для раннего выявления и нейтрализации угроз.</p><p>В статье разберем принципы работы, задачи и преимущества использования SOC, а также узнаем, почему без внедрения новой концепции безопасности даже защищенная инфраструктура остается уязвимой.</p><h2>Основные задачи SOC</h2><p>Security Operations Center — это специализированное подразделение, отвечающее за непрерывный мониторинг системы и защиту информационных активов организации. Ключевая задача SOC — не просто фиксировать угрозы, а оперативно на них реагировать, минимизируя возможный ущерб. В отличие от классических ИБ-служб, центр работает в режиме 24/7, анализируя потоки данных из различных источников — сетевого оборудования, серверов, конечных устройств, облачных сервисов и приложений.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-04-28/b425db9f-7d1c-4303-9a14-2377bea63950.jpg" alt="" /></figure><p>Одна из главных проблем, с которой сталкиваются современные компании, — это нехватка ресурсов для обработки огромного объема событий безопасности. Большинство организаций просто не успевают своевременно реагировать на инциденты из-за перегруженности аналитиков ложными срабатываниями.</p><p>Именно здесь на помощь приходит Центр управления информационной безопасностью, использующий автоматизированные системы вроде SIEM (Security Information and Event Management) и SOAR (Security Orchestration, Automation and Response). Эти инструменты фильтруют шум, выделяя действительно критичные угрозы.</p><p>Рассмотрим главные задачи SOC подробно.</p><h3>Мониторинг и обнаружение</h3><p>Первая и самая очевидная функция SOC в информационной безопасности — постоянный контроль активности в корпоративной сети.</p><p>Это не пассивное наблюдение, а направленный поиск аномалий:</p><ul><li>нестандартных запросов к базам данных;</li><li>подозрительных входов в систему;</li><li>неавторизованных изменений конфигураций и т.д.</li></ul><p>Например, если сотрудник в ночное время пытается скачать большие объемы информации, система зафиксирует это событие и передаст его аналитикам для проверки.</p><p>Но мониторинг — лишь начальный этап. Современные злоумышленники применяют сложные техники, по типу атак с нулевым днем или латентные угрозы, которые могут оставаться незамеченными месяцами.</p><p>Чтобы противодействовать им, SOC использует Threat Intelligence (отслеживание угроз) — сбор и анализ данных о новых векторах атак, уязвимостях и тактиках хакеров. Например, если в даркнете появляется информация о продаже данных компании, SOC может оперативно проверить, не связана ли утечка с текущими процессами в инфраструктуре.</p><h3>Реагирование и восстановление</h3><p>Обнаружение угроз — только половина дела. Гораздо важнее качественное реагирование. SOC не просто констатирует факт атаки, а предпринимает конкретные действия — блокирует вредоносные IP-адреса, изолирует зараженные узлы, отзывает в доступе скомпрометированным учеткам. В случае с программами-вымогателями счет идет на минуты — чем быстрее будет остановлено распространение, тем меньше данных окажется зашифровано.</p><p>После нейтрализации угрозы начинается этап восстановления. SOC координирует откат систем к последней «чистой» версии, проверяет резервные копии на предмет повреждений, обновляет правила безопасности, чтобы предотвратить повторные атаки. Если инцидент произошел из-за уязвимости в ПО, команда обеспечивает установку патчей не только на пораженных машинах, но и во всей инфраструктуре.</p><h3>Соответствие стандартам и аудит</h3><p>Помимо технических аспектов, SOC играет важную роль в соблюдении регуляторных требований. Многие отрасли — финансы, здравоохранение, госсектор — обязаны соответствовать строгим стандартам вроде PCI DSS, HIPAA или GDPR.</p><p>SOC помогает вести журналы событий, готовить отчеты для аудиторов, а также оперативно реагировать на инциденты, которые могут повлечь штрафы или репутационные потери.</p><h3>Актуализация методов: эволюция угроз = эволюция SOC</h3><p>Киберугрозы не стоят на месте, и SOC вынужден адаптироваться к новым вызовам. Если раньше основное внимание уделялось защите периметра, то сейчас акцент сместился на поведенческий анализ и проактивную защиту.</p><p>Современные центры мониторинга используют машинное обучение для выявления аномалий в поведении пользователей, а также внедряют технологии обмана (Deception Technology). Специальное ПО создает ложные цели, чтобы выявить злоумышленников, уже проникших в сеть.</p><p>При этом эффективность центра безопасности SOC зависит не только от технологий, но и от слаженной работы команды. Аналитики, инженеры, специалисты по киберразведке должны действовать как единый механизм. Только тогда организация сможет противостоять даже самым изощренным атакам.</p><h3>Преимущества SOC</h3><p>Развертывание принципов SOC или Центра управления безопасностью трансформирует подход к защите данных, предлагая комплексные решения вместо точечных мер.</p><p>Главные плюсы такого подхода:</p><ul><li>В отличие от разрозненных систем, SOC обеспечивает единую точку мониторинга, где анализируются данные с сетевых устройств, серверов, рабочих станций и облачных сервисов.</li><li>Постоянный аудит уязвимостей и автоматизированное тестирование на проникновение позволяют выявлять слабые места до того, как их обнаружат злоумышленниками. Например, SOC находит неправильно настроенные правила доступа в облачном хранилище или подозрительную активность в доменных службах, что особенно актуально в условиях атак на службы каталогов.</li><li>Многие стандарты, такие как PCI DSS, ISO 27001 и GDPR, требуют не только внедрения защитных механизмов, но и доказательств их работоспособности. SOC автоматизирует сбор доказательной базы: журналы событий, отчеты об инцидентах, записи реагирования. Это избавляет компанию от рутинной подготовки к аудитам и снижает риски санкций.</li><li>Хотя развертывание центра требует инвестиций, это сокращает прямые и косвенные убытки от кибер-инцидентов. По расчетам <a href="https://www.ponemon.org/">Ponemon Institute</a>, средняя стоимость утечки данных в 2023 году составила $4.45 млн, при этом компании с SOC тратят на ликвидацию последствий на 30-40% меньше.</li><li>Современные SOC используют машинное обучение для анализа паттернов атак и предсказания новых векторов угроз. Это особенно ценно в условиях, когда злоумышленники применяют ИИ для генерации вредоносного кода и фишинговых кампаний.</li><li>По мере роста компаний традиционные методы безопасности становятся неэффективными из-за все большей поверхности атаки. Гибкая архитектура SOC позволяет адаптировать процессы мониторинга и реагирования без полного пересмотра инфраструктуры.</li></ul><h2>Какие инструменты и технологии используются в SOC</h2><p>Современный Security Operations Center — это сложный технологический комплекс, где различные решения интегрированы в единую экосистему. Основу составляет SIEM-система, которая агрегирует данные из всех источников — сетевого оборудования, серверов, приложений. Популярные платформы вроде Splunk или IBM QRadar не просто собирают логи, но и выявляют аномалии с помощью алгоритмов машинного обучения.</p><p>Для автоматизации рутинных задач применяют SOAR-платформы. Они создают сценарии реагирования: например, при обнаружении подозрительного файла система автоматически изолирует зараженный узел, отправляет уведомление аналитикам и обновляет правила межсетевого экрана. Такой подход особенно эффективен против массовых атак, где скорость реакции критична.</p><p>Обнаруживают угрозы на конечных точках EDR/XDR-решения (Endpoint Detection and Response / Extended Detection and Response). В отличие от традиционных антивирусов, эти системы анализируют поведение процессов, выявляют даже неизвестные вредоносные программы. XDR идет дальше, объединяя данные не только с компьютеров, но и из облачных сервисов, почтовых систем. По статистике <a href="https://www.group-ib.com/">Group-IB</a>, использование EDR снижает успешность атак на конечные точки на 40-60%.</p><p>Сетевую безопасность контролируют IDS/IPS (системы обнаружения и предотвращения вторжений). Они работают как «цифровые дозорные», анализируя трафик в реальном времени. Современные решения, по типу Darktrace, используют ИИ для выявления даже замаскированных атак, включая латеральные перемещения внутри сети.</p><p>Отдельного внимания заслуживает службы Threat Intelligence. Платформы вроде Recorded Future или отечественной ThreatLook автоматически обновляют базы индикаторов компрометации (IoC), что позволяет SOC блокировать атаки на ранних этапах.</p><p>Для управления уязвимостями применяют сканеры вроде Tenable.io или Rapid7, которые выявляют слабые места в ПО и конфигурациях. А технологии UEBA (User and Entity Behavior Analytics) помогают обнаружить инсайдерские угрозы, анализируя отклонения в поведении пользователей.</p><p>Важно понимать, что эффективность SOC зависит не от отдельных инструментов, а от их интеграции. Например, когда SIEM получает предупреждение от EDR, SOAR может автоматически запустить процедуру изоляции устройства, а разведка киберугроз (Threat Intelligence) — проверить хэш файла в базах. Комплексный подход превращает разрозненные данные в оперативную информацию, на основе которой принимаются решения.</p><p>Российские компании все чаще выбирают гибридные модели, сочетая облачные SIEM с локальными решениями для обработки чувствительных данных. Этот тренд особенно актуален в свете требований регуляторов к хранению информации внутри страны.</p><h2>Команда SOC: кто работает и за что отвечает</h2><p>Эффективность Security Operations Center определяется не только технологиями, но и людьми, которые управляют этими системами. В типичном SOC работает несколько категорий специалистов со своими зонами ответственности.</p><p>Первая линия обороны — аналитики первого уровня (L1). Их задача — первичная обработка событий безопасности:</p><ul><li>они фильтруют ложные срабатывания;</li><li>проверяют базовые индикаторы компрометации;</li><li>выявляют сложные случаи.</li></ul><p>Эти специалисты работают по готовым сценариям (playbooks), что позволяет быстро обрабатывать до 70% рутинных инцидентов.</p><p>Когда ситуация требует более глубокого разбора, в дело вступают аналитики второго уровня (L2):</p><ul><li>они исследуют цепочки атак;</li><li>анализируют поведение злоумышленников в сети;</li><li>определяют масштаб компрометации.</li></ul><p>Например, если система зафиксировала подозрительную активность в Active Directory, служба L2 не просто проверит конкретное событие, но и проанализирует возможные перемещения злоумышленников.</p><p>Самые сложные случаи — компрометация нулевого дня, целевые атаки или скрытые угрозы — попадают к аналитикам третьего уровня (L3). Эти эксперты сочетают навыки реверс-инжиниринга, цифровой криминалистики и анализа вредоносного кода. Они могут разобрать логику работы нового вируса, восстановить хронологию атаки или выявить утечку данных даже при отсутствии явных следов.</p><p>Отдельная роль отводится инженерам SOC — они поддерживают работоспособность SIEM, SOAR и других платформ. Эти специалисты настраивают правила корреляции, интегрируют новые источники данных и следят за тем, чтобы системы реагировали на актуальные угрозы. В крупных SOC есть и DevOps-инженеры, которые автоматизируют процессы мониторинга и реагирования.</p><p>Проактивным поиском занимаются охотники за угрозами (Threat Hunters). В отличие от аналитиков, которые исследуют уже обнаруженные инциденты, эти специалисты ищут скрытые компрометации, анализируя аномалии в поведении систем и пользователей. По данным исследования <a href="https://www.ptsecurity.com/">Positive Technologies</a>, компании с выделенными службами Threat Hunters обнаруживают на 40% больше скрытых угроз.</p><p>После серьезных инцидентов в работу включаются форензик-специалисты. Они восстанавливают полную картину атаки: какие данные были похищены, какие системы затронуты, как злоумышленники получили доступ. Эти эксперты особенно востребованы при расследовании утечек или атак на критическую инфраструктуру.</p><p>За стратегическое направление отвечает руководитель SOC (SOC-менеджер). Этот специалист координирует работу команды, взаимодействует с другими подразделениями компании и переводит технические детали инцидентов на язык бизнес-рисков. В крупных организациях есть также директор по реагированию на инциденты, который управляет кризисными ситуациями.</p><p>Особняком стоят красные команды (Red Team) — они моделируют атаки, чтобы проверить устойчивость защиты. Их работа помогает выявить слабые места до того, как ими воспользуются реальные злоумышленники. По статистике <a href="https://www.group-ib.com/">Group-IB</a>, регулярные тестирования Red Team снижают успешность внешних атак на 25-35%.</p><p>В небольших SOC один специалист может совмещать несколько ролей. Например, аналитик L2 занимается и охотой на киберугрозы, а инженер — настройкой автоматизации. Но по мере роста компании разделение обязанностей становится критичным для эффективной работы.</p><p>Ключевой тренд последних лет — развитие гибридных моделей, когда часть задач (например, мониторинг 24/7) передается на аутсорсинг, а сложные расследования остаются за внутренней командой. Такой подход позволяет даже средним компаниям получить уровень защиты, сопоставимый с крупными игроками.</p><h2>Модель работы SOC</h2><p>Современный Security Operations Center функционирует по четко выверенной схеме, адаптируя свои процессы под конкретные угрозы и бизнес-требования. В основе лежит цикличная модель, сочетающая постоянный мониторинг, оперативное реагирование и пост-анализ.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-04-28/68aea0be-6e11-4907-a152-0d3ddf8980b1.jpg" alt="" /></figure><p>Первичное обнаружение угроз происходит через системы сбора данных — SIEM-платформы агрегируют информацию с сетевого оборудования, конечных точек, облачных сервисов и приложений. Современные SOC обрабатывают в среднем от 10 000 до 100 000 событий ежечасно, при этом только 5-7% из них требуют вмешательства аналитиков.</p><p>Выявленные аномалии проходят многоступенчатую верификацию. На первом уровне автоматизированные правила и базовые корреляции отсеивают до 60% ложных срабатываний. Оставшиеся события попадают к аналитикам, которые определяют критичность по шкале CVSS (Common Vulnerability Scoring System) или внутренним метрикам. Например, попытка входа в систему с необычного местоположения может быть безобидной, но если она совпадает с активностью в даркнете — это повод для немедленного реагирования.</p><p>Процесс реагирования варьируется в зависимости от типа угрозы. Для нейтрализации  массовых атак (фишинг, DDoS) часто применяют автоматизированные сценарии через SOAR-платформы: блокировка IP-адресов, изоляция зараженных узлов, отзыв доступов.</p><p>Целевые атаки требуют ручного расследования — аналитики восстанавливают цепочку компрометации, используя данные EDR-систем и сетевых датчиков. По данным <a href="https://www.ptsecurity.com/">Positive Technologies</a>, среднее время нейтрализации сложного инцидента сократилось с 56 до 18 часов за последние 3 года благодаря улучшению инструментария.</p><p>После устранения угрозы начинается фаза пост-анализа. Специалисты изучают артефакты атаки, определяют уязвимости в инфраструктуре и разрабатывают рекомендации. Например, если инцидент произошел из-за устаревшего ПО, SOC может инициировать внеплановое обновление или временное отключение сервиса.</p><p>Интеграция с DevSecOps — ключевой тренд последних лет. SOC все чаще участвует в жизненном цикле разработки: анализирует код на уязвимости, тестирует конфигурации облачных сервисов, проверяет CI/CD-цепочки. Это позволяет выявлять проблемы на этапе проектирования, а не эксплуатации.</p><p>Уровень зрелости SOC оценивают по 5-ступенчатой модели:</p><ul><li>Реактивный — реагирование только на явные инциденты.</li><li>Проактивный — базовый мониторинг и элементарная автоматизация.</li><li>Прогнозирующий — использование инструментов отслеживания киберугроз (Threat Intelligence) и поведенческого анализа.</li><li>Адаптивный — интеграция с бизнес-процессами и Red Team.</li><li>Оптимизированный — машинное обучение и предиктивная аналитика.</li></ul><h3>Как SOC защищает данные</h3><p>Security Operations Center обеспечивает комплексную защиту информации через многоуровневый контроль и оперативное реагирование. Один из ключевых аспектов — выявление несанкционированного доступа.</p><p>Современные SOC используют поведенческую аналитику для обнаружения аномалий: необычных действий учетных записей, подозрительных запросов к базам данных или попыток эскалации привилегий. Например, система может зафиксировать, что пользователь вне рабочего времени скачивает большие объемы информации, и автоматически инициировать проверку.</p><p>Блокировка утечек происходит за счет комбинации технологий. DLP-системы отслеживают передачу конфиденциальных данных, а EDR-решения пресекают деятельность вредоносных программ. Особое внимание уделяется фишингу — согласно отчету <a href="https://www.group-ib.com/">Group-IB</a>, 83% успешных атак начинаются именно с компрометации почтовых ящиков.</p><p>Скорость реагирования — критичный параметр. Внедрение SOAR-платформ сокращает время обнаружения угроз с нескольких дней до минут. Автоматизированные сценарии мгновенно изолируют зараженные узлы, блокируют подозрительные IP-адреса и приостанавливают скомпрометированные учетные записи.</p><p>Принцип Zero Trust реализуется через постоянную верификацию. SOC анализирует не только внешние угрозы, но и внутреннюю активность, проверяя каждое действие в корпоративной сети. Многофакторная аутентификация, микросегментация и контроль доступа на основе ролей (RBAC) становятся стандартными элементами защиты.</p><p>Дополнительный уровень безопасности обеспечивает прогностическая аналитика. Современные центры мониторинга используют машинное обучение, чтобы выявлять скрытые паттерны атак и предупреждать инциденты до их реализации. Это особенно актуально для защиты от целевых атак (APT), которые могут развиваться месяцами.</p><p>Организации с развернутыми центрами мониторинга гораздо реже сталкиваются с успешными компрометациями данных, но при этом важно понимать, что технологии — лишь инструмент. Реальную защиту дает симбиоз автоматизированных систем, квалифицированных специалистов и отлаженных процессов.</p><h2>Метрики эффективности SOC</h2><p>Оценка работы Security Operations Center невозможна без четких количественных показателей. Эти метрики помогают понять, насколько быстро и точно команда обнаруживает угрозы, реагирует на них и минимизирует возможный ущерб.</p><p>MTTD (Mean Time to Detect) — среднее время обнаружения инцидента. Показатель отражает, как быстро SOC замечает аномальную активность после ее появления в системе.</p><p>По данным исследования <a href="https://www.sans.org/">SANS Institute</a>, в 2023 году средний MTTD для компаний с развитой инфраструктурой безопасности составил около 4 часов. Однако для целевых атак этот показатель может увеличиваться до нескольких недель — именно поэтому так важны системы поведенческого анализа и Threat Intelligence.</p><p>Не менее критичен параметр MTTR (Mean Time to Respond) — период между обнаружением угрозы и ее полной нейтрализацией. Современные SOC с автоматизированными платформами SOAR сокращают это время до 30-60 минут для стандартных инцидентов. Для сравнения: при ручном реагировании аналогичный процесс занимает 4-6 часов.</p><p>Распределение количества инцидентов по уровням критичности помогает оценить нагрузку на команду и качество работы систем фильтрации.</p><p>В хорошо настроенном SOC соотношение обычно выглядит так:</p><ul><li>70-80% — низкий приоритет (ложные срабатывания, незначительные события);</li><li>15-20% — средний приоритет (потенциально опасные аномалии);</li><li>5-10% — высокий приоритет (реальные атаки или серьезные угрозы).</li></ul><p>Резкий рост числа высокоприоритетных инцидентов может сигнализировать либо о повышении активности злоумышленников, либо о проблемах в настройке систем мониторинга.</p><p>Соотношение ложных и истинных срабатываний — ключевой индикатор точности работы SOC. Высокий процент ложных тревог (более 30-40%) приводит к «усталости» аналитиков и повышает риск пропуска реальных угроз. Современные SIEM-системы с машинным обучением позволяют снизить этот показатель до 10-15%, но требуют постоянной корректировки правил корреляции.</p><p>SLA по реагированию — договорные обязательства, которые определяют, как быстро SOC должен сработать на инцидент:</p><ul><li>критические угрозы (атака в процессе) — реакция в течение 15 минут;</li><li>высокий риск (признаки компрометации) — не более 1 часа;</li><li>средний приоритет — до 4 часов.</li></ul><p>Дополнительные метрики включают:</p><ul><li>процент обнаруженных угроз — сколько атак было выявлено до нанесения ущерба;</li><li>среднее время восстановления после инцидента;</li><li>количество пропущенных угроз — обычно выявляется при аудитах или тестах Red Team.</li></ul><p>Важно понимать, что идеальных показателей не существует. Например, снижение MTTD часто приводит к росту ложных срабатываний. Поэтому успешные SOC постоянно балансируют между скоростью, точностью и ресурсозатратами, регулярно пересматривая свои метрики в соответствии с изменяющейся киберугрозой.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разбираем ArgoCD: автоматизированный деплой в Kubernetes</title>
      <link>https://tproger.ru/articles/razbiraem-argocd--avtomatizirovannyj-deploj-v-kubernetes</link>
      <comments>https://tproger.ru/articles/razbiraem-argocd--avtomatizirovannyj-deploj-v-kubernetes?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/razbiraem-argocd--avtomatizirovannyj-deploj-v-kubernetes</guid>
      <description><![CDATA[<p>Что такое ArgoCD. Показываем основы работы с ArgoCD. Рассматриваем пошаговую инструкцию и основные нюансы инструмента ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/razbiraem-argocd--avtomatizirovannyj-deploj-v-kubernetes">Разбираем ArgoCD: автоматизированный деплой в Kubernetes</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Slack]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[LDAP]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 13 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Представьте ситуацию: вы внесли изменения в код, отправили их в Git. А дальше?</p><p>Загибайте пальцы:</p><ol><li>Собрать Docker-образ.</li><li>Обновить конфигурацию в Kubernetes.</li><li>Применить изменения командами kubectl.</li><li>Проверить, что все работает.</li><li>Если не работает — откатить изменения, исправить, повторить.</li></ol><p>И так каждый раз. А если на проекте не только тестовая среда, но и предпродакш, продакшн? А если команда из 10 разработчиков? Кошмар!</p><p>Инструмент Argo CD ускоряет развертывание приложений, синхронизирует Git-репозиторий с фактическим состоянием в кластере. В итоге у разработчика больше времени на написание кода и меньше проблем с деплоем. Компания тоже выигрывает — получает более быстрые и надежные релизы.</p><p><i>После прочтения статьи вы сможете самостоятельно настроить деплой Kubernetes с помощью ArgoCD и применить эти знания в собственных проектах.</i></p><p>ArgoCD раскрывается лучше, когда уже понятен весь путь до <a href="https://tproger.ru/articles/chto-takoe-gitops-prostymi-slovami--git-kak-istochnik-istiny-dlya-d">GitOps</a>: контейнеры, CI/CD, Kubernetes, Helm, наблюдаемость и безопасность. Общий контекст собран в статье <a href="https://tproger.ru/articles/roadmap-devops-inzhenera-v-2026-godu--chto-uchit-i-v-kakom-poryadke">Roadmap DevOps-инженера в 2026 году</a>, а сам подход отдельно разобран в материале <a href="https://tproger.ru/articles/chto-takoe-gitops-prostymi-slovami--git-kak-istochnik-istiny-dlya-d">что такое GitOps простыми словами</a>.</p><h2>Введение в ArgoCD: возможности и преимущества</h2><h3>Git коммитишь — кластер обновляется</h3><p>Вася написал новую фичу и отправил ее в Git. Через 2 минуты функция уже работает в тестовой среде, но с багом. Вася исправляет код, делает коммит, — и через 2 минуты исправление снова в тестовой среде.</p><p>Когда все готово к релизу, девопс применяет изменения в ветке, и ArgoCD автоматически обновляет продакшн.</p><p><b>Без ArgoCD</b>: 30+ минут ручной работы на каждый деплой, высокая вероятность ошибки.</p><p><b>С ArgoCD</b>: 2 минуты автоматической работы, минимальный риск ошибок.</p><p>Изменили код, отправили в Git — работа сделана. Платформа GitOps без вашего участия обнаружит изменения и обновит приложение в кластере.</p><h3>Интерактивная панель управления</h3><p>В Argo CD видно все компоненты приложения — деплойменты, сервисы, конфигмапы — и их состояние. В один клик можно посмотреть историю синхронизаций, детали развертывания и логи.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-24/8330a415-6bcb-498b-b712-c28217978479.jpg" alt="" /></figure><p>ArgoCD — это быстрый доступ к событиям, управление средами и кластерами с одной панели, мгновенный откат к предыдущей версии. Также доступна проверка изменений перед их применением.</p><h3>Универсальный подход к конфигурациям</h3><p><b>Команда применяет Helm для управления зависимостями? </b></p><p>— ArgoCD интегрируется с ним напрямую.</p><p><b>Предпочитаете Kustomize для настройки под разные среды?</b></p><p>— ArgoCD распознает эти конфигурации автоматически.</p><p><b>Используете стандартные YAML-манифесты?</b></p><p>— Они тоже поддерживаются без дополнительной настройки.</p><h3>Безопасный доступ для команды любого размера</h3><p>Можно разделить доступ между участниками проекта с точностью до отдельных приложений и действий:</p><ul><li>Девопсы управляют всеми развертываниями.</li><li>Разработчики получают права на просмотр логов и статуса своих сервисов.</li><li>Тестировщики видят статус только тестовых сред.</li></ul><p>Права разграничиваются по проектам, именам и типам ресурсов. Например, команда фронтенда видит только свои сервисы, бэкенд-разработчики — только свои.</p><p>Система интегрируется с корпоративными провайдерами аутентификации через OIDC, LDAP, SAML. Каждый сотрудник сможет использовать персональные учетные данные для входа.</p><h2>Установка и настройка Argo CD</h2><p>ArgoCD устанавливается в действующий кластер Kubernetes с помощью стандартного набора манифестов. Перед установкой потребуются: настроенный <a href="https://kubernetes.io/docs/tasks/tools/">kubectl</a>, файл <a href="https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/">kubeconfig</a> и работающий CoreDNS.</p><p>Команды создают пространство имен argocd и устанавливают компоненты: серверы приложений, репозиториев и другие службы.</p><p>Доступ к ArgoCD осуществляется через CLI и веб-интерфейс.</p><p>CLI устанавливается из официальных релизов:</p><ul><li><i>brew install argocd</i> — для macOS, Linux и WSL.</li><li><a href="https://github.com/argoproj/argo-cd/releases/latest">бинарный файл</a> — для Windows.</li></ul><p>По умолчанию сервер ArgoCD не имеет внешнего IP. Это значит, что веб-интерфейс и API ArgoCD доступны только из кластера Kubernetes.</p><p>Есть три способа настройки доступа:</p><p><b>1. Изменение типа сервиса на LoadBalancer</b>:</p><p><b>2. Настройка Ingress-ресурс для маршрутизации трафика через входной контроллер кластера</b>.</p><p><b>3. Использование kubectl port-forward для временного доступа</b>:</p><p>Начальный пароль администратора генерируется автоматически и хранится в секрете argocd-initial-admin-secret:</p><p>Вход в систему через CLI:</p><p>После первого входа необходимо сменить пароль:</p><p>Секрет argocd-initial-admin-secret следует удалить после смены пароля, так как он содержит пароль в открытом виде:</p><p>Для веб-интерфейса используется тот же адрес и учетные данные, что и для CLI.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-24/98ded9fb-d864-431d-80b8-e2e5a0a64a83.jpg" alt="" /></figure><p>Регистрация кластера (необходима только для внешних кластеров):</p><p>При добавлении внешнего кластера ArgoCD создает сервисный аккаунт argocd-manager в пространстве имен kube-system и выдает ему права администратора. При работе с тем же кластером, где установлен Argo CD, используется адрес https://kubernetes.default.svc.</p><p>Создание приложения:</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-24/f5979198-7cdf-474b-aec0-9e1a15a6a57a.jpg" alt="" /></figure><p>То же самое через веб-интерфейс:</p><ol><li>Нажать кнопку «New App».</li><li>Заполнить форму с указанием имени, Git-репозитория, пути к манифестам.</li><li>Выбрать целевой кластер и пространство имен.</li><li>Нажать «Create».</li></ol><p>После создания приложение находится в состоянии «OutOfSync». Для развертывания ресурсов в кластер:</p><p>Через CLI:</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-24/f3ec0f6c-476e-4e3c-9e09-26deda8fcef5.jpg" alt="" /></figure><p>Через веб-интерфейс:</p><ol><li>Нажать «Sync» для нужного приложения.</li><li>В открывшейся панели выбрать «Synchronize».</li></ol><p>Для автоматической синхронизации при изменениях в Git-репозитории используется флаг –sync-policy automatic:</p><p>При загрузке манифестов из репозитория Арго автоматически определяет формат и применяет соответствующий инструмент для развертывания.</p><h2>Основные команды и работа с CLI</h2><p>Рассмотрим 4 базовые команды:</p><ul><li>Добавление нового приложения.</li><li>Проверка состояния развертывания.</li><li>Автоматическая и ручная синхронизация.</li><li>Откат изменений.</li></ul><h3>Добавление нового приложения</h3><p>Команда <b>argocd app create</b> создает приложение в Argo CD, связывая Git-репозиторий с целевым кластером Kubernetes.</p><p>Нужно указать имя приложения, источник манифестов и целевую среду:</p><p>Альтернативой ручному созданию приложения служит определение через YAML-файл:</p><h3>Проверка состояния развертывания</h3><p>Команда <b>argocd app get</b> отображает текущее состояние приложения, включая статус синхронизации, ревизию Git и состояние ресурсов:</p><p>Для вывода информации о ресурсах приложения используется флаг -o wide:</p><p>Можно отслеживать состояние ресурсов во время синхронизации:</p><p>Еще ArgoCD сохраняет историю синхронизаций приложения:</p><h3>Автоматическая и ручная синхронизация</h3><p>Команда argocd app sync применяет изменения, обнаруженные в Git-репозитории, к кластеру Kubernetes:</p><p>При ручной синхронизации Argo CD:</p><ol><li>Скачивает манифесты из Git.</li><li>Формирует план изменений.</li><li>Применяет его к кластеру.</li><li>Отслеживает состояние до завершения развертывания.</li></ol><p>Синхронизация определенной ревизии Git:</p><p>Принудительная синхронизация:</p><p>Обновление только определенных ресурсов:</p><h3>Откат изменений</h3><p>Команда <b>argocd app rollback</b> отменяет последнюю синхронизацию и возвращает приложение к предыдущему стабильному состоянию:</p><p>По умолчанию откат выполняется на предыдущую успешную ревизию. Для отката к конкретной ревизии требуется указать ее ID:</p><p>где 5 — номер ревизии из истории.</p><p>При откате не происходит изменений в Git-репозитории — это временное изменение, направленное на быстрое восстановление работоспособности.</p><p>После отката приложение перейдет в состояние «OutOfSync», поскольку Git-репозиторий по-прежнему содержит новую версию.</p><p>Для долгосрочного решения после отката нужно:</p><ol><li>Исправить ошибки в манифестах.</li><li>Отправить исправления в Git.</li><li>Синхронизировать приложение.</li></ol><h2>Работа с ArgoCD в реальных проектах</h2><p>ArgoCD дополняет классические CI/CD-системы, разделяя ответственность за процесс доставки. CI-системы отвечают за сборку кода и создание артефактов, ArgoCD берет на себя развертывание в Kubernetes.</p><p>В GitHub Actions пайплайн компилирует приложение, собирает Docker-образ, обновляет манифест с новым тегом образа и отправляет изменения в Git. ArgoCD замечает изменения в репозитории и обновляет приложение в кластере.</p><p><a href="https://tproger.ru/articles/integraciya-ci-cd-processov-s-ispolzovaniem-github-actions">Подробнее про интеграцию CI/CD с GitHub Actions</a></p><p>GitLab CI/CD использует подобную схему — сначала тестирование и сборка, затем запись актуальных версий в манифесты. CI-пайплайн завершается, как только изменения попадают в Git. Остальную работу делает ArgoCD.</p><p><a href="https://tproger.ru/articles/razvorachivaem-instrumenty-ci-cd--praktiki-ot-devops-inzhenerov">Подробнее про инструменты CI/CD на практике от DevOps-инженеров</a></p><p>Jenkins требует дополнительной настройки для интеграции с ArgoCD. Возможна работа через REST API ArgoCD или через обновление манифестов в Git-репозитории. Для командной строки Argo CD создают отдельные сервисные аккаунты с ограниченными правами.</p><h3>Настройка уведомлений</h3><p>Уведомления Argo CD информируют команду о состоянии приложений. Система уведомлений настраивается в ConfigMap argocd-notifications-cm:</p><ul><li>Для <b>Slack </b>нужно определять шаблоны сообщений и триггеры событий. Соединение настраивается через токен бота. Приложения активируют уведомления через аннотации.</li><li><b>Microsoft Teams</b> работает через веб-хуки. Каждый канал получает собственный URL-адрес, который ArgoCD использует для отправки сообщений.</li><li><b>Email-оповещения</b> требуют настройки SMTP-сервера. ArgoCD поддерживает TLS-шифрование и аутентификацию. Письма содержат детальную информацию о событиях и могут включать ссылки для быстрого доступа.</li></ul><p>Каждое приложение самостоятельно подписывается на нужный набор событий: ошибки синхронизации, успешные деплои, проблемы с доступностью.</p><h3>Управление секретами</h3><p>Стандартная модель <a href="https://tproger.ru/articles/chto-takoe-gitops-prostymi-slovami--git-kak-istochnik-istiny-dlya-d">GitOps</a> требует хранения всех манифестов в Git, что небезопасно.</p><p>Популярные решения для управления секретами:</p><ul><li><b>Sealed Secrets</b>. Публичный ключ используется для шифрования секретов перед сохранением в Git. Контроллер в кластере расшифровывает их закрытым ключом и создает стандартные Secret-объекты.</li><li><a href="https://tproger.ru/articles/nachalo-raboty-s-hashicorp-vault-i-sozdanie-pervogo-sekreta">HashiCorp Vault</a>. Манифесты содержат переменные, которые заполняются значениями из Vault в момент синхронизации. Секреты никогда не попадают в Git-репозиторий.</li></ul><h2>3 лучшие практики использования ArgoCD</h2><h3>1. Организация репозитория</h3><p>Структура Git-репозитория влияет на эффективность работы с Argo CD. Рассмотрим два основных подхода: «моно» и «мульти» модель.</p><ul><li><b>Монорепозиторий </b>хранит все манифесты в одном месте. Каталоги первого уровня разделяют приложения и конфигурацию среды. Преимущество — целостная структура и возможность внесения согласованных изменений.</li><li><b>Мультирепозиторная модель</b> разделяет компоненты по нескольким репозиториям. Каждая команда управляет своим набором приложений. Конфигурации для разных окружений хранятся отдельно. Этот подход четко разграничивает ответственность.</li></ul><p><a href="https://argo-cd.readthedocs.io/en/latest/operator-manual/cluster-bootstrapping/">App of Apps</a> упрощает управление множеством приложений через главное приложение ArgoCD. Один манифест верхнего уровня содержит определения для всех приложений, что упрощает развертывание однотипной инфраструктуры.</p><h3>2. Использование Kustomize и Helm</h3><p><b>Kustomize</b> накладывает патчи на базовые манифесты. Конфигурация определяет основные параметры приложения, оверлеи содержат изменения для конкретных сред.</p><p><b>Helm </b>применяет шаблонизацию для создания манифестов. Чарты содержат шаблоны с переменными, значения которых задаются в файлах values.yaml. Для каждого окружения создается собственный файл значений.</p><p>Можно комбинировать оба инструмента. Helm создает базовые манифесты, а Kustomize настраивает их под конкретные требования.</p><h3>3. Мониторинг приложений и настройка alert-уведомлений</h3><p>Арго собирает метрики синхронизации, состояния здоровья, времени развертывания. Данные передаются в Prometheus для создания дашбордов в Grafana и настройки алертов.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-24/7398a2b4-8873-4e20-a1b7-29dba22c13f6.png" alt="" /><figcaption>Интерфейс Grafana</figcaption></figure><p>Система уведомлений информирует команды о критичных изменениях: ошибках синхронизации, деградации здоровья, успешных развертываниях. Алерты отправляются в Slack, Teams, Email через настраиваемые триггеры и шаблоны.</p><h2>6 популярных ошибок при работе с ArgoCD</h2><p><b>Ошибка аутентификации по SSH-ключу</b>. ArgoCD выдает «Permission denied (publickey)» при попытке доступа к репозиторию. Причина — неправильно настроенный или отсутствующий SSH-ключ.</p><p>Решение:</p><ul><li>Проверить корректность SSH-ключа.</li><li>Убедиться, что в репозитории ключ добавлен как deploy key с правами чтения.</li><li>Проверить формат ключа (должен начинаться с —–BEGIN OPENSSH PRIVATE KEY—–).</li></ul><p><b>Отсутствие прав доступа к репозиторию</b>. Даже при корректных учетных данных пользователь может не иметь прав чтения.</p><p>Решение:</p><ul><li>Проверить права доступа пользователя или deploy key к репозиторию.</li><li>Убедиться, что для организации не включено SSO или 2-FA.</li></ul><p><b>Несоответствие версий Helm</b>. Argo CD использует встроенную версию Helm, которая может отличаться от локальной.</p><p>Решение:</p><ul><li>Проверить версию Helm в Argo CD через argocd admin helm version.</li><li>Настроить кастомную версию Helm через конфигурацию argocd-cm.</li></ul><p><b>Отсутствующие значения в values.yaml</b>. Ошибка «Error: execution error at line X» с указанием на неопределенное значение.</p><p>Решение:</p><ul><li>Убедиться, что все required значения указаны в файле values или через флаги –set</li><li>Использовать условные блоки для необязательных параметров</li></ul><p>Одна из основных проблем в GitOps-модели — расхождение между фактическим состоянием кластера и описанием в Git.</p><p><b>Отказ при синхронизации из-за drifts</b>. ArgoCD отображает ресурс как «OutOfSync» и отказывается выполнять синхронизацию.</p><p>Решение:</p><ul><li>Использовать флаг –force при синхронизации для перезаписи изменений.</li><li>Включить опцию автоматического самовосстановления (self-heal) для критичных ресурсов</li></ul><p><b>Ошибка Update не разрешена для некоторых полей</b>. Kubernetes запрещает изменение определенных полей после создания ресурса.</p><p>Решение:</p><ul><li>Добавить аннотацию argocd.argoproj.io/sync-options: Replace=true</li></ul><h2>Подведем итоги</h2><p><b>Поздравляем! </b>Вы познакомились с инструментом, который спасает от ручных деплоев!</p><p>В мире, где все постоянно ломается, Argo CD — тот самый друг, который поможет собрать приложение, пока вы пьете кофе и притворяетесь, что все так и задумано.</p><p>Если после внедрения ArgoCD у вас внезапно появилось свободное время — не пугайтесь, это нормально. Используйте его, чтобы наконец-то прочитать те 348 вкладок про Kubernetes, которые вы открыли 2 года назад. А еще можете использовать его, чтобы почитать <a href="https://t.me/+c6lPaQBXLvE4YmMy">наш тг-канал</a>, найдете больше советов!</p>]]></content:encoded>
    </item>
    <item>
      <title>Облачные виртуальные машины: как защитить данные и настроить удобное управление</title>
      <link>https://tproger.ru/articles/oblachnye-virtualnye-mawiny--kak-zashhitit-dannye-i-nastroit-udobnoe-upravlenie</link>
      <comments>https://tproger.ru/articles/oblachnye-virtualnye-mawiny--kak-zashhitit-dannye-i-nastroit-udobnoe-upravlenie?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/oblachnye-virtualnye-mawiny--kak-zashhitit-dannye-i-nastroit-udobnoe-upravlenie</guid>
      <description><![CDATA[<p>Пока медиа наполнены новостями о генеративных моделях, но виртуальные машины — основа облачных вычислений — продолжают развиваться, становясь безопаснее и удобнее в управлении.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/oblachnye-virtualnye-mawiny--kak-zashhitit-dannye-i-nastroit-udobnoe-upravlenie">Облачные виртуальные машины: как защитить данные и настроить удобное управление</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 12 May 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня ВМ выполняют большую часть задач в облаке. Их развитие идёт не столько через технологические прорывы, сколько через повышение безопасности и удобства в работе.</p><p>Вместе с Александром Душеиным, архитектором Yandex Cloud, в статье мы рассмотрим современные подходы к защите данных через технологии OS Login, сервисы метаданных и федерацию аккаунтов. Поделимся практическими приёмами настройки шифрования и методами автоматизации работы через группы виртуальных машин.</p><h2>Байка о Сергее и Кевине</h2><p><i>Все персонажи вымышленные, ни один сисадмин не пострадал.</i></p><p>Технический менеджер Сергей отвечал за разработку популярного развлекательного сайта с богатой историей, легаси-кодом и внушительным техническим долгом. Один из таких долгов — хранение паролей пользователей в базе данных в открытом виде, что Сергей оправдывал фразой «ну подумаешь, не банк же».</p><p>Однажды Сергею в мессенджер написал неизвестный, представившийся Кевином. Он сообщил, что обнаружил уязвимость в сайте, позволившую ему получить доступ к авторизационным данным пользователей. В качестве доказательств Кевин предъявил действующие логины и пароли, а затем предложил продать информацию об уязвимости за вполне ощутимую сумму.</p><p>Сергей не был простачком и паникёром, но совесть его была неспокойна. Он прекрасно понимал, что утечка базы данных с незашифрованными паролями — серьёзный удар по репутации сервиса. После недолгих колебаний Сергей решил заплатить. Когда деньги ушли, Кевин признался в мошенничестве: он просто взял из открытого доступа список давно скомпрометированных учётных данных, проверил их на сайте и выдал совпавшие аккаунты за доказательство несуществующей уязвимости.</p><p>Мораль: не храните пароли в открытом виде, а ещё лучше не храните их совсем. Это может сыграть злую шутку, даже если данные не попадут к злоумышленникам.</p><p>Полностью отказаться от хранения паролей помогут современные облачные технологии, такие как OS Login.</p><h2>Забудьте про рутину с SSH-ключами</h2><p>Классический подход с локальными пользователями и SSH-ключами на каждой ВМ превращает жизнь администратора в квест. Приходится настраивать каждую машину отдельно, а потеря ключа становится настоящей головной болью. Вместо того чтобы заниматься действительно важными задачами, инженеры тратят время на рутинное управление доступом.</p><p>OS Login решает эту проблему   — он связывает учётную запись в Linux с облачной учётной записью. Больше не нужно вручную добавлять SSH-ключи в ~/.ssh/authorized_keys на каждой ВМ. Теперь они привязываются к IAM-пользователю или сервисному аккаунту, а доступом можно управлять через IAM-политики.</p><p>В Google Cloud достаточно включить <a href="https://cloud.google.com/compute/docs/oslogin">OS Login</a> на уровне проекта или организации и назначить пользователю роль roles/compute.osAdminLogin. После этого он получает доступ ко всем нужным ВМ. В Yandex Cloud механизм <a href="https://yandex.cloud/ru/docs/organization/concepts/os-login">работает</a> похожим образом — доступ привязывается к облачному аккаунту организации.</p><p>Когда сотрудник уходит из компании, не нужно вспоминать, к каким машинам у него был доступ — при удалении из облачного IAM все его доступы закрываются автоматически. А для параноиков есть приятный бонус: в логах OS Login видны все подключения, плюс можно включить двухфакторную аутентификацию.</p><p>Недостаток? Для автоматизации, например, через Ansible придётся создавать короткоживущий сертификат и использовать его для подключения. Но это небольшая плата за безопасность: нет постоянных ключей — нечему утекать, а доступ можно отозвать в любой момент.</p><h2>Паролефобия: почему лучший пароль тот, которого нет</h2><p>Пароли, сертификаты, токены доступа, API-ключи — для работы сервисов и конвейеров (CI, CD, AirFlow и т.д.) необходимо множество секретов для доступа к различным системам и данным: container registry, базам данных, кластерам Kubernetes и другим. Для безопасного хранения учётных данных существуют специализированные сервисы и утилиты, но для доступа к ним внезапно требуются... ключи, сертификаты, пароли. Можно ли обойтись без них?</p><p>В облаке ответ — да. Вместо хранения статических паролей можно использовать более надёжные способы. OS Login избавляет от необходимости создавать отдельные пароли для каждой ВМ. SSO помогает забыть о локальных учётных записях на серверах — достаточно корпоративной. А временные токены (Security Token Service, STS) <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html">позволяют отказаться</a> от «вечных» ключей доступа, которые так любят утекать в публичные репозитории.</p><p>Если без пароля всё же не обойтись, не стоит хранить его в открытом виде в конфигурационных файлах или, ещё хуже, коммитить в репозиторий. Лучше использовать менеджеры секретов с регулярной ротацией и строгим ограничением привилегий.</p><h2>Сервис метаданных: полезный инструмент с подвохом</h2><p>Не только информация о ВМ, но и способ коммуникации с ней из внешнего мира — так можно описать сервис метаданных, доступный во всех облаках по адресу 169.254.169.254. С его помощью приложения внутри ВМ получают данные об инстансе (конфигурация, размещение и сетевые адреса) и временные IAM-токены для сервисных аккаунтов. Это избавляет от необходимости хранить учётные данные в коде.</p><p>История взлома Capital One наглядно <a href="https://habr.com/ru/articles/463317/#:~:text=3,%D1%81%D0%BC%D0%BE%D0%B3%D0%BB%D0%B0%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%BA%20%D0%BD%D0%B8%D0%BC%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF">показывает</a> риски: злоумышленник может провести SSRF-атаку и заставить сервер обратиться к метаданным. В результате он получит доступ к IAM-токенам. Облачные провайдеры решают эту проблему по-разному. AWS требует получить специальный токен в <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#:~:text=IMDSv2">IMDSv2</a>. Google Cloud использует обязательный заголовок «Metadata-Flavor: Google». А Yandex Cloud и вовсе отключил поддержку IMDSv1 из-за рисков безопасности.</p><p>Для предотвращения компрометации инфраструктуры через SSRF-уязвимости разработчикам необходимо соблюдать следующие правила:</p><ul><li>Не храните секреты в пользовательских метаданных;</li><li>Ограничивайте доступ к сервису для контейнеров, которым не требуются токены;</li><li>Учитывайте, что сервис метаданных будет доступен и для контейнеров, запущенных на хосте;</li><li>Используйте файерволл операционной системы или network policy в Kubernetes для ограничения доступа к сервису метаданных.</li></ul><h2>Федерация сервисных аккаунтов: внешние сервисы становятся своими</h2><p>Представьте: у вас есть под Kubernetes, которому нужен доступ к секрету в Yandex Lockbox. Или CI/CD система вроде GitLab должна развернуть облачные сервисы через Terraform. Обычно в таких случаях создают сервисный аккаунт со статическим ключом. Но у этого подхода есть проблемы: ключи утекают в Git-репозитории, а их ротация превращается в квест.</p><p>Workload Identity Federation (федерация сервисных аккаунтов) предлагает элегантное решение: внешний сервис использует свой токен аутентификации для обмена на временные облачные креденшелы. Каждый провайдер реализует это по-своему:</p><ul><li>AWS использует IRSA (IAM Roles for Service Accounts) — под в Kubernetes получает JWT-токен и обменивает его на временные IAM-креденшелы;</li><li>Azure через Microsoft Entra ID проверяет OIDC-токены от GitHub Actions или Kubernetes;</li><li>Yandex Cloud позволяет обменять OIDC-токен от совместимого провайдера на IAM-токен сервисного аккаунта.</li></ul><h2>Защита данных: шифруем всё</h2><p>Объектные хранилища вроде AWS S3 стали настоящей головной болью для специалистов по безопасности. Достаточно поискать в интернете «S3 bucket leak», чтобы понять масштаб проблемы. Первая линия защиты —  временные ключи (Security Token Service, STS). Даже если их скомпрометируют, время жизни ограничено, а значит и потенциальный ущерб минимален.</p><p>Но что если злоумышленник получит физический доступ к носителю или бэкапу? Здесь поможет только шифрование данных. AWS, GCP и Yandex Cloud предлагают шифрованные диски на базе алгоритма AES-256 с управлением ключами через KMS-сервисы.</p><p>Стоит отметить важный момент: если деактивировать ключ, которым зашифрованы диск, снимок или образ, доступ к данным будет приостановлен до повторной активации ключа. А если удалить ключ или его версию — данные будут потеряны безвозвратно. Поэтому важно внимательно следить за жизненным циклом ключей шифрования.</p><p>Но даже если вы зашифровали все данные и настроили безопасный доступ, остаётся важный вопрос: кто и что делает в вашем облаке? Помните историю про Сергея и Кевина? А что если злоумышленник всё-таки получит доступ к вашим ресурсам или кто-то из сотрудников решит «немного» превысить свои полномочия?</p><p>Здесь на помощь приходит аудит действий. Сервис аудитных логов собирает информацию обо всех событиях: кто заходил в систему, какие ресурсы создавал или удалял, какие настройки менял — и сохраняет эти данные в объектном хранилище, сервисе для управления потоками данных.</p><p>Особенно важно отслеживать «чувствительные» операции: создание и удаление ключей сервисных аккаунтов, изменение ролей пользователей, действия с ключами шифрования. Если вы работаете с конфиденциальными данными или в регулируемой отрасли, без такого мониторинга просто не обойтись.</p><p>И что приятно — вы можете интегрировать эти логи с внешними системами безопасности (SIEM), чтобы анализировать их вместе с другими источниками данных. Это позволяет выявлять сложные сценарии атак, которые могут остаться незамеченными при изолированном анализе.</p><p>Но знать о подозрительной активности — это только половина дела. Важно иметь возможность быстро отреагировать на неё и предотвратить возможный ущерб. И это подводит нас к следующей теме — прозрачности и управляемости облачной инфраструктуры.</p><h2>Прозрачность и управляемость: предупреждён — значит вооружён</h2><p>Проинформировать ВМ о предстоящих важных событиях и дать возможность приготовиться — вот задача сервисов мониторинга облачных провайдеров. Каждый решает её по-своему:</p><ul><li>AWS уведомляет о Scheduled Events через AWS Health Dashboard;</li><li>Google Cloud использует Live Migration, предупреждая о перемещении ВМ за 60 секунд;</li><li>Yandex Cloud через Политики обслуживания ВМ позволяет выбрать сценарий (migrate или restart) и отложить обслуживание.</li></ul><p>Это особенно важно для сервисов реального времени. Например, RabbitMQ болезненно переживает внезапные остановки. Получив уведомление о предстоящей миграции, вы можете корректно вывести ноду из кластера, дождаться перемещения и вернуть её обратно.</p><p>Облачные провайдеры позволяют менять конфигурацию на лету. Закончилось место на диске посреди важного расчёта? Можно увеличить его объём без остановки ВМ. Хотите проверить отказоустойчивость вашего сервиса? Отключите сетевой интерфейс на ходу, имитируя сбой сети, а затем подключите его обратно — всё это без перезагрузки машины.</p><p>Готовитесь к росту нагрузки, но переделывать приложение для Kubernetes не видите смысла? Вам помогут группы виртуальных машин:</p><ul><li>В Yandex Cloud можно<a href="https://yandex.cloud/ru/docs/compute/concepts/instance-groups/"> создать группу</a> с фиксированным числом машин или настроить автоматическое масштабирование по метрикам (CPU, память, очереди и т.д.);</li><li>AWS Auto Scaling Groups и Google Managed Instance Groups работают похожим образом: добавляют мощности при росте нагрузки и убирают лишнее при снижении;</li><li>Гибкое управление конфигурацией через систему переменных позволяет, например, выделять IP-адреса из заранее зарезервированного пула;</li><li>Если ВМ выходит из строя, группа автоматически заменит её, а балансировщик уберёт сбойный экземпляр из ротации.</li></ul><p>Это особенно удобно для организации динамических GitLab-раннеров или обработки асинхронных задач — группа расширяется при появлении новых задач в очереди и сжимается, когда работы становится меньше.</p><h2>Безопасность vs удобство: как найти баланс</h2><p>Помните историю про Сергея и Кевина? Она показывает, как важно не просто следовать правилам безопасности, а менять сам подход к хранению учётных данных. Современные облачные технологии позволяют полностью отказаться от статических паролей и ключей.</p><p>OS Login, временные токены и федерация сервисных аккаунтов — это не просто модные слова, а реальные инструменты, которые помогают избежать компрометации данных. При этом они не усложняют работу: вместо управления SSH-ключами на каждой машине вы получаете централизованный контроль доступа, а федерация сервисных аккаунтов избавляет от головной боли с ротацией ключей.</p><p>Сервис метаданных и шифрование данных образуют дополнительные уровни защиты. А возможность получать уведомления о планируемом обслуживании и автоматически масштабировать ресурсы через группы ВМ помогает строить действительно надёжные системы — будь то высоконагруженный сервис машинного обучения или классическое корпоративное приложение.</p><p>Больше про облака и другие важные IT-инструменты — в нашем <a href="https://t.me/+c6lPaQBXLvE4YmMy">тг-канале</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Большой гайд по DevOps от Tproger: инструменты, практики, автоматизация</title>
      <link>https://tproger.ru/articles/bolwoj-gajd-po-devops-ot-tproger--instrumenty--praktiki--avtomatizaciya</link>
      <comments>https://tproger.ru/articles/bolwoj-gajd-po-devops-ot-tproger--instrumenty--praktiki--avtomatizaciya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bolwoj-gajd-po-devops-ot-tproger--instrumenty--praktiki--avtomatizaciya</guid>
      <description><![CDATA[<p>Собрали всё, что нужно DevOps-инженеру: CI/CD, Kubernetes, серверлесс, безопасность, мониторинг и альтернативы Docker — практично и по делу.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bolwoj-gajd-po-devops-ot-tproger--instrumenty--praktiki--avtomatizaciya">Большой гайд по DevOps от Tproger: инструменты, практики, автоматизация</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Высокие нагрузки]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DevSecOps]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 10 May 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Собрали подборку наших лучших материалов для тех, кто строит пайплайны, следит за стабильностью и разворачивает сервисы в прод. Здесь — про Docker и Podman, Kubernetes, CI/CD, DevSecOps, serverless и всё, что нужно знать DevOps-инженеру в 2025 году. Сохраняйте, пригодится не раз.</p><h2>Инструменты и окружение</h2><p>Современные DevOps-инженеры без инструментов — как админ без терминала. Вот что стоит добавить в стек:</p><p><a href="https://tproger.ru/articles/top-10-instrumentov-devops--kotorye-uprostyat-vawu-zhizn-i-izbavyat-ot-nochnyh-relizov">Топ-10 инструментов DevOps, которые упростят вашу жизнь и избавят от ночных релизов </a>— Список лучших инструментов для DevOps-инженеров, которые упрощают релизы, мониторинг и CI/CD-процессы.  От логгирования до автоматизации тестов.</p><p><a href="https://tproger.ru/articles/podman-alternativa-docker">Podman: Альтернатива Docker без daemon</a> — Знакомим с Podman, инструментом, который не требует daemon, но дает весь функционал Docker.</p><p><a href="https://tproger.ru/articles/docker-hub-v-rossii---vse--gajd--kak-obojti-blokirovku">Docker Hub в России — всё? Гайд, как обойти блокировку</a> —Объясняем, как работать с Docker Hub после блокировки: альтернативы, зеркала и решения.</p><h2>CI/CD, Kubernetes и деплой</h2><p>Когда каждое изменение должно доходить до продакшена быстро и без боли — нужна хорошая сборка:</p><p><a href="https://tproger.ru/articles/razvorachivaem-instrumenty-ci-cd--praktiki-ot-devops-inzhenerov">Разворачиваем инструменты CI/CD: практики от DevOps-инженеров</a> — Практическое руководство по внедрению и настройке CI/CD: инструменты, примеры, лайфхаки.</p><p><a href="https://tproger.ru/articles/kubernetes-node-js-werf">Собираем и деплоим в Kubernetes приложение на Node.js с помощью werf </a>— Пошагово показываем, как собрать и развернуть приложение на Node.js в Kubernetes с помощью инструмента werf.</p><p><a href="https://tproger.ru/articles/avtomatizaciya-deploya-s-ispolzovaniem-kubernetes---tproger">Как автоматизировать деплой с использованием Kubernetes</a> — Рассказываем, как автоматизировать процесс деплоя приложений в Kubernetes: подходы, инструменты и советы.</p><p><a href="https://tproger.ru/articles/vybiraem-optimalnuyu-arhitekturu-monitoringa--ot-legkovesnogo-servisa-do-vysokonagruzhennyh-klasterov">Выбираем оптимальную архитектуру мониторинга: от легковесного сервиса до высоконагруженных кластеров </a>—Рассматриваем варианты мониторинга от минимальных решений до сложных систем, подходящих под высокие нагрузки.</p><h2>Практики и подходы</h2><p>Не только инструменты, но и культура разработки — основа DevOps:</p><p><a href="https://tproger.ru/articles/kak-stat-devops-v-2024-godu">Как стать DevOps в 2024 году</a> — Что нужно знать, какие навыки прокачивать, с чего начать.</p><p><a href="https://tproger.ru/articles/kak-avtomatizirovat-bezopasnost-s-pomoshhyu-devsecops-i-iskusstvennogo-intellekta">Как автоматизировать безопасность с помощью DevSecOps и искусственного интеллекта</a> — Объясняем, как применить DevSecOps-подход и AI для защиты приложений на всех этапах разработки.</p><p><a href="https://tproger.ru/articles/kak-serverless-tehnologii-pomogajut-snizit-nagruzku-na-razrabotchikov">Как serverless-технологии помогают снизить нагрузку на разработчиков</a> — Разбираемся, как serverless помогает ускорить разработку, упростить масштабирование и снизить поддержку инфраструктуры.</p><p>Не забывайте читать предыдущие гайды. <a href="https://tproger.ru/articles/bolwoj-gajd-po-python-ot-tproger--topovye-instrumenty-dlya-raznyh-napravlenij">Python</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty">React</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety">мобильная разработка</a>, <a href="https://tproger.ru/articles/s----vse-samye-vazhnye-materialy-ot-tproger">С++</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke">инструменты</a>, <a href="https://tproger.ru/articles/veb-razrabotka-i-frontend--gajd-ot-tproger">фронтенд</a>.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>Большой гайд по инструментам для разработчиков от Tproger: фреймворки, базы, AI и DevOps в одной подборке</title>
      <link>https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke</link>
      <comments>https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke</guid>
      <description><![CDATA[<p>Подборка топовых инструментов и технологий для разработчиков: от Elixir и DevOps-платформ до no-code, AI-инструментов и новых фреймворков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke">Большой гайд по инструментам для разработчиков от Tproger: фреймворки, базы, AI и DevOps в одной подборке</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 04 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мы собрали для вас огромную подборку наших статей про самые полезные инструменты, технологии и практики.
Если вы хотите работать быстрее, чище и с кайфом — сохраняйте себе этот гайд, чтобы не искать потом по всему интернету. Внутри — топовые фреймворки, AI-помощники, базы данных, лайфхаки и советы от практиков.</p><h2>Основные инструменты и технологии</h2><p>Статьи, с которых стоит начать, если хочется обновить стек или разобраться в новых подходах:</p><p><a href="https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025">ТОП 60 лучших инструментов для разработки ПО в 2025</a> — Собрали шестьдесят лучших инструментов для разработки программного обеспечения в 2025 году. От трекеров и редакторов до библиотек и фреймворков.</p><p><a href="https://tproger.ru/articles/top-11-trendov--kotorye-nuzhny-ajtiwniku-v-2025-godu">Топ 11 трендов, которые нужны айтишнику в 2025 году</a> — Представляем одиннадцать ключевых трендов в IT, которые будут актуальны в 2025 году. Краткий гид по технологиям, которые будут на слуху.</p><p><a href="https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki">Фреймворки, меняющие игру: выбираем идеальный инструмент для ваших веб-проектов</a> — Обзор современных веб-фреймворков, которые могут изменить подход к разработке ваших проектов.</p><p><a href="https://tproger.ru/articles/instrumenty-i-frejmvorki-qa--kotorye--ne--nuzhno-znat">Инструменты и фреймворки QA, которые (не) нужно знать</a> — о том, что реально используется в тестировании.</p><p><a href="https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-">Что изучать начинающему разработчику на C#</a> — рассматриваем  языки, среды и подходы, которые пригодятся новичкам. Рекомендуем, с чего начать изучение C# и какие темы освоить в первую очередь.</p><p><a href="https://tproger.ru/articles/reactjs-na-izi--chto-realno-nuzhno-znat-frontend-razrabotchiku-v-2025-godu">ReactJS на изи: что реально нужно знать фронтенд-разработчику в 2025 году</a> — Краткий гайд по ключевым знаниям и навыкам, необходимым для работы с ReactJS в 2025 году.</p><h2>Базы, API, DevOps и CI/CD</h2><p>Набор инструментов и практик, которые помогут масштабироваться и не выгорать:</p><p><a href="https://tproger.ru/articles/top-10-instrumentov-devops--kotorye-uprostyat-vawu-zhizn-i-izbavyat-ot-nochnyh-relizov">Топ-10 инструментов DevOps, которые упростят вашу жизнь и избавят от ночных релизов</a> — must-have решения для DevOps-команд.</p><p><a href="https://tproger.ru/articles/postgresql-vs--clickhouse-vs--duckdb--kakuyu-opensors-bazu-vybrat-dlya-analitiki-v-2025-godu-">PostgreSQL vs. ClickHouse vs. DuckDB: какую опенсорс базу выбрать для аналитики в 2025 году?</a> — Сравниваем три популярные опенсорс СУБД для аналитики: возможности, производительность и кейсы использования.</p><p><a href="https://tproger.ru/articles/10-api--kotorye-sokratyat-vam-nedeli-razrabotki">Семь API, которые сократят вам недели разработки</a> — Подборка решений, которые можно быстро внедрить.</p><p><a href="https://tproger.ru/articles/razvorachivaem-instrumenty-ci-cd--praktiki-ot-devops-inzhenerov">Разворачиваем инструменты CI/CD: практики от DevOps-инженеров</a> — Делимся практическими советами по развертыванию инструментов CI/CD от профессионалов.</p><p><a href="https://tproger.ru/articles/kak-avtomatizirovat-prostye-zadachi-s-pomoshhyu-skriptov-">Как автоматизировать простые задачи с помощью скриптов?</a> — Гайд по быстрой автоматизации без боли.</p><p><a href="https://tproger.ru/articles/luchwie-praktiki-dlya-raboty-s-komandnoj-strokoj">Лучшие практики для работы с командной строкой</a> — Рассказываем, что такое командная строка. Рассматриваем пошаговую инструкцию по использованию.</p><h2>AI-инструменты и нейросети</h2><p>Что может помочь вам уже сейчас — от подсказок до генерации кода:</p><p><a href="https://tproger.ru/articles/top-5-ii-instrumentov-dlya-programmistov-v-2025">Топ-5 ИИ-инструментов для программистов в 2025 году</a> — Самые полезные AI-ассистенты по мнению редакции.</p><p><a href="https://tproger.ru/articles/deepseek-ili-claude--kakaya-nejroset-napiwet-kod--za-kotoryj-ne-stydno-">DeepSeek или Claude: какая нейросеть напишет код, за который не стыдно?</a> — Сравниваем возможности нейросетей DeepSeek и Claude в контексте генерации качественного кода.</p><p><a href="https://tproger.ru/articles/edge-ai--kak-rabotayut-nejroseti-na-ustrojstvah-s-ogranichennymi-resursami">Edge AI: как работают нейросети на устройствах с ограниченными ресурсами</a> — Объясняем, как нейросети работают на устройствах с ограниченными ресурсами и где это применимо.</p><p><a href="https://tproger.ru/articles/10-sposobov-zarabotat-na-iskusstvennom-intellekte-v-2025">10 способов заработать на искусственном интеллекте в 2025</a> — Рассказываем о десяти способах монетизации искусственного интеллекта в 2025 году.</p><h2>Утилиты, лайфхаки и неожиданно полезные штуки</h2><p>То, что экономит время, силы и нервы:</p><p><a href="https://tproger.ru/articles/sobral-11-sajtov--ekonomyashhih-vremya--kotorye-nuzhny-kazhdomu-razrabotchiku">11 сайтов, экономящих время, которые нужны каждому разработчику</a> — Подборка must-have ресурсов.</p><p><a href="https://tproger.ru/articles/luchwie-biblioteki-dlya-animacij-na-react">7 библиотек для анимаций на React</a> — Обзор популярных библиотек для создания анимаций в React: от простых эффектов до сложных переходов.</p><p><a href="https://tproger.ru/articles/30-samyh-poleznyh-bibliotek-python-dlya-veb-razrabotki-v-2024-godu">30 самых полезных библиотек Python для веб-разработки в 2024 году</a>  — Подборка тридцати полезных библиотек Python, которые пригодятся веб-разработчикам в 2025 году.</p><p><a href="https://tproger.ru/articles/7-programm-dlya-wifrovaniya-dannyh">7 программ для шифрования данных</a> —  Базовая кибер-гигиена для всех, кто работает с пользовательскими данными.</p><p><a href="https://tproger.ru/articles/top-samyh-poleznyh-magicheskih-komand-dlya-zavsegdataev-colab">Топ самых полезных магических команд для завсегдатаев Colab</a> — Рассказываем, как использовать магические команды в Colab, чтобы ускорить работу с данными и кодом.</p><p><a href="https://tproger.ru/articles/otkryvaem-cikl-statej-etl-dlya-zooparka-botov">5 ETL для обработки данных из Python-ботов</a> — Представляем пять ETL-инструментов, которые помогут автоматизировать сбор, трансформацию и загрузку данных от Python-ботов</p><p><a href="https://tproger.ru/articles/rabota-s-excel-gde-on-primenyaetsya-chem-polezen-i-gde-osvoit-etot-navyk-erid-ljn8klxkn">Работа с Excel: где он применяется, чем полезен и где освоить этот навык</a> — Объясняем, где и как используется Excel, почему он важен для аналитиков и где научиться работать с ним.</p><h2>Немного философии</h2><p>Когда хочется не просто выбрать инструмент, а понять, зачем он вам нужен:</p><p><a href="https://tproger.ru/articles/yazyk-elixir-i-funkcionalnoe-programmirovanie--chto-eto-za-zver-i-pochemu-on-horow-dlya-otkazoustojchivyh-sistem">Язык Elixir и функциональное программирование: что это за зверь и почему он хорош для отказоустойчивых систем</a> — Знакомим пользователей с Elixir и его применением.</p><p><a href="https://tproger.ru/articles/pochemu-mikroservisy-ne-nuzhny--antihajpovyj-razbor">Почему микросервисы не нужны: антихайповый разбор</a> — Анализируем случаи, когда микросервисная архитектура может быть излишней и неэффективной.</p><p><a href="https://tproger.ru/articles/10-luchwih-platform-dlya-sozdaniya-prilozhenij-bez-edinoj-strochki-koda">10 лучших платформ для создания приложений без единой строчки кода</a> — Обзор десяти лучших no-code платформ, позволяющих создавать приложения без программирования.</p><p>Скорее пользуйтесь нашим гайдом и читайте предыдущие. Вот, например, по <a href="https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety">мобильной разработке</a> и <a href="https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty">React</a>.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>Опрос сотни IT-команд из LinkedIn, Roblox и т.д раскрыл главную боль разработки. И это не скорость</title>
      <link>https://tproger.ru/news/opros-sotni-it-komand-iz-linkedin--roblox-i-t-d-raskryl-glavnuyu-bol-razrabotki--i-eto-ne-skorost</link>
      <comments>https://tproger.ru/news/opros-sotni-it-komand-iz-linkedin--roblox-i-t-d-raskryl-glavnuyu-bol-razrabotki--i-eto-ne-skorost?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/opros-sotni-it-komand-iz-linkedin--roblox-i-t-d-raskryl-glavnuyu-bol-razrabotki--i-eto-ne-skorost</guid>
      <description><![CDATA[<p>Опрос инженеров из LinkedIn, Roblox и других показал: главная боль разработки — не скорость, а хаос из-за разрозненной инфраструктуры</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/opros-sotni-it-komand-iz-linkedin--roblox-i-t-d-raskryl-glavnuyu-bol-razrabotki--i-eto-ne-skorost">Опрос сотни IT-команд из LinkedIn, Roblox и т.д раскрыл главную боль разработки. И это не скорость</a>»</p>]]></description>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Apr 2025 19:05:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2024 году команда Earthly <a href="https://earthly.dev/blog/lunar-launch/">провела</a> более 100 интервью с инженерами из крупных IT-компаний: LinkedIn, Roblox, DocuSign, Box, Twilio, Morgan Stanley и других.</p><p>Больше новостей — в нашем тг-канале «<a href="https://t.me/your_tech">Представляешь»</a></p><p>Цель — понять, с какими проблемами сталкиваются команды разработки и как их продукт может помочь. Ожидали услышать про медленный CI/CD. Но почти никто не назвал это проблемой. Настоящая боль — не в скорости, а в хаосе.</p><h2>Хаос вместо продуктивности</h2><p>Проблема оказалась глубже: неуправляемое разнообразие технологий. Микросервисная архитектура дала командам свободу. И породила хаос.</p><p>Внутри одной компании могут сосуществовать десятки языков программирования, CI-систем, скриптов, подходов к сборке и деплою. Каждый сервис — как отдельный стартап со своими правилами.</p><p>Инфраструктурные команды тратят кучу времени на поддержку этой мозаики. Команды приложений жалуются на рутину и несогласованные требования. Безопасники — на полное отсутствие прозрачности. А техлиды не могут понять, кто как пишет и насколько качественно.</p><h2>Никакая стандартная стратегия не помогает</h2><p>Earthly выделили шесть подходов, которыми компании пытаются справиться с этим:</p><ul><li>Общие CI/CD шаблоны — хороши только если внедрены с самого начала. Иначе — боль и сопротивление.</li><li>Чек-листы — неэффективны и легко обходятся.</li><li>Скоркард-системы — поверхностны, нет обратной связи в моменте.</li><li>Специализированные тулзы — много окон, нет общей картины.</li><li>Свои решения — дорого и нестабильно.</li><li>Вообще ничего — красиво на бумаге, но в реальности не работает.</li></ul><p>Все методы частично решают проблему, но ни один не дает контроля без ущерба свободе.</p><h2>Разработка стала сложнее — контроль должен догонять</h2><p>Всё, что раньше работало на уровне одной команды, теперь ломается на уровне десятков сервисов и сотен разработчиков. Lunar обещает вернуть платформенным и DevEx-командам контроль, не ломая при этом свободу инженеров. И судя по интервью, именно это сейчас и нужно.</p>]]></content:encoded>
    </item>
  </channel>
</rss>