<?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>Docker</title>
    <description/>
    <link>https://tproger.ru/tag/docker</link>
    <atom:link href="https://tproger.ru/tag/docker/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sat, 03 Oct 2026 17:06:49 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Docker</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Llama 2 на DigitalOcean за $12: self-hosting гид</title>
      <link>https://tproger.ru/articles/llama-2-na-digitalocean-za-12-self-hosting-gid</link>
      <comments>https://tproger.ru/articles/llama-2-na-digitalocean-za-12-self-hosting-gid?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/llama-2-na-digitalocean-za-12-self-hosting-gid</guid>
      <description><![CDATA[<p>Разбираем, как запустить Llama 2 7B в Docker на DigitalOcean с FastAPI API. Реальная смета, пошаговые команды и советы по безопасности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/llama-2-na-digitalocean-za-12-self-hosting-gid">Llama 2 на DigitalOcean за $12: self-hosting гид</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Нейронные сети]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 05 Aug 2026 10:02:46 GMT</pubDate>
      <content:encoded><![CDATA[<p>Плата за OpenAI API для небольшого pet-проекта легко переваливает за несколько сотен долларов в месяц. Альтернатива — развернуть открытую языковую модель самостоятельно и платить только за виртуальный сервер. В этом гайде разбираем, как запустить <b>Llama 2 7B</b> в собственном Docker-контейнере на DigitalOcean и получить production-ready HTTP API меньше чем за 15 минут работы с терминалом.</p><p>Автор оригинального руководства указывает заголовок «за $5/месяц», но на практике минимально жизнеспособная конфигурация обходится в <b>$6–12/месяц</b>. За $5 дроплет даёт всего 1 ГБ ОЗУ — для семимиллиардной модели этого катастрофически мало. Ниже — реальные цифры и честная смета.</p><h2>Что такое Llama 2 и зачем её self-hostить</h2><p><b>Llama 2</b> — семейство открытых больших языковых моделей от Meta. Версия 7B содержит 7 миллиардов параметров, понимает английский и ряд других языков, умеет писать код, отвечать на вопросы и дополнять текст. Лицензия разрешает коммерческое использование при соблюдении простых правил, а веса можно скачать с Hugging Face.</p><p><b>Self-hosting</b> в данном случае означает, что вы сами устанавливаете модель на арендованный сервер, контролируете окружение, не делитесь данными пользователей с третьими лицами и не зависите от чужих rate limit. Главная экономика: при интенсивном использовании собственный инференс обходится в десятки раз дешевле облачных API.</p><ul><li>Llama 2 7B можно запустить на DigitalOcean Droplet с 2 vCPU и 4 ГБ ОЗУ при 4-битном квантовании.</li><li>Реальная стоимость — $12/месяц за Droplet плюс около $0,50 за трафик, а не $5.</li><li>Docker + FastAPI дают воспроизводимое окружение и HTTP API из коробки.</li><li>Для загрузки весов с Hugging Face нужен токен и принятая лицензия на Llama 2.</li><li>Для публичного доступа обязательны HTTPS, базовая аутентификация и rate limiting.</li></ul><h2>Что понадобится для развёртывания</h2><h3>Аппаратная часть</h3><ul><li>DigitalOcean Droplet на Ubuntu 22.04 LTS.</li><li>Минимум: 1 vCPU / 2 ГБ ОЗУ ($6/месяц) — только для экспериментов.</li><li>Рекомендуемый: 2 vCPU / 4 ГБ ОЗУ ($12/месяц) — стабильная работа с квантованием.</li><li>80 ГБ SSD: ~13 ГБ уйдёт на Docker-образ, модель и кэш.</li></ul><h3>Программная часть</h3><ul><li>SSH-ключ и базовое умение работать в терминале.</li><li>Docker и Docker Compose для управления контейнером.</li><li>Аккаунт на <a href="https://huggingface.co">Hugging Face</a> с принятой лицензией Llama 2 и API-токеном.</li><li>Nginx или аналогичный reverse proxy для вывода API в интернет.</li></ul><p><b>Российская специфика:</b> сайт DigitalOcean периодически попадает под блокировки Роскомнадзора. Для регистрации и управления Droplet может понадобиться VPN. Альтернативы — Hetzner, Selectel, Yandex Cloud или другие европейские и российские провайдеры; логика развёртывания от этого почти не меняется.</p><h2>Шаг 1. Создаём Droplet и подключаемся по SSH</h2><p>В панели DigitalOcean нажимаем <b>Create → Droplet</b>. Выбираем ближайший к целевой аудитории регион — для России это обычно Франкфурт или Амстердам. В качестве образа указываем Ubuntu 22.04 x64, тип — Basic Shared CPU, конфигурацию — 2 vCPU / 4 ГБ RAM. Авторизацию настраиваем через SSH-ключ, парольный вход отключаем.</p><p>Сгенерировать ключ и подключиться можно так:</p><h2>Шаг 2. Устанавливаем Docker и зависимости</h2><p>После подключения обновляем пакеты и ставим Docker официальным скриптом. Добавляем root в группу docker, чтобы не писать sudo перед каждой командой.</p><h2>Шаг 3. Собираем Docker-образ с FastAPI</h2><p>Приложение состоит из трёх файлов: Dockerfile, requirements.txt и app.py. Ключевой трюк — CPU-версия PyTorch и библиотека bitsandbytes, которая позволяет загрузить 7-миллиардную модель в 4 ГБ видеопамяти/ОЗУ.</p><h3>Dockerfile</h3><h3>requirements.txt</h3><h2>Шаг 4. Пишем FastAPI-приложение</h2><p>Приложение загружает модель при старте, кэширует её в /app/models и предоставляет три endpoint: /health, /info и /generate. Квантование в 4 бита снижает точность незначительно, но уменьшает потребление памяти в 3–4 раза.</p><p>Создаём файл с токеном Hugging Face. Никогда не коммитьте его в репозиторий: в продакшене используйте переменные окружения или секрет-менеджер.</p><h2>Шаг 5. Собираем и запускаем контейнер</h2><p>Первый запуск занимает 10–15 минут: скачиваются зависимости PyTorch и веса модели. Чтобы не качать веса при каждом перезапуске, подключаем Docker volume.</p><p>Для удобного управления добавляем docker-compose.yml:</p><h2>Шаг 6. Проверяем API</h2><p>Когда в логах появится Uvicorn running on http://0.0.0.0:8000, тестируем endpoint'ы:</p><p>Ответ должен содержать сгенерированный текст, количество токенов и время инференса. На CPU одна генерация из 100 токенов занимает 4–10 секунд — это нормально для бюджетного дроплета.</p><h2>Шаг 7. Безопасно выводим API в интернет</h2><p>Открывать порт 8000 напрямую в интернет небезопасно. Ставим Nginx как reverse proxy, настраиваем HTTPS через Let's Encrypt и базовую аутентификацию. Для rate limiting используем limit_req в Nginx или облачный firewall DigitalOcean.</p><p>Минимальная конфигурация Nginx выглядит так:</p><p><b>Про безопасность:</b> Llama 2 — мощная модель, способная генерировать вредоносные инструкции, персональные данные или нежелательный контент. Не выставляйте публичный API без аутентификации, логируйте запросы и рассмотрите фильтрацию промптов на уровне приложения.</p><h2>Выводы</h2><p>Self-hosted Llama 2 — рабочий способ снизить затраты на генеративный ИИ в pet-проектах и прототипах. При правильном квантовании семимиллиардная модель помещается в бюджетный дроплет, а Docker + FastAPI превращают развёртывание в рутинную процедуру. Главное — не экономить на RAM и не забывать про безопасность публичного API.</p><blockquote>Собственный инференс — не волшебная кнопка, а инструмент с чёткой областью применения: он выигрывает там, где важны предсказуемость расходов, приватность данных и отсутствие лимитов.</blockquote><p>Если соберётесь повторить гайд, начните с $12 Droplet и протестируйте нагрузку вручную. А если DigitalOcean недоступен — переносите тот же Docker Compose на Hetzner, Selectel или Yandex Cloud без изменения кода.</p><p><b>Источник:</b> <a href="https://dev.to/ramosai/how-to-deploy-llama-2-on-digitalocean-for-5month-complete-self-hosting-guide-13dl">How to Deploy Llama 2 on DigitalOcean for $5/Month: Complete Self-Hosting Guide</a> — RamosAI, Dev.to.</p>]]></content:encoded>
    </item>
    <item>
      <title>Своя self-hosted двухсерверная VPN-архитектура. Подробный путь разработки и ошибки, с которыми вы можете столкнуться</title>
      <link>https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r</link>
      <comments>https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Роман Фролов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r</guid>
      <description><![CDATA[<p>Проект представляет из себя быстрый способ воссоздать архитектуру состоящую из 2 серверов (локальный + удаленный) с определенными сервисами, которые решают специфические задачи. Проект сделан прежде всего для меня, а также для людей которые хотят свой готовый self-hosted сервер из коробки с полной системой обслуживания</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r">Своя self-hosted двухсерверная VPN-архитектура. Подробный путь разработки и ошибки, с которыми вы можете столкнуться</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[unix]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Музыка]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[DIY]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[NFT]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 26 Jul 2026 15:46:26 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всё
 началось с того, что меня перестал устраивать мой подход к 
развертыванию личных сервисов. Я решил переписать всё с нуля. К тому же 
это был отличный повод получить новые навыки и попробовать инструменты, 
до которых давно не доходили руки.</p><p>Арендовать мощные VPS под 
ресурсоемкие задачи в текущих реалиях выходит неоправданно дорого. При 
этом дома у меня уже был выделенный неттоп (мини-ПК) с 16 ГБ оперативной
 памяти на базе энергоэффективного процессора Intel N95.</p><p>Пройдя 
путь от простых Bash-скриптов и сторонних туннелей до полностью 
автоматизированной инфраструктуры, я создал проект ServeHub-2. В этой 
статье я подробно разберу, как эволюционировала сеть проекта, почему 
декларативный подход победил императивный и с какими неочевидными багами
 пришлось столкнуться в процессе автоматизации.</p><h2>История настройки сетевой архитектуры</h2><h3>Использование Tuna</h3><p>В
 самом начале проекта я еще не думал о VPN как о способе пробития NAT и 
основе, на которой будет строиться вся система. Первое, к чему я пришел —
 сервис Tuna. Если кратко, это аналог Cloudflare Tunnel за условные 300 
рублей. У него очень приятный веб-интерфейс и невероятно простая 
настройка. Однако для полноценной независимой архитектуры он не подошел 
по двум причинам:</p><ul><li>Сервера Tuna находятся вне контроля пользователя.</li><li>На удаленном сервере нельзя развернуть свои сопутствующие сервисы.</li></ul><p>В целом сервис действительно удобный, но для моих задач он оказался слишком ограничивающим.</p><p>Вот
 пример конфига для tuna (все максимально просто, создаем контейнеры для
 ssh туннеля, чтобы был доступ ssh, а также основной http туннель с 
привязкой к nginx или любому другому прокси если такой есть):</p><h3>В поисках гибкости: тесты Pangolin и переход к FRP</h3><p>После Tuna я решил двигаться в сторону собственного контроля и попробовал Pangolin.
 Однако решение быстро отвалилось: для дешёвого сервера оно оказалось 
слишком «тяжёлым» и избыточным. Главные минусы — ощутимый оверхед по 
ресурсам и лишний слой принудительной веб-аутентификации перед самими 
сервисами. Это ломало нормальное взаимодействие с родными мобильными 
клиентами (вроде Element для Matrix или Bitwarden для паролей), где 
повторная авторизация в браузере просто не нужна.</p><p>На смену пришел FRP (Fast Reverse Proxy).
 Он выполнял ту же функцию проброса, но хостил я его уже на собственном 
арендованном VPS в режиме Layer 4 (TCP). Это дало абсолютную гибкость: 
внешний VPS не заглядывал внутрь пакетов и ничего не расшифровывал, а 
просто пересылал сырой поток домой. Кроме того, это отлично 
оптимизировало расходы: вместо 300 рублей за Tuna и ещё 300 рублей за 
отдельный VPN, я стал платить всего 500 рублей за один стойкий VPS, 
который мог настраивать как хочу. (к тому же можно было обойтись даже 
дешевле, так как VPS с 4 гб оперативки загружен всего лишь на 40%, 
процессор всего на 20%-40%)</p><p>FRP состоит из 2 конфигурационных 
файлов (один на удаленном сервере frp server, другой на локальном frp 
client), все также довольно просто, однако его можно использовать на 
разных слоях. У меня он брал трафик за стандартный TCP и передавал его 
на локальный сервер.</p><p>Также доп. фишка в том что основная 
конфигурация происходит именно в frpc, который, в свою очередь, передает
 часть настроек на frp на удаленном сервере.</p><p>frpc.toml:</p><p>frps.toml:</p><h3>Полноценный переезд на WireGuard (AmneziaWG) и 8 часов отладки</h3><p>Со временем архитектура эволюционировала в сторону полноценной VPN-сети на базе WireGuard, а точнее — его модификации AmneziaWG. Причин для этого шага было несколько:</p><ul><li>Безопасность: FRP всё же открывал внутренние ресурсы в публичный интернет, оставляя их доступными для сканеров портов.</li><li>Удобство маршрутизации:
 Все участники сети стали равноправными узлами в одной виртуальной 
локальной подсети. Больше не нужно было настраивать постоянные 
односторонние пробросы.</li><li>Дополнительный бонус:
 Поскольку удаленный VPS был куплен в Нидерландах, через этот же VPN я 
автоматически получил безопасный доступ ко всем зарубежным ресурсам.</li></ul><p>Для реализации схемы на удаленном VPS был развернут контейнер wg-easy с поддержкой AmneziaWG, а на домашнем мини-ПК — клиентский контейнер Amnezia (сборка из Dockerfile с использованием amnezia-tools  и модулем ядра хоста).</p><p>И
 именно здесь я поймал самый изнурительный баг проекта. После 
развертывания трафик упорно шёл только в одну сторону. Часов 8 ушло на 
диагностику iptables, маршрутов и чтение зарубежных форумов (что 
бесполезно, учитывая специфику наших блокировок). Оказалось, провайдер 
просто дропал обратный трафик стандартного WireGuard, так как пакеты шли
 без маскировки. Причина крылась в docker-compose.yml: у меня было прописано image: ghcr.io/wg-easy/wg-easy:latest. Как выяснилось, тег latest  на Docker Hub намертво прилип к старой 14-й версии, а поддержка параметров AmneziaWG появилась только в ветке 15.x. Изменение тега на конкретную версию (15.3) решило проблему за секунду.</p><p>Благодаря
 переходу конфигурация получилась максимально простой, основные отличия 
от стандартной документации выделил в коде: (в основном то, на что 
пришлось долго рыть информацию)</p><h3>Настройка Nginx</h3><p>Чтобы
 сервисы были доступны исключительно внутри подсети VPN, я задействовал 
Nginx. Доступ к приложениям был жестко ограничен на уровне конфигурации —
 веб-сервер принимает запросы только из диапазона IP-адресов 10.8.0.0/24. Любые попытки постучаться на сервер из внешнего интернета без активного VPN-туннеля автоматически сбрасываются Nginx.</p><p>Логика
 распределения завязана на proxy-протоколе: Nginx на удаленном VPS 
выступает основным входным узлом, принимает зашифрованный трафик, 
заворачивает его в заголовки с реальным IP-адресом клиента и через 
туннель перекидывает на локальный Nginx домашнего сервера. Локальный 
веб-сервер уже сам расшифровывает SSL и распределяет трафик по конечным 
Docker-контейнерам, сохраняя реальные IP в логах безопасности.</p><p>Вставлю
 один кусок кода из nginx на удаленной машине для примера, так все 
остальное примерно похоже (конфиги использовались в виде .template):</p><h3>SSL-сертификаты</h3><p>Для получения валидных SSL-сертификатов я настроил работу через автоматический Certbot по challenge-валидации DNS-01 c API Webnames. Сам домен привязан к внутреннему IP-адресу 10.8.0.1.
 Проверка через DNS позволила выпустить единый wildcard-сертификат на 
весь домен и его поддомены без необходимости держать открытым 80-й порт 
веб-сервера наружу.</p><p>Уточню, что certbot запускается автоматически 
во время выполнения Ansible плейбука, поэтому самому кроме указания 
переменных ничего делать не нужно.</p><p>В
 итоге получилась схема, при которой все сервисы доступны по красивым 
доменным именам с HTTPS, но абсолютно невидимы для внешнего интернета.</p><p>Вот настройка certbot:</p><h2>История софта</h2><p>Параллельно
 с сетевой структурой развивался и сам набор приложений. Изначально я 
хотел собрать в одном месте утилиты, которыми пользуюсь каждый день, но в
 процессе селфхостинга быстро понимаешь: нельзя просто накидать 
контейнеров и надеяться, что мини-ПК справится, а конфигурационные файлы
 не превратятся в кашу.</p><h3>Первый стек и оптимизация</h3><p>Первыми на домашнем сервере прижились медиа-сервисы: Navidrome для стриминга музыки и Audiobookshelf
 для аудиокниг и подкастов. Они легковесные, имеют отличные мобильные 
клиенты с синхронизацией прогресса и полностью закрывают мои 
потребности. Позже к ним добавился Nextcloud как единое независимое облако для файлов, контактов и семейных документов.</p><p>Затем встал вопрос безопасного хранения паролей. Сначала я смотрел в сторону оригинального Bitwarden, но в итоге я выбрал Vaultwarden
 — альтернативный сервер на Rust, полностью совместимый с API Bitwarden.
 Он потребляет считанные мегабайты оперативной памяти и работает 
идеально. Дополнительно для удобства управления всей этой распределенной
 Docker-инфраструктурой в локальный стек был добавлен Portainer. (+ Portainer Agent на удаленный сервер)</p><p>Из интересных моментов, где мне пришлось немного больше возиться, чем с остальными сервисами это nextcloud настройка:</p><h3>Ошибки проектирования: почему я удалил Matrix (Synapse)</h3><p>Не все решения прошли проверку временем. На этапе использования Tuna и FRP я развернул сервер Matrix (Synapse)
 для защищенного обмена сообщениями. Мне казалось это крутой идеей, но 
когда я окончательно перешел на AmneziaWG, целесообразность мессенджера 
внутри закрытого туннеля сошла на нет.</p><p>Synapse требовал слишком 
много ресурсов, впустую расходовал оперативку домашнего ПК и усложнял 
конфиг Nginx. При этом реальной пользы для семьи он не приносил. Для 
критических алертов инфраструктуры и повседневного общения проще и 
эффективнее оказалось использовать Telegram. (плюс алертинг настроен 
именно через него) В итоге я полностью выпилил Synapse из стека, 
освободив ресурсы.</p><p>Вместо него я добавил в связку к wg-easy локальный AdGuard Home.
 Теперь он работает прямо внутри VPN-сети: очищает весь трафик от 
рекламы и трекеров на лету, кэширует DNS-запросы и не дает истории 
веб-серфинга улетать внешним провайдерам.</p><p>Основной проблемой с 
которой я столкнулся при использовании AdGuard Home, так это то что я 
так и не понял как заставить использовать AmneziaVPN клиент AdGuard как 
основной DNS, при этом AmneziaWG работает прекрасно. Как я понимаю дело в
 том что AmneziaWG работает намного проще на уровне ip и у него нету 
никаких доп фильтров, настроек и подобного, поэтому он просто берет 
данные из конфига.</p><h3>От костылей на Bash к декларативному Ansible</h3><p>Весь
 стек на обоих серверах разворачивался через bash скрипты, что было уж 
очень плохо с точки зрения идемпотентности. Во первых из-за bash мне 
постоянно приходилось очищать сервера, так как нормальных проверок у 
меня не было и писать я их не хотел, а также было много костылей с 
импортом переменных, записями в файлы и подобным.</p><p>Так я пришел к декларативному подходу и Ansible.
 Теперь вся конфигурация описывается в виде плейбуков и ролей, 
отражающих конечное желаемое состояние серверов. Конфиденциальные данные
 перенесены в файл secrets.yml, а хрупкие конструкции 
автоматизированы через шаблоны Jinja2. Проект стал идемпотентным: если 
шаги уже выполнены, Ansible их просто пропускает.</p><p>В итоге 
получилось несколько yaml файлов для стандартной настройки системы 
(bootstrap_os.yml) и для настройки каждого из хостов (setup_local.yml и 
setup_remote.yml). В итоге теперь все что нужно чтобы полностью с нуля 
развернуть проект - скачать Ansible, несколько других зависимостей на 
свой рабочий пк и запустить один manage_deploy.sh, в котором можно будет
 выбрать сценарий как будет вести себя Ansible и спокойно дождаться 
разворачивания сервисов.</p><p>Также благодаря Ansible я удобно 
реализовал переносимость проекта. Так как я решил не использовать тома 
docker, и вместо этого храню все в папках, чтобы перенести старые данные
 проекта нужно просто скопировать папку apps-data и положить ее в нужное
 место и все само заработает после повторного развертывания проекта. В 
Ansible выделяется отдельная пауза для этого.</p><p>Вот пример основного плейбука deploy.yml:</p><h3>Тестирование мультидистрибутивности с помощью Vagrant</h3><p>Проект
 изначально затачивался под работу на трех дистрибутивах: Ubuntu, Debian
 и Arch Linux. Тестировать Ansible-плейбуки прямо на рабочей локальной 
машине (в моем случае — EndeavourOS) слишком рискованно, а создавать 
виртуальные машины руками — долго и неудобно.</p><p>Решением стал Vagrant,
 позволяющий за пару минут развернуть чистые ОС в VirtualBox из готовых 
образов. Но в процессе настройки мультивендорного стенда в режиме 
сетевого моста (public_network) всплыли две критические проблемы:</p><ol><li>Конфликт DNS:
 По умолчанию Vagrant создает NAT-интерфейс для управления нодой. При 
включении второго (публичного) интерфейса для локальной сети ломался 
дефолтный DNS-резолвер. Проблему пришлось решать принудительной очисткой
 и перезаписью файла /etc/resolv.conf через inline-скрипт автоматизации Vagrant.</li><li>Проблема с GRUB на Debian: В используемом базовом образе generic/debian12
 конфигурация GRUB сохраняла жесткую привязку к конкретному имени диска 
из окружения сборщика. При повторном развертывании плейбуков на тестовом
 стенде это приводило к сбоям загрузчика. Чтобы автоматизировать 
очистку, пришлось внедрить скрипт, который на лету определяет имя 
системного диска через lsblk и автоматически передает правильные параметры в загрузчик через утилиту debconf-set-selections.</li></ol><p>Вот код Vagrantfile: (в node.vm.provision происходит основное решение ошибок)</p><p>Надежная система бэкапов на базе BorgmaticДля создания резервных копий я внедрил Borgmatic
 (удобную надстройку над дедуплицирующим инструментом Borg Backup). Весь
 процесс автоматизирован с помощью связки системных юнитов borgmatic.service и borgmatic.timer. В бэкап уходят две ключевые директории: apps-data (конфигурации приложений и баз данных) и PersonalData (медиатека: музыка, книги, подкасты, файлы Nextcloud).</p><p>Развертывание
 системы бэкапов полностью берет на себя Ansible. Мне достаточно указать
 UUID внешнего жесткого диска — скрипт сам проверит его наличие в 
системе, примонтирует в нужную директорию, создаст зашифрованный 
репозиторий и настроит политику ротации (хранение 7 ежедневных, 4 
еженедельных и 6 ежемесячных копий). Также в Prometheus выведен 
мониторинг самого репозитория .borg для отслеживания его размера и статуса успешности архивации.</p><p>Главная
 проблема при бэкапе работающих Docker-контейнеров — риск скопировать 
базу данных в «битом» или неконсистентном состоянии, если в момент 
создания архива в нее шла активная запись. Чтобы решить эту проблему, я 
задействовал механизм хуков в конфигурации Borgmatic.</p><p>Перед началом резервного копирования автоматически срабатывает команда остановки контейнеров проекта (docker-compose down),
 а после успешного завершения (или в случае возникновения непредвиденной
 ошибки) контейнеры автоматически поднимаются обратно в фоновом режиме. 
Для удобного просмотра архивов и быстрого восстановления файлов я 
развернул веб-интерфейс Borg UI.</p><p>Конфигурация borgmatic: (использую как Jinja2 шаблон, чтобы Ansible в плейбуках сам подставил переменные)</p><h2>Наблюдаемость (Observability) уровня Enterprise</h2><p>В последних релизах (v1.2.0 и v1.3.0) фокус проекта сместился на мониторинг и работу с логами.</p><h3>Эволюция алертинга и переход на Gatus</h3><p>Изначально для мониторинга доступности я смотрел на Uptime Kuma, но отказался из-за отсутствия удобной декларативной настройки через конфиги. Затем я развернул связку Blackbox Exporter и Alertmanager
 с уведомлениями в Matrix. Но тут крылась логическая несостыковка: весь 
алертинг был завязан на локальном ПК, и в случае его аппаратного отказа я
 бы просто лишился уведомлений.</p><p>Тогда я решил вернуть Uptime Kuma,
 но развернуть его на удаленном VPS в качестве внешнего «сторожа» и 
автоматизировать его настройку через Python-скрипт с библиотекой uptime-kuma-api. Но и тут ждали «грабли» — библиотека не обновлялась три года и намертво ломалась на свежих версиях Kuma.</p><p>В итоге идеальным решением стал Gatus.
 Он изначально проектировался под управление через YAML-конфиги и 
поддерживает отправку алертов, если сервер не отвечает. Из-за специфики 
фронтенда Gatus (он не умеет работать из подкаталога типа /gatus), мне пришлось перенести его и wg-easy на полноценные субдомены gatus. и wireguard.</p><p>Для Gatus получился простой конфиг:</p><p>Для мониторинга аппаратных ресурсов удаленного и локального серверов была развернута связка node-exporter + cAdvisor. Все уведомления теперь приходят мгновенно в Telegram-бота. Чтобы 
избежать лавины одинаковых сообщений (например, при перезагрузке хоста),
 в Alertmanager настроена жесткая группировка и дедупликация событий. 
Также добавлен экспортер для AdGuard Home, выводящий статистику 
заблокированных запросов в Grafana.</p><h3>Централизованные логи: Loki + Grafana Alloy</h3><p>В релизе v1.3.0 в стек была добавлена централизованная система сбора логов Loki. Вместо устаревшего Promtail в качестве агента сбора я применил Grafana Alloy.</p><p>Он
 эффективно собирает логи со всех запущенных Docker-контейнеров, парсит 
их и передает в Loki. Теперь вся история событий, ошибок веб-сервера 
Nginx или падений внутренних приложений доступна в едином интерфейсе 
Grafana с возможностью удобной фильтрации через LogQL, что значительно 
упрощает отладку.</p><p>Конфиг Loki:</p><p>Конфиг Grafana Alloy: (локальный конфиг)</p><h2>Интерфейс: переход на Homepage</h2><p>Изначально для 
домашней страницы я написал кастомную минималистичную HTML-панель с 
Glassmorphism-дизайном. Выглядело это красиво, но добавлять новые 
сервисы вручную через постоянную правку исходного кода было крайне 
неудобно.</p><figure><img src="https://media.tproger.ru/user-uploads/139471/2026-07-15/8a8f2752-8aac-4aa5-898e-98affd01cdff.webp" alt="" /><figcaption>HTML + CSS</figcaption></figure><p>В итоге я заменил самописную страницу на полноценный комьюнити-проект Homepage.
 Это дало некоторую гибкость: вся панель настраивается через простые 
YAML-файлы и поддерживает встроенные виджеты интеграции. Пока что она 
простенькая, но возможно в будущем сделаю что-то более продвинутое.</p><figure><img src="https://media.tproger.ru/user-uploads/139471/2026-07-15/90c65d4a-1310-4a30-b1ad-9e4d3083959d.webp" alt="" /><figcaption>Homepage</figcaption></figure><h2>Заключение</h2><p>Постарался
 подробно рассказать о структуре проекта и как я к этому пришел, очень 
много я не добавил, если пост зайдет, то я обязательно более подробно 
пройдусь по некоторым моментам: как я настраивал Matrix и на каком 
моменте я решил его убрать, как собирал локальный amnezia 
контейнер-клиент, что нового я добавил в релизе 1.4.0 и другое.</p><p>Также
 я перешел с manage_deploy.sh на отдельный GUI клиент, который 
будет полностью автоматизировать процесс подготовки к deploy. (написан на Go Wails). Про это тоже возможно сделаю статью.</p><p>Вся кодовая база проекта, подробная документация, инструкции по развертыванию открыты и доступны для сообщества:</p><p>🔗 GitHub-репозиторий: <a href="https://github.com/canntstand/ServeHub-2" rel="noopener noreferrer nofollow">https://github.com/canntstand/ServeHub-2</a></p><p>Это
 моя первая статья на этом сайте и в то же время первый личный проект, которому я 
отдал так много времени (3 месяца). Буду рад вашему фидбеку в 
комментариях!</p>]]></content:encoded>
    </item>
    <item>
      <title>Бесплатный WAF инструмент кибербезопасности, который я использую</title>
      <link>https://tproger.ru/articles/besplatnyj-waf-instrument-kiberbezopasnosti-kotoryj-ya-ispolzuyu</link>
      <comments>https://tproger.ru/articles/besplatnyj-waf-instrument-kiberbezopasnosti-kotoryj-ya-ispolzuyu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Неопознанный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/besplatnyj-waf-instrument-kiberbezopasnosti-kotoryj-ya-ispolzuyu</guid>
      <description><![CDATA[<p>Разбор бесплатного open-source WAF SafeLine для защиты от OWASP Top 10, DDoS и ботов. Сравнение с ModSecurity и Cloudflare по точности обнаружения атак, минимальные ложные срабатывания, простая установка одной командой Docker.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/besplatnyj-waf-instrument-kiberbezopasnosti-kotoryj-ya-ispolzuyu">Бесплатный WAF инструмент кибербезопасности, который я использую</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Unity]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[IBM]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[CSR]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 01 Jul 2026 05:55:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Решения с открытым исходным кодом достигли такого уровня зрелости, что сегодня они действительно могут конкурировать с коммерческими продуктами — не только по функциональности, но и по удобству использования и поддержке сообщества. Если вы управляете собственной инфраструктурой, больше нет оправдания тому, чтобы оставлять дверь открытой для угроз.</p><p>SafeLine WAF — это бесплатный инструмент, который я лично тестировал.</p><p>Это полностью open-source решения, продукт с действительно бесплатной Community Edition, где ключевые функции не урезаны.</p><p><b>SafeLine WAF — веб-приложенийный межсетевой экран, который действительно поставляется с разумными настройками по умолчанию</b></p><p><b>Что он делает:</b></p><p>Защищает веб-приложения от SQL-инъекций, XSS-атак, командных инъекций, CSRF, SSRF, атак включения файлов и других угроз из списка OWASP Top 10. Также поддерживает защиту от CC/DDoS-атак, управление ботами и может работать как шлюз аутентификации.</p><p><b>Почему он:</b></p><p>Большинство WAF с открытым исходным кодом достаточно сложно настроить. Можно потратить часы на настройку правил, пытаясь остановить ложные срабатывания, из-за которых легитимные пользователи блокируются.</p><p>SafeLine использует другой подход — вместо того чтобы полностью полагаться на сигнатурное обнаружение, он применяет движок семантического анализа, который фактически анализирует и понимает входящие HTTP-запросы. Это позволяет добиться более высокого уровня обнаружения при значительно меньшем количестве ложных срабатываний по умолчанию.</p><p>Некоторые показатели, которые стоит учитыват</p><ol><li>Уровень обнаружения - SafeLine (Balanced) (71.65%), ModSecurity (Level 1) (69.74%), Cloudflare (Free) (10.7%)</li><li>Уровень ложных срабатываний - SafeLine (Balanced) (0.07%), ModSecurity (Level 1) (17.58%), Cloudflare (Free) (0.07%)</li><li>Точность - SafeLine (Balanced) (99.45%), ModSecurity (Level 1) (82.20%), Cloudflare (Free) (98.40%)</li></ol><p>Сбалансированный профиль SafeLine обнаруживает более 70% атак, при этом блокируя легитимный трафик ошибочно всего в 0.07% случаев. Это именно тот уровень настроек по умолчанию, который можно использовать в промышленной среде без постоянного ручного контроля.</p><p>Установка выполняется одной командой</p><p>После запуска он разворачивается как набор Docker-контейнеров: Tengine (форк Nginx) используется в качестве reverse proxy, отдельный сервис отвечает за семантический анализ, PostgreSQL хранит конфигурации и логи, а удобная веб-панель администратора работает на порту 9443.Community Edition поддерживает до 10 сайтов, чего достаточно для большинства личных проектов и небольших бизнес-сценариев.</p><p>Сайт: <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fcodeby.net%2Fgoto%2Flink-confirmation%3Furl%3DaHR0cHM6Ly9jeWJlcnNlcnZhbC50ZWNoL2xhbmRpbmcvc2FmZWxpbmXvv7xHaXRIdWI%253D%26s%3D7008b60d8a0849ba0be350fe25edfa72&amp;postId=3005263" rel="nofollow noopener">https://cyberserval.tech/landing/safeline</a></p><p>GitHub:<a href="https://api.vc.ru/v2.8/redirect?to=http%3A%2F%2Fgithub.com%2Fchaitin%2FSafeLine&amp;postId=3005263" rel="nofollow noopener"> github.com/chaitin/SafeLine</a> (более 21 тыс. звёзд)</p><p>Лицензия: GPL-3.0 / MIT (Community Edition)</p>]]></content:encoded>
    </item>
    <item>
      <title>Как поднять свой S3-совместимый объектный склад на MinIO для staging</title>
      <link>https://tproger.ru/articles/kak-podnyat-svoj-s3-sovmestimyj-obektnyj-sklad-na-minio-dlya-sta</link>
      <comments>https://tproger.ru/articles/kak-podnyat-svoj-s3-sovmestimyj-obektnyj-sklad-na-minio-dlya-sta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-podnyat-svoj-s3-sovmestimyj-obektnyj-sklad-na-minio-dlya-sta</guid>
      <description><![CDATA[<p>Разворачиваем MinIO на VPS, настраиваем HTTPS через Traefik и presigned URL для загрузки файлов. Экономим на облачном S3 на этапе разработки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-podnyat-svoj-s3-sovmestimyj-obektnyj-sklad-na-minio-dlya-sta">Как поднять свой S3-совместимый объектный склад на MinIO для staging</a>»</p>]]></description>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 25 Jun 2026 12:23:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если в приложении есть загрузка файлов — аватары, документы, отчёты, записи звонков — каждый тестовый файл на staging утекает в облачный счёт. AWS S3, Cloudflare R2 и Yandex Object Storage берут деньги за хранение и трафик, а в staging это чистый перерасход: тут нет SLA, зато полно битых загрузок, ночных сбросов базы и файлов, которые никто не удаляет.</p><p>Выход — поднять собственное S3-совместимое хранилище на том же VPS, где крутится staging. <b>MinIO</b> реализует API Amazon S3, понимает те же SDK и presigned URL, но стоит ровно столько, сколько стоит диск сервера. Один и тот же код приложения работает и с MinIO на dev, и с R2 в проде — меняются только переменные окружения.</p><h2>Что такое MinIO и почему он подходит для staging</h2><p>MinIO — это open-source сервер объектного хранилища, написанный на Go. Он поддерживает основные операции S3: бакеты, объекты, multipart upload, versioning, lifecycle, шифрование SSE-S3, CORS и IAM-политики. Для приложения он выглядит как обычный S3-эндпоинт, поэтому подходит почти любой SDK: AWS SDK, boto3, minio-js, aws-sdk-go.</p><p>На staging важно не столько масштабирование, сколько идентичность поведения продакшена. Если в проде R2 или S3, а в staging — локальная файловая система, вы тестируете не тот код. MinIO закрывает этот разрыв: тот же PutObjectCommand, те же presigned URL, те же ошибки SignatureDoesNotMatch.</p><ul><li>MinIO — полноценный S3-совместимый сервер, который можно развернуть в Docker на VPS за 10–15 минут.</li><li>Для staging это экономия на хранении тестовых файлов и единый код с продакшеном.</li><li>HTTPS и домен лучше отдавать reverse proxy — Traefik или NGINX — с Let’s Encrypt.</li><li>Presigned URL позволяют загружать и скачивать файлы напрямую из браузера, не проксируя байты через бэкенд.</li><li>Root-ключи MinIO нельзя отдавать приложению: создавайте отдельного пользователя с IAM-политикой только на нужный бакет.</li></ul><h2>Архитектура: прод против staging</h2><p>В продакшене обычно используется управляемое хранилище: AWS S3, Cloudflare R2, Yandex Object Storage, Hetzner Object Storage. Там работают репликация, резервное копирование и чужой дежурный. В staging достаточно одного MinIO-контейнера на сервере с регулярным зеркалированием в дешёвое холодное хранилище.</p><p>Приложение не знает, с кем оно говорит: код инициализации клиента одинаков. Разница только в переменных окружения: эндпоинте, регионе, ключах и флаге forcePathStyle, который нужен большинству S3-совместимых сервисов, включая MinIO и R2.</p><p><b>Важно:</b> виртуальный хостинг bucket.example.com в MinIO работает, но на staging проще включить path-style и не мучиться с DNS-записями под каждый бакет.</p><h2>Что понадобится</h2><ul><li>VPS с Linux, публичным IP и открытыми портами 80/443.</li><li>Два A-записи: minio-staging.example.com и minio-console.example.com.</li><li>Docker и Docker Compose v2.</li><li>Reverse proxy с TLS — в примере Traefik v2 + Let’s Encrypt.</li><li>Около 10 ГБ свободного места под тестовые данные.</li></ul><h2>Разворачиваем MinIO в Docker Compose</h2><p>Минимальный docker-compose.staging.yml заводит один контейнер, внешнюю сеть для Traefik и именованный том для данных.</p><p>Два параметра критичны для presigned URL. MINIO_SERVER_URL говорит серверу, на каком публичном домене подписывать ссылки. Без него ссылка будет подписана для http://minio:9000 и браузер отклонит подпись. MINIO_BROWSER_REDIRECT_URL нужен для корректных редиректов веб-консоли.</p><h2>Прокидываем HTTPS через Traefik</h2><p>Добавляем лейблы к сервису minio, чтобы Traefik маршрутизировал API и консоль на разные порты и автоматически выпускал сертификаты.</p><p>Проверяем здоровье сервера с локальной машины: curl -I https://minio-staging.example.com/minio/health/live должен вернуть HTTP 200.</p><p><b>Cloudflare:</b> для поддомена с API лучше выключить оранжевое облако. Бесплатный тариф Cloudflare обрезает тело запроса на 100 МБ и может убирать S3-заголовки, из-за чего ломается подпись.</p><h2>Бакеты, политики и отдельный пользователь для приложения</h2><p>После запуска создаём бакет и отдельного IAM-пользователя. Делать это root-ключами приложения — плохая идея: root может удалить всё.</p><p>Теперь создаём пользователя staging-app и IAM-политику, ограничивающую права только этим бакетом.</p><p>Логин staging-app и его секрет — это и есть S3_ACCESS_KEY и S3_SECRET_KEY для приложения.</p><h2>Код приложения не меняется</h2><p>Пример на AWS SDK v3 для Node.js. Обратите внимание на forcePathStyle: true: без него SDK попытается обратиться к bucket.minio-staging.example.com, и запрос уйдёт в никуда.</p><p>Переменные для staging:</p><p>Для продакшена — только другой набор значений, код идентичен.</p><h2>Presigned URL: загрузка и скачивание без проксирования</h2><p>Presigned URL — это обычный HTTPS URL с короткой подписью в query string. Кто угодно может выполнить ровно то действие, на которое выдана подпись: PUT для загрузки или GET для скачивания. Бэкенд проверяет права, подписывает URL и отдаёт клиенту — сам файл идёт напрямую в MinIO.</p><h3>Загрузка из браузера</h3><p>Важный подводный камень: Content-Type, который браузер отправляет при PUT, должен точно совпадать с тем, что было передано в PutObjectCommand. Иначе MinIO вернёт SignatureDoesNotMatch.</p><h3>Скачивание приватных файлов</h3><p><b>Почему это лучше проксирования:</b> при прямой загрузке через ваше API все байты проходят через приложение, съедая CPU, RAM и пропускную способность. С presigned URL трафик идёт между клиентом и MinIO — бэкенд только подписывает ссылку.</p><h2>CORS, lifecycle и безопасность</h2><p>Несколько команд, которые стоит выполнить сразу после создания бакета.</p><h3>CORS для браузерных загрузок</h3><h3>Автоудаление старых тестовых файлов</h3><h3>Шифрование данных в покое</h3><p>И ещё раз: root-ключи храните в менеджере секретов и используйте только для mc admin. Консоль MinIO, если она доступна из интернета, закрывайте IP-allowlist или базовой авторизацией на уровне Traefik.</p><h2>Бэкапы и мониторинг</h2><p>Staging не должен хранить что-то ценное, но периодическое зеркалирование в дешёвое холодное хранилище спасает от случайного удаления. Команда mc mirror синхронизирует бакет в Backblaze B2, Yandex Object Storage или другой S3-совместимый бэкенд.</p><p>Для метрик MinIO отдаёт Prometheus-экспортёр по пути /minio/v2/metrics/cluster. В Grafana можно импортировать дашборд ID 13502 и сразу видеть занятое место, RPS, задержки и ошибки.</p><h2>Типичные проблемы</h2><ul><li><b>SignatureDoesNotMatch при PUT</b> — браузер отправил Content-Type, отличный от подписанного. Проверьте заголовок PUT.</li><li><b>Подписанная ссылка работает локально, но не в браузере</b> — не задан MINIO_SERVER_URL. Ссылка подписана для внутреннего http://minio:9000.</li><li><b>403 после Cloudflare</b> — бесплатный тариф Cloudflare модифицирует заголовки. Переведите A-запись в режим DNS-only.</li><li><b>CORS preflight failed</b> — на бакете не настроены CORS-правила.</li><li><b>Консоль редиректит на http://minio:9001</b> — не задан MINIO_BROWSER_REDIRECT_URL.</li></ul><h2>Выводы</h2><p>Self-hosted MinIO на staging — это не попытка заменить облако, а способ сделать тестовую среду дешевле и ближе к продакшену. Тот же API, те же SDK, те же presigned URL, но без счетов за хранение битых файлов и ночных сбросов базы.</p><p>Ключевые моменты, которые стоит запомнить: всегда указывайте MINIO_SERVER_URL для корректных подписей, не используйте root-ключи в приложении, включайте path-style на staging и настраивайте lifecycle, чтобы мусор не копился.</p><blockquote>Самое дорогое в staging — не железо, а различия в кодовых путях между dev и prod. MinIO помогает убрать одну из этих разниц почти бесплатно.</blockquote><p>Источник: <a href="https://www.freecodecamp.org/news/how-to-self-host-an-s3-compatible-object-store-with-minio-on-your-staging-server/">freeCodeCamp — How to Self-Host an S3-Compatible Object Store with MinIO on Your Staging Server</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как написать Kubernetes-оператор с нуля на Go: полный гайд</title>
      <link>https://tproger.ru/articles/kak-napisat-kubernetes-operator-s-nulya-na-go-polnyj-gajd</link>
      <comments>https://tproger.ru/articles/kak-napisat-kubernetes-operator-s-nulya-na-go-polnyj-gajd?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-napisat-kubernetes-operator-s-nulya-na-go-polnyj-gajd</guid>
      <description><![CDATA[<p>Разбираем паттерн Operator, создаём контроллер на Go с operator-sdk и учимся отслеживать дрейф конфигурации. Практический туториал — изучите пошагово.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-napisat-kubernetes-operator-s-nulya-na-go-polnyj-gajd">Как написать Kubernetes-оператор с нуля на Go: полный гайд</a>»</p>]]></description>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 08 Jun 2026 14:15:19 GMT</pubDate>
      <content:encoded><![CDATA[<p>Deployment умеет держать поды живыми, но не умеет мигрировать базу данных, управлять жизненным циклом приложений с данными (stateful-сервисов) и не защитит от случайного kubectl scale, который разрушит состояние. Для таких задач в экосистеме K8s существуют <b>операторы</b> — специальные контроллеры, которые кодируют человеческий опыт эксплуатации прямо в программный код.</p><p>Написать оператор можно на Go с помощью operator-sdk: сгенерировать скелет проекта, определить CRD, реализовать Reconcile и задеплоить в кластер. В этой статье разберём паттерн Operator и соберём рабочий оператор, который создаёт Deployment и Service по декларативной спецификации, отслеживает дрейф конфигурации и мгновенно откатывает несанкционированные изменения.</p><p>Оператор Kubernetes — это пользовательский контроллер, который расширяет API кластера собственными ресурсами (CRD) и непрерывно приводит фактическое состояние к желаемому.</p><p>Шаблон Reconcile — Observe → Create → Correct → Report — лежит в основе любого оператора: контроллер наблюдает, создаёт недостающее, исправляет отклонения и сообщает статус.</p><p>С помощью operator-sdk и kubebuilder-меток можно сгенерировать скелет проекта, CRD и RBAC-манифесты, не писать boilerplate вручную.</p><p>Owner Reference связывает дочерние ресурсы с родительским кастомным ресурсом (CR): при удалении WebApp Kubernetes автоматически уберёт связанные Deployment и Service.</p><p>Обновление статуса через Status().Update() изолировано от основного ресурса и предотвращает бесконечные циклы реконсиляции.</p><h2>Почему стандартных примитивов Kubernetes не хватает</h2><p>Kubernetes предоставляет мощный набор базовых абстракций: Pod, Deployment, StatefulSet, Service, Ingress. Они отлично справляются с запуском контейнеров, балансировкой трафика и базовым масштабированием. Однако эти примитивы агностичны к бизнес-логике приложения.</p><p>Представьте, что вам нужно развернуть production-grade кластер PostgreSQL. Помимо самих подов с базой, потребуются: инициализация репликации, управление резервными копиями, обновление версий без простоя, автоматическое переключение при отказе мастера. Всё это — операционная экспертиза, которую DevOps-инженеры накапливают годами. Оператор превращает эту экспертизу в автоматизированный контроллер, который круглосуточно следит за ресурсом и принимает решения.</p><p>Сегодня операторы де-факто стали стандартом для управления сложными stateful-приложениями в Kubernetes: от баз данных и брокеров сообщений до сервисных mesh и CI/CD-систем. Концепция была сформулирована инженерами CoreOS ещё в 2016 году, а сейчас поддерживается Cloud Native Computing Foundation (CNCF) как ключевой паттерн платформенной инженерии.</p><h2>Архитектура оператора: CRD, Reconciler и control loop</h2><p>Любой оператор состоит из двух ключевых компонентов:</p><ul><li><b>Custom Resource Definition (CRD)</b> — расширение API Kubernetes, которое определяет новый тип ресурса со своей схемой Spec (желаемое состояние) и Status (фактическое состояние).</li><li><b>Контроллер (Reconciler)</b> — программный цикл, который постоянно сравнивает Spec и Status, а затем выполняет действия для их сближения.</li></ul><p>Контроллер не работает по принципу «выполнил шаги и вышел». Вместо этого он реализует <b>control loop</b>: каждую итерацию можно запускать снова и снова — результат не сломается, потому что код сравнивает «что есть» с «что нужно» и корректирует только расхождения. Это критически важно, потому что события в распределённой системе приходят асинхронно, а состояние объекта могло измениться за время обработки предыдущего события.</p><h2>Создаём проект с operator-sdk</h2><p>Вручную писать весь boilerplate контроллера — неэффективно. Инструмент operator-sdk (основанный на Kubebuilder) генерирует стандартную структуру проекта Go, включая точку входа main.go, Makefile с целями для сборки и тестирования, а также инфраструктуру для управления CRD.</p><p>Инициализируем проект и создаём API с контроллером:</p><p>Флаг --resource сгенерирует Go-структуры, описывающие схему пользовательского ресурса. Флаг --controller создаст шаблон reconciler'а — файла, в котором мы будем писать логику управления.</p><h3>Определяем схему CRD</h3><p>Откроем api/v1/webapp_types.go. Здесь мы описываем два структурных блока: WebAppSpec — то, что задаёт пользователь в YAML-манифесте, и WebAppStatus — то, что оператор сообщает о текущем состоянии.</p><p>Важнейшая часть — kubebuilder-маркеры над основной структурой:</p><p>Маркер +kubebuilder:subresource:status сообщает Kubernetes, что для этого ресурса нужен отдельный endpoint /status. Без него любое обновление статуса будет восприниматься API-сервером как изменение всего объекта, что вызовет каскадную реконсиляцию и может привести к бесконечному циклу.</p><p>Маркеры +kubebuilder:printcolumn настраивают вывод команды kubectl get webapps: вместо голого имени ресурса пользователь увидит фазу, желаемое и доступное количество реплик.</p><h2>Reconciler: сердце оператора</h2><p>Файл internal/controller/webapp_controller.go содержит функцию Reconcile — точку входа в control loop. Перед ней размещаются RBAC-маркеры, которые генерируют манифесты прав доступа при выполнении make manifests:</p><p>Без этих маркеров оператор не получит прав на чтение и запись стандартных ресурсов Deployment и Service, и при запуске в кластере упадёт с ошибкой доступа. Разберём функцию Reconcile по шагам.</p><h3>Шаг 1. Получение актуального состояния</h3><p>Reconciler получает не сам объект, а лишь его имя и пространство имён. Это архитектурное решение Kubernetes: между постановкой события в очередь и его обработкой объект мог измениться. Поэтому первое действие — всегда запросить свежую версию ресурса из API.</p><p>Здесь apierrors импортируется из пакета k8s.io/apimachinery/pkg/api/errors, а ctrl — из sigs.k8s.io/controller-runtime.</p><h3>Шаг 2. Реконсиляция Deployment</h3><p>Сначала проверяем, существует ли связанный Deployment. Если нет — создаём его через вспомогательную функцию deploymentForWebApp.</p><p>Вызов return ctrl.Result{Requeue: true}, nil ставит событие обратно в очередь: контроллер немедленно перезапустит Reconcile для того же объекта, чтобы продолжить с следующего шага. Это удобнее, чем ждать следующего внешнего события.</p><p>Вот как выглядит функция deploymentForWebApp:</p><p>Owner Reference — это механизм garbage collection в Kubernetes. Когда пользователь удаляет ресурс WebApp, кластер автоматически удалит все дочерние объекты, на которые ссылается поле ownerReferences. Без этой связи после удаления кастомного ресурса в кластере останутся «зомби»-поды и сервисы.</p><h3>Шаг 3. Обнаружение дрейфа конфигурации</h3><p>Если Deployment уже существует, мы не просто идём дальше — сравниваем желаемое и фактическое состояние. Это и есть то, что отличает оператор от одноразового скрипта.</p><p>Представьте, что кто-то из команды в обход оператора выполнил следующую команду или подменил образ на уязвимую версию. Оператор мгновенно фиксирует расхождение и принудительно возвращает ресурс к значениям, заданным в WebApp.Spec.</p><h3>Шаг 4. Реконсиляция Service</h3><p>С вычислительным слоем разобрались — теперь нужен сетевой доступ. Логика полностью идентична: проверяем наличие Service, создаём при отсутствии, устанавливаем Owner Reference. Для локального тестирования в Minikube используем тип NodePort.</p><p>Вспомогательная функция serviceForWebApp строит объект Service с нужными селекторами и портами:</p><h3>Шаг 5. Обновление статуса</h3><p>Последний шаг — сообщить пользователю текущее состояние приложения через status subresource. Здесь критически важно использовать именно r.Status().Update(), а не r.Update().</p><p>Разделение основного endpoint ресурса и subresource /status — фундаментальное свойство Kubernetes. Оно гарантирует, что обновление статуса не триггерит новое событие изменения ресурса и, соответственно, не запускает бесконечную реконсиляцию.</p><h2>Тестирование: как проверить, что оператор работает</h2><p>Для локального тестирования подойдёт Minikube. Запускаем оператор в одном терминале, а в другом — создаём кастомный ресурс.</p><p>Проверяем, что оператор создал инфраструктуру и отчитался о статусе:</p><h2>Демонстрация: откат несанкционированных изменений</h2><p>Главная ценность оператора — самовосстановление. Сымитируем вмешательство: масштабируем Deployment в обход кастомного ресурса.</p><p>Мгновенно в логах контроллера появляется сообщение:</p><p><b>Лог оператора:</b><br />INFO  Drift detected! Updating Deployment  {"DesiredReplicas": 3, "ActualReplicas": 10}</p><p>А через несколько секунд избыточные поды начинают завершаться:</p><p>В это время статус WebApp отражает промежуточное состояние Scaling, а после полного схождения — автоматически переключается обратно на Running.</p><h2>Когда операторы необходимы, а когда избыточны</h2><p>Не каждому приложению нужен собственный оператор. Для stateless-сервисов, которые достаточно описать парой манифестов Deployment + Service, оператор будет накладным расходом. Однако есть категории систем, где без оператора не обойтись:</p><ul><li><b>Базы данных</b> — PostgreSQL, MySQL, MongoDB, etcd: репликация, бэкапы, обновления, failover.</li><li><b>Брокеры сообщений</b> — Kafka, RabbitMQ, NATS: управление партициями, топиками, кластерной топологией.</li><li><b>Сетевые компоненты</b> — Ingress-контроллеры, service mesh: динамическая маршрутизация и политики безопасности.</li><li><b>CI/CD и GitOps</b> — Tekton, Argo CD: оркестрация пайплайнов и синхронизация состояния кластера с репозиторием.</li></ul><p>В российской инфраструктурной практике операторы активно используются в Managed Kubernetes от крупных облачных провайдеров. Например, в Яндекс Облаке операторы лежат в основе managed-сервисов баз данных, обеспечивая автоматизацию резервного копирования, мониторинга и масштабирования.</p><h2>Выводы</h2><p>Паттерн Operator — это не просто модное слово в экосистеме Kubernetes, а проверенный подход к автоматизации эксплуатации сложных приложений. Вместо того чтобы полагаться на runbook'и и ручные действия инженеров, оператор кодирует операционную экспертизу в программу, которая работает круглосуточно, не устаёт и не забывает проверить важный шаг.</p><p>В этой статье мы прошли полный путь: от генерации скелета проекта через operator-sdk до работающего контроллера, который создаёт инфраструктуру, отслеживает дрейф конфигурации и автоматически восстанавливает желаемое состояние. Ключевые навыки — понимание асинхронной природы control loop, правильное использование Owner Reference и изолированное обновление статуса — применимы далеко за рамками Kubernetes.</p><blockquote>Оператор — это не магия, а дисциплина. Каждая итерация Reconcile — это честный вопрос: «Что должно быть?» против «Что есть сейчас?». Ответить на него правильно — значит построить надёжную систему.</blockquote><p>Полный код проекта доступен в репозитории автора оригинального туториала: <a href="https://github.com/SandeshOjha06/k8-operator">SandeshOjha06/k8-operator</a>. Если вы планируете развиваться в направлении platform engineering или SRE, умение писать и отлаживать собственные контроллеры станет серьёзным конкурентным преимуществом.</p><p><b>Источники:</b></p><ul><li><a href="https://dev.to/sandeshojha/building-a-kubernetes-operator-from-scratch-with-operator-sdk-576k">Building a Kubernetes Operator from Scratch with Operator SDK</a> — оригинальный туториал Сандеша Оджха.</li><li><a href="https://kubernetes.io/docs/concepts/extend-kubernetes/operator/">Kubernetes Operators</a> — официальная документация Kubernetes.</li><li><a href="https://sdk.operatorframework.io/">Operator SDK</a> — фреймворк для разработки операторов.</li><li><a href="https://book.kubebuilder.io/">The Kubebuilder Book</a> — руководство по построению Kubernetes API и контроллеров.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>OwnCloud – аналог Nextcloud: для чего использовать и как настроить облачное хранилище</title>
      <link>https://tproger.ru/articles/owncloud-analog-nextcloud-dlya-chego-ispolzovat-i-kak-nastroi</link>
      <comments>https://tproger.ru/articles/owncloud-analog-nextcloud-dlya-chego-ispolzovat-i-kak-nastroi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Oksana Karelina]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/owncloud-analog-nextcloud-dlya-chego-ispolzovat-i-kak-nastroi</guid>
      <description><![CDATA[<p>ownCloud vs Nextcloud, что лучше? Какое облачное хранилище выбрать? Как может помочь связка S3 с ownCloud?
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/owncloud-analog-nextcloud-dlya-chego-ispolzovat-i-kak-nastroi">OwnCloud – аналог Nextcloud: для чего использовать и как настроить облачное хранилище</a>»</p>]]></description>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Конференции]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[ICO]]></category>
      <category><![CDATA[Redis]]></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[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 07 May 2026 08:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Вы когда-нибудь задумывались, сколько информации производит человечество?</p><p>Если верить статистике, сейчас ежедневно создается около <a href="https://explodingtopics.com/blog/data-generated-per-day">402,74</a> миллионов терабайт данных.</p><p>Согласитесь, довольно внушительная цифра.</p><p>В этих реалиях, когда объем данных постоянно растет, у каждого из нас рано или поздно может возникнуть вопрос – где хранить рабочие и личные файлы, да еще и так, чтобы сохранить абсолютный контроль над ними.</p><p>Меня зовут Оксана, я маркетолог в Beget и в этой статье хочу поделиться решением, которое мы выбрали у себя в отделе для хранения файлов, когда заметили, что их стало слишком много.</p><p>Мы решили перейти на гибкое объектное хранилище S3 – чтобы централизовано хранить и управлять текстами, креативами, отчетами и другими маркетинговыми материалами с удобным доступом внутри команды, ведь S3 позволяет хранить файлы любого типа и объема и масштабируется автоматически. Осталось только выбрать ПО для хранения файлов в облаке, к которому можно подключить S3.</p><p>Ранее у нас был опыт использования Nextcloud, однако его функционал, подобный швейцарскому ножу (встроенные календарь, конференции, таск-трекер и т. д.), оказался слишком объемен для нашей, по сути, скромной задачи – удобного и стабильного хранения файлов.</p><p>Вот почему мы подыскали аналог Nextcloud – ownCloud. В отличие от более функционального <a href="https://beget.com/ru/cloud/marketplace/nextcloud">Nextcloud</a>, ownCloud заточен исключительно на работу с файлами. И при этом он поддерживает подключение облачного объектного хранилища S3. Поэтому для нас в сравнении Nextcloud vs ownCloud выбор был очевиден.</p><p>В этой статье я расскажу, какие возможности есть у ownCloud, почему это ПО может быть полезно и как настроить связку ownCloud и S3. Если вы хотите организовать безопасное, контролируемое хранение и обмен данными на работе или дома, то этот материал будет для вас полезен.</p><h2>Что может ownCloud</h2><p>Для начала – буквально несколько слов об ownCloud и его возможностях.</p><p>Это программное обеспечение с открытым исходным кодом для хранения, синхронизации и обмена файлами появилось в 2010 году благодаря усилиям разработчика KDE Франка Карличека, который <a href="https://ru.wikipedia.org/wiki/OwnCloud">стремился</a> создать бесплатную альтернативу коммерческим облачным сервисам хранения данных.</p><h3>OwnCloud позволяет:</h3><ol><li>получать доступ к данным из любой точки мира и хранить файлы на собственном сервере – под вашим полным контролем;</li><li>синхронизировать данные между устройствами – доступ к файлам возможен с компьютеров (Windows, macOS, Linux), смартфонов (iOS, Android) и через браузер, изменения на одном устройстве мгновенно появляются на всех остальных;</li><li>делиться файлами и папками по ссылке, настраивая права доступа, пароли и срок действия ссылок;</li><li>совместно работать с документами, отслеживать историю изменений и возвращаться к любой предыдущей версии файла.</li></ol><blockquote>Только ownCloud сочетает в себе полный контроль над данными с простыми в использовании функциями обмена файлами, делая совместную работу более эффективной и безопасной.</blockquote><p>Сегодня ownCloud используют <a href="https://owncloud.com/customers/">компании</a> (Philips, Nationwide, Zeppelin и др.) в самых разных сферах (IT, машиностроение, медицина и т. д.).</p><p>При этом решение подходит не только для работы, но и для личных целей, когда нужно обменяться фото и видео с родственниками и друзьями, ведь, по мнению пользователей, среди преимуществ ownCloud – <a href="https://www.capterra.com/p/176602/ownCloud/reviews/">простота настройки</a> и <a href="https://www.temjournal.com/content/102/TEMJournalMay2021_954_960.pdf">удобная синхронизация с различными гаджетами</a>.</p><blockquote>С ownCloud мне не нужно слепо доверять какой-то неопределенной организации. Я контролирую, как происходит обмен файлами, и ownCloud помогает мне на каждом этапе.</blockquote><p>OwnCloud позволяет решать самые разные задачи, связанные с работой с файлами, – расскажем на примере трех кейсов, как это облачное хранилище помогает нам в отделе маркетинга.</p><h2>Для каких задач мы используем ownCloud и S3</h2><h3>1. Централизованное управление материалами</h3><p>Мы часто работаем с текстами, изображениями и презентациями. Дизайнеры и авторы загружают эти материалы в ownCloud, файлы автоматически сохраняются в S3, а для удобства поиска у нас настроены теги.</p><p>В итоге каждый член команды может видеть версии файлов (это важно для правок), нет хаоса в почте и мессенджерах.</p><h3>2. Безопасное взаимодействие с подрядчиками</h3><p>Связка ownCloud и S3 позволяет выгружать внешним специалистам материалы и получать результаты работ без прямого доступа к внутренней сети компании. Мы создали папку с публичной ссылкой, но жесткими ограничениями – паролем, сроком жизни ссылки в течение нескольких дней и разрешением на загрузку файлов без права просмотра папки.</p><p>На практике это работает так: менеджер создает ссылку и отправляет подрядчику, подрядчик переходит по ссылке и загружает архив с готовыми материалами, файл попадает в ownCloud, а его содержимое сохраняется в S3. Таким образом, подрядчик не видит, какие еще файлы лежат в папке, а мы контролируем, кто, что и когда загрузил.</p><h3>3. Долгосрочный архив креативов и отчетов</h3><p>По закону (152-ФЗ в РФ или GDPR в Европе) компания обязана хранить персональные данные клиентов, а также отчеты о рассылках и рекламных акциях на протяжении определенного времени.</p><p>Для решения этой задачи мы настроили правило: файлы старше 90 дней автоматически перемещаются в S3 Glacier (холодное хранилище) – этот класс снижает стоимость хранения, а если, например, юристу понадобится скачать какой-нибудь отчет спустя 2–3 года, он просто выгрузит его из ownCloud буквально за 5–10 минут.</p><p>Теперь – в деталях и по шагам о том, как начать использовать ownCloud в связке с S3.</p><h2>Как развернуть ownCloud и подключить S3</h2><p>OwnCloud удобно использовать с объектным хранилищем S3 – таким образом можно:</p><ol><li>масштабировать систему – S3 расширяется автоматически и не имеет ограничений по объему и количеству размещаемых данных и файлов;</li><li>оптимизировать затраты – можно платить не за дорогую конфигурацию виртуального сервера с большим объемом диска, а лишь за фактически занимаемое место, по модели pay as you go (оплата по мере потребления);</li><li>повысить надежность хранения – за счет встроенной в S3 тройной репликации данных (файлы хранятся в 3 копиях и размещаются на независимых серверах в разных стойках для абсолютной сохранности данных).</li></ol><h3>Итак, разберем, как настроить связку ownCloud и S3.</h3><p>Разработчики ownCloud предлагают два варианта установки. Можно скачать ownCloud и установить его вручную или использовать Docker-контейнеры. Мы выберем второй вариант.</p><p>Для размещения ownCloud в нашем примере создадим виртуальный сервер на базе <a href="https://beget.com/ru/cloud/marketplace/docker">готового решения Docker</a>.</p><p>Можно подключиться к серверу по SSH или с помощью терминала в панели управления.</p><p>Для размещения файлов создайте бакет объектного хранилища S3. Реквизиты доступа к нему будут в карточке бакета в панели:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/ee49d00b-7e32-4b8d-8ad4-bbbaeb0c3bb0.webp" alt="" /></figure><p>Создайте директорию для размещения конфигурационных файлов проекта и перейдите в нее:</p><p>Затем вставьте в файл docker-compose.yml следующее содержимое с помощью любого текстового редактора:</p><p>После этого создайте файл .env, в котором будут храниться значения переменных. Шаблон файла следующий:</p><p>Теперь необходимо отредактировать эти строки:</p><ol><li>ownCloud_DOMAIN и ownCloud_TRUSTED_DOMAINS – укажите домен (так как ownCloud будет размещен за обратным прокси, указывать рабочий порт здесь не требуется);</li><li>ADMIN_USERNAME – логин администратора;</li><li>ADMIN_PASSWORD – пароль администратора.</li></ol><p><i>Обратите внимание! Изменение ADMIN_USERNAME и ADMIN_PASSWORD уже после развертывания контейнеров не возымеет эффекта. Изменить пароль администратора вы можете в настройках пользователя в веб-интерфейсе.</i></p><p>Далее необходимо указать параметры подключения к S3.</p><ul><li>ownCloud_OBJECTSTORE_BUCKET – имя бакета S3;</li><li>ownCloud_OBJECTSTORE_ENDPOINT – эндпоинт хранилища (например, https://s3.ru1.storage.beget.cloud);</li><li>ownCloud_OBJECTSTORE_REGION – регион (ru1 для Beget);</li><li>ownCloud_OBJECTSTORE_KEY – Access key бакета;</li><li>ownCloud_OBJECTSTORE_SECRET – Secret key бакета.</li></ul><p>Сохраните файл.</p><p>Остается лишь добавить файл конфигурации для Caddy – обратного прокси, через который пользователи будут получать доступ к ownCloud.</p><p>Создайте директорию config:</p><p>После чего создайте в ней файл конфигурации Caddyfile. Добавьте в него следующее содержимое, указав вместо ownCloud.betutorial.ru ваш домен ownCloud:</p><p><i>Обратите внимание! Caddy выпустит SSL-сертификат на домен автоматически.</i></p><p>Все запросы к домену будут проксироваться в контейнер ownCloud_server.</p><p>На этом настройка конфигурационных файлов завершена, можно запускать контейнеры:</p><p>Потребуется несколько минут, чтобы docker загрузил образ и развернул контейнеры.</p><p>После запуска перейдите по домену, чтобы проверить работу хранилища:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/934faf67-2939-40f3-840e-88af18ebfde3.webp" alt="" /></figure><p>Выполните вход со стандартными доступами.</p><p><i>Обратите внимание! Если ownCloud недоступен или вы получаете ошибку при входе со стандартными доступами, проверьте корректность конфигурационных файлов. После внесения изменений перезапустите контейнеры.</i></p><p>После входа вы попадете на главную страницу ownCloud. Перед началом работы мы крайне рекомендуем сменить стандартный пароль администратора. Сделать это можно, нажав на кнопку с именем пользователя в верхней правой части страницы и открыв раздел настроек.</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/9f93c25a-3922-4223-b3bd-b45aaaf61edf.webp" alt="" /></figure><p>Теперь проверим работу объектного хранилища – перейдем на главную страницу и загрузим файлы:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/51a6e16f-ee9b-4e96-9a5c-7ef765f62286.webp" alt="" /></figure><p>Файлы также появились и в объектном хранилище:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/16e65ad7-28f9-462c-9af6-990d2cf3c878.webp" alt="" /></figure><p><i>Обратите внимание! Файлы, которые вы удалите в ownCloud, будут перемещены в корзину и останутся в S3. Для их полного удаления очистите корзину ownCloud.</i></p><p>Чтобы делиться паролями с новыми пользователями, необходимо настроить отправку почты в ownCloud, сделать это можно в разделе Settings&gt;General.</p><p>В нашем примере мы настроим отправку через SMTP:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/45e39a41-4bb1-4d19-9bfe-1e1db3afc4a6.webp" alt="" /></figure><p>После указания данных введите тестовый email и нажмите “Send email”. Если отправка успешна, вы получите уведомление об этом:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/5a22786d-3995-4e86-9b48-0a17363c8a18.webp" alt="" /></figure><p>А на почтовый ящик поступит письмо:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/f4043b49-9a17-42ed-a627-34502c2a16e8.webp" alt="" /></figure><p>На этом настройка завершена – можно начинать работать с файлами, используя связку ownCloud и S3.</p><h2>Заключение</h2><p>Если вы ловите себя на мысли, что данных стало настолько много, что поиск нужного файла порой происходит дольше, чем работа с ним (особенно если одни файлы хранятся на почте или в мессенджере, а другие – на ноутбуке или флешке), облачное хранилище может вам помочь.</p><p>Подобное ПО пригодится как для личных целей, так и для бизнеса – недаром в 2025 году в нашей стране был <a href="https://www.kommersant.ru/doc/8178724">зафиксирован</a> рост интереса крупного и среднего бизнеса к технологии облачного хранилища.</p><p>Надеюсь, эта статья была для вас полезна, а облачные хранилища помогут сделать ежедневную работу комфортнее.</p>]]></content:encoded>
    </item>
    <item>
      <title>Denwer SE: Возрождение легендарного локального веб-сервера на современном стеке</title>
      <link>https://tproger.ru/articles/denwer-se-vozrozhdenie-legendarnogo-lokalnogo-veb-servera-na-so</link>
      <comments>https://tproger.ru/articles/denwer-se-vozrozhdenie-legendarnogo-lokalnogo-veb-servera-na-so?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Тишов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/denwer-se-vozrozhdenie-legendarnogo-lokalnogo-veb-servera-na-so</guid>
      <description><![CDATA[<p>Помните диск Z:, иконку джентльмена и магию Run.exe? Денвер вернулся. Denwer SE: Python вместо Perl, HTTPS без красных экранов, свежий PHP и портативность. И да, он всё ещё помещается на флешку.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/denwer-se-vozrozhdenie-legendarnogo-lokalnogo-veb-servera-na-so">Denwer SE: Возрождение легендарного локального веб-сервера на современном стеке</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Браузеры]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Для продвинутых]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[Laravel]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 May 2026 10:11:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы начинали веб-разработку в середине 2000-х, то наверняка помните Denwer — «джентльменский набор веб-разработчика». Иконка в виде человека в шляпе, виртуальный диск Z:, папка <i>home/localhost/www</i> — всё это было ритуалом, который упрощал жизнь тысячам разработчиков. Но оригинальный Denwer безнадёжно устарел: Perl-скрипты, 32-битные сборки, поддержка только древних версий PHP и MySQL. Ему на смену пришли громоздкие комбайны вроде Open Server или сложные для новичков Docker-контейнеры.</p><p>Однако недавно проект получил второе дыхание. Разработчик Александр Тишов (Amro) — создатель <a href="https://seditio.org" rel="nofollow">CMS Seditio</a> и основатель веб-студии <a href="https://avego.org" rel="nofollow">«Авего»</a>  — выпустил <a href="https://seditio.org/dev/denwer-se-lokalnyj-veb-stek-dlya-windows-apache-php-mysql-mariadb" rel="nofollow">Denwer SE (Second Edition)</a>. Это не просто обновление, а полный реинжиниринг с сохранением классической философии: портативность, скорость работы и привычная структура каталогов.</p><p>В этой статье разберём, что изменилось под капотом, почему панель управления переехала с Perl на Python, как работает автоматический HTTPS с собственным корневым сертификатом и зачем нужен зоопарк версий PHP от 5.6 до 8.5.</p><h2>Краткий экскурс: от Denwer 3 до Denwer SE</h2><p>Оригинальный Denwer (сокращение от Джентельменский Набор Веб-разработчика) появился в начале 2000-х. Он представлял собой связку Apache + PHP + MySQL, упакованную в самораспаковывающийся архив. Главные фишки:</p><ul><li>Виртуальный диск (по умолчанию Z:), который монтировался через subst.</li><li>Автоматическое создание виртуальных хостов по именам папок в home.</li><li>Консольные exe-файлы (Run, Stop, Restart) без графического окна.</li></ul><p>Проблемы оригинала:</p><ul><li>Управление на Perl — медленно, тяжело поддерживать в Windows.</li><li>Только 32-битные компоненты.</li><li>Невозможно быстро переключать версии PHP или БД.</li><li>Отсутствие нормального HTTPS (только самоподписанные сертификаты с ошибками в браузере).</li><li>Поддержка прекратилась в 2016 году.</li></ul><p>Denwer SE решает все эти проблемы, оставаясь при этом таким же портативным — достаточно скопировать папку на флешку или в облачный каталог.</p><h2>Архитектура: Python вместо Perl</h2><p>Denwer SE — панель управления написана на Python и скомпилирована в один EXE-файл (через PyInstaller).</p><p>Внутри служебной папки <b>denwer\</b> лежат:</p><ul><li>DLL-версия Python — интерпретатор, который использует основной исполняемый файл.</li><li>Скомпилированные модули .pyd — в том числе GUI на базе Tcl/Tk для оконного интерфейса и системного трея.</li><li>Минимальный набор библиотек для управления службами, правки hosts и генерации сертификатов.</li></ul><p>Это даёт несколько преимуществ:</p><ul><li>Портативность — панель ищет соседние папки home и usr, поэтому каталог со стеком можно переносить куда угодно без переустановки.</li><li>Скорость — Python-скрипты запускаются быстрее, чем Perl, особенно на холодном старте.</li><li>Читаемость кода — разработчику проще поддерживать и расширять функционал.</li></ul><h2>Полный переход на x64</h2><p>Оригинальный Denwer навсегда остался 32-битным, что в современных реалиях просто неприемлемо. Denwer SE собирается исключительно под x64:</p><ul><li>Apache (версия 2.4.x) — 64-битный.</li><li>Все модули PHP (от 5.6 до 8.5) — Thread Safe x64.</li><li>MySQL / MariaDB — 64-битные сборки.</li></ul><p>Системные требования — Windows 7/8/10/11 (x64). Для работы компонентов потребуются Microsoft Visual C++ Redistributable (VC11, VC12, VC14, VC15). Разработчик положил установщики этих пакетов в папку <b>vcredist\</b> — при необходимости можно доустановить вручную.</p><h2>Структура каталогов: преемственность и гибкость</h2><p>Denwer SE сохранил классическую структуру, чтобы старые пользователи не ломали голову:</p><p>Главный конфиг — usr\configuration.txt. В нём задаются пути без жёсткой привязки к букве диска, например:</p><p>При старте панель монтирует виртуальный диск (по умолчанию Z:) и динамически подставляет путь через переменную <b>subst_drive</b>.</p><h2>Управление версиями PHP и БД без танцев с бубном</h2><p>В Denwer SE встроен менеджер версий. Вы просто выбираете из выпадающего списка нужную версию PHP (например, 8.3 или 5.6) — панель сама правит конфигурацию Apache.</p><p>Как это работает под капотом:</p><p>В папке usr/local/apache/php лежат подкаталоги php5.6, php7.4, php8.3 и т.д..</p><p>В каждом из них есть файл php-denwer.conf— шаблон для подключения модуля к Apache. При выборе версии этот файл копируется в <b>conf/extra/httpd-denwer.conf</b>, который затем включается в основной httpd.conf.</p><p>Если вы хотите добавить свою сборку PHP (например, PHP 8.4-rc), достаточно:</p><ul><li>Распаковать x64 Thread Safe версию в отдельный каталог внутри php\.</li><li>Создать php-denwer.conf по образцу.</li><li>Убедиться, что все DLL от VC++ установлены.</li></ul><p>Аналогично для баз данных: переключение между MySQL 5.7 и MariaDB 11.8 происходит через тот же интерфейс. В каталоге СУБД может лежать файл <b>db-denwer.conf</b>, который при старте копируется в <b>my.ini</b>.</p><h2>HTTPS, который не бесит: локальный Root CA</h2><p>Самое болезненное место при локальной разработке это самоподписанные сертификаты. Браузеры постоянно ругаются, приходится кликать «Принять риск». Для командной разработки это вообще катастрофа: каждый участник должен сгенерировать свой сертификат и добавить в исключения.</p><p>Denwer SE решает проблему элегантно — он создаёт собственный корневой центр сертификации (CA) и подписывает им сертификаты для всех ваших локальных доменов.</p><p>Как это работает:</p><ol><li>При первом запуске (если найден OpenSSL) панель генерирует ключи denwer-ca.key и сертификат denwer-ca.crt в папку usr/local/apache/conf/cert/denwer-ca/.</li><li>Для каждого виртуального хоста (папки в home/) автоматически создаётся сертификат в conf/cert/&lt;domain&gt;/.</li><li>Все сертификаты хостов подписаны локальным CA.</li></ol><p>Чтобы браузер доверял им, нужно один раз установить <b>denwer-ca.crt</b> в хранилище «Доверенные корневые центры сертификации» Windows. Для этого в панели есть специальная кнопка (требует прав администратора).</p><p>После этого любые HTTPS-запросы к локальным хостам работают без единого предупреждения.</p><h2>Удобства для разработчика (DX)</h2><p>В версии 1.2.4 добавили несколько фич, которые экономят время каждый день:</p><ul><li>Лог с таймштампами — каждая строка в окне панели имеет префикс [чч:мм:сс]. Теперь видно, сколько секунд сервер поднимается и где возможны задержки.</li><li>Прямой доступ к php.ini и my.cnf — рядом со списками версий появились кнопки, открывающие конфигурацию именно активной версии.</li><li>Автоматическое ведение hosts — панель в реальном времени сканирует home/, находит новые домены и прописывает их в C:\Windows\System32\drivers\etc\hosts. Журнал добавляемых записей сохраняется в usr\AddedHosts.txt. При остановке стека лишние строки удаляются.</li><li>Для смены версии PHP или базы данных панель требует полной остановки всех служб. Вы нажимаете «Стоп», меняете версию в списке, затем «Старт» — и стек поднимается уже с новыми настройками. Автоматический перезапуск без вашего участия работает только для Apache: когда вы добавляете новый домен в папку home/, панель сама переписывает vhosts.conf и перезапускает веб-сервер, не трогая БД.</li></ul><h2>Почему не Open Server или Docker?</h2><p>Этот вопрос закономерно возникает у всех, кто видит очередной локальный веб-сервер. Ведь есть уже давно Open Server Panel, Laragon, XAMPP, а для продвинутых — Docker. Зачем ещё один?</p><p><b>Open Server</b> — мощный и удобный комбайн с десятками версий PHP и настройками «на века». Но он разворачивается в системе не портативно: создаёт папки в ProgramData, пишет в реестр, а запуск может занимать 5–10 секунд. Denwer SE, напротив, полностью переносим: скопировал папку на флешку или в облачный каталог — и всё работает. Запуск стека — буквально 1–2 секунды, что критично, когда вы десятки раз за день перезапускаете сервер для тестов.</p><p><b>Docker</b> — индустриальный стандарт для изоляции и воспроизводимости окружений. Но для локальной разработки простого сайта он часто избыточен. Вам нужно разобраться в образах, контейнерах, пробросе портов, volume’ах и docker-compose.yml. А в Denwer SE вы просто создали папку в home/ — и готово. Никакой работы с командной строкой, никакого потребления гигабайт ОЗУ на фоновую службу Docker Desktop.</p><p><b>Laragon</b> — быстрый, портативный, поддерживает не только PHP, но и Node.js, Python, Go. Но он ориентирован на современные фреймворки, особенно Laravel. Denwer SE же сделан для тех, кто вырос на классическом Денвере: виртуальный диск Z:, папка home/имя_домена/www, минимум настроек. Не нужно переучиваться — просто распаковал и работаешь как 10 лет назад, но с новыми версиями PHP и HTTPS.</p><h2>Как начать пользоваться Denwer SE</h2><ol><li>Скачать архив с <a href="https://seditio.org/dev/denwer-se-lokalnyj-veb-stek-dlya-windows-apache-php-mysql-mariadb" rel="nofollow">официального сайта автора</a>.</li><li>Распаковать в любое место, например C:\web\DenwerSE\.</li><li>Запустить DenwerSE.exe — если нет прав администратора, попросит их для монтирования диска и правки hosts.</li><li>Нажать «Запустить» — появится виртуальный диск Z:, а в системном трее иконка.</li><li>Создать папку сайта — например, home\myproject.local и положить туда index.php.</li><li>Открыть в браузере http://myproject.local/ (или https://myproject.local/). HTTPS будет работать сразу после установки корневого сертификата (кнопка в панели).</li></ol><p>По умолчанию пароль к MySQL/MariaDB — пустая строка (пользователь <b>root</b>). При желании его можно сменить через phpMyAdmin.</p><h2>Заключение</h2><p>Denwer SE — это не просто ностальгический проект. Это действительно современный инструмент, который доказывает, что концепция «локального сервера в одну папку» всё ещё актуальна. Отказ от Perl в пользу Python, менеджер версий PHP/БД, нормальный HTTPS, портативность и мгновенный запуск — всё это делает его отличным выбором для быстрого прототипирования, тестирования легаси-кода или обучения веб-разработке.</p><p>Если вы устали ждать, пока Open Server применит настройки, или не хотите разбираться в Docker Compose — попробуйте <b>Denwer SE</b>. Вероятно, он напомнит вам старые добрые времена, но уже без боли устаревших технологий.</p><ul><li>Автор проекта: Александр Тишов
	(Amro), разработчик CMS Seditio.</li><li>Лицензия: Freeware.</li><li>Совместимость: Windows 7/8/10/11 x64.</li></ul><p>Исходники панели управления не открыты (распространяется скомпилированный EXE), но архитектура и конфиги полностью прозрачны. В планах — добавить поддержку Nginx в качестве альтернативы. Следите за обновлениями.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как я написал E2EE-мессенджер на Spring Boot и WebCrypto — и почему сервер не видит сообщения</title>
      <link>https://tproger.ru/articles/kak-ya-napisal-e2ee-messendzher-na-spring-boot-i-webcrypto-i-poch</link>
      <comments>https://tproger.ru/articles/kak-ya-napisal-e2ee-messendzher-na-spring-boot-i-webcrypto-i-poch?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Василенков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ya-napisal-e2ee-messendzher-na-spring-boot-i-webcrypto-i-poch</guid>
      <description><![CDATA[<p>Разбор архитектуры E2EE-мессенджера на Spring Boot 3, React и WebCrypto: X3DH, symmetric ratchet, AES-GCM, WebSocket, multi-device и ограничения реализации.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ya-napisal-e2ee-messendzher-na-spring-boot-i-webcrypto-i-poch">Как я написал E2EE-мессенджер на Spring Boot и WebCrypto — и почему сервер не видит сообщения</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Stack Overflow]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[Алиса]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[5g]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 May 2026 05:35:02 GMT</pubDate>
      <content:encoded><![CDATA[<figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/240e412b-4307-49f9-b24f-bde7e0a7fd9a.webp" alt="" /></figure><p>Я Java-разработчик и в основном работаю с backend: Spring Boot, базы данных, интеграции, авторизация, WebSocket — всё то, что обычно находится за интерфейсом.</p><p>В какой-то момент я поймал себя на мысли: я каждый день пользуюсь мессенджерами, но плохо понимаю, как они устроены внутри. Окей, JWT, WebSocket, PostgreSQL, Redis — это понятно. Но что технически означает фраза "end-to-end encryption"? Как сервер доставляет сообщения, если он не должен их читать? Где живут ключи? Что хранится в базе? Что происходит, если у пользователя два устройства?</p><p>Решил разобраться через практику. Написал мессенджер с нуля. Назвал Chaos Messenger.</p><p>Сразу честно: криптографическую часть я изучал вместе с Claude и ChatGPT — читал спецификации X3DH и Double Ratchet, разбирал примеры, задавал вопросы, пока не сложилась цельная картина. Frontend тоже делался с активной помощью ChatGPT: я backend-разработчик, React для меня не основная среда. Но архитектура, backend, интеграция WebCrypto, модель конвертов, хранение сообщений и принципиальные решения — мои.</p><p>Для меня AI здесь был не заменой понимания, а инструментом — примерно как документация, Stack Overflow и ревью коллег. Без понимания threat model и архитектуры такой проект всё равно не собрать.</p><p>В статье расскажу, как работает E2EE изнутри: как устанавливается сессия через X3DH, как каждое сообщение получает отдельный ключ через Symmetric Ratchet, почему сервер хранит только зашифрованные конверты, и какие ошибки я допустил по дороге.</p><p>Стек: Spring Boot 3, React 18, WebCrypto API, PostgreSQL, Redis, WebSocket/STOMP, Prometheus, Grafana.</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/4b028f37-2de1-46ea-a247-567f74fb3081.webp" alt="" /></figure><h2>Важная оговорка про web-E2EE</h2><p>Когда я говорю, что сервер не может прочитать сообщения, я имею в виду backend, базу данных, WebSocket-слой и уже сохранённые ciphertext-конверты. У них нет ключей и plaintext.</p><p>Но у web-E2EE есть отдельная проблема: frontend-код тоже приходит с сервера. Теоретически скомпрометированный сервер может отдать изменённый JavaScript, который украдёт ключи или plaintext до шифрования. Это ограничение не конкретно моего проекта, а браузерной модели в целом.</p><p>Поэтому корректная формулировка такая: backend не получает ключи и не может расшифровать уже переданные или сохранённые сообщения. Защита от подмены клиентского кода — отдельный слой безопасности: подпись сборок, независимая верификация клиента, desktop/mobile-приложения, reproducible builds.</p><h2>Почему обычный подход не работает</h2><p>Большинство "мессенджеров" на GitHub выглядят примерно так:</p><p>Сервер знает всё. Видит каждое сообщение. Если БД утекла — утекла вся переписка. Если сервер взломали — читай что хочешь. Если завтра компания решит продать данные — технически ничего не мешает.</p><p>E2EE решает это радикально: backend не получает ключи и не хранит plaintext. Сообщение шифруется на устройстве отправителя до отправки в сеть, а расшифровывается только на устройстве получателя.</p><p>Это уже не вопрос политики конфиденциальности в стиле "мы обещаем не читать". Это архитектурное ограничение: если у сервера нет ключа, он не может превратить ciphertext обратно в текст.</p><p>Звучит как магия. На самом деле — два протокола и немного WebCrypto.</p><h2>Главная идея: конверты</h2><p>Представь что Алиса хочет написать Бобу. Вместо того чтобы положить письмо на стол и надеяться что никто не прочитает — она кладёт его в запечатанный конверт. Конверт может открыть только Боб своим ключом. Сервер просто передаёт конверт не заглядывая внутрь.</p><p>Именно так это работает в коде. В базе данных у меня это выглядит так:</p><p>Когда я впервые увидел</p><p>в своей БД вместо текста — стало понятно, что модель наконец работает правильно: сервер создал сообщение, доставил его, сохранил метаданные, но так и не узнал содержимое.</p><p>А вот что сервер возвращает при запросе списка чатов через API:</p><p>Не</p><p>. Не</p><p>. Буквально</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/b466ad91-20da-4e64-8b78-f6e08d2851d5.webp" alt="" /></figure><p>(DevTools → Network → ответ API с</p><p>)</p><h2>Откуда берутся ключи: X3DH</h2><p>Главный вопрос: как Алиса и Боб получают общий секрет, если они никогда раньше не общались? И как сделать это так, чтобы сервер только помог передать публичные данные, но сам не смог вычислить итоговый ключ?</p><p>Для этого используется X3DH — Extended Triple Diffie-Hellman, протокол из экосистемы Signal. Его задача — установить общий секрет между двумя устройствами, используя долгосрочные и временные ключи.</p><h2>Что хранится на сервере</h2><p>Когда пользователь регистрирует устройство, он загружает на сервер пакет публичных ключей:</p><p>На сервер уходят только публичные части. Приватные ключи сериализуются и хранятся локально в браузере — и никогда не покидают устройство в сеть.</p><p>Здесь важно сказать честно: хранение приватных ключей в</p><p>Более строгий вариант — использовать Web Crypto API с</p><p>, чтобы приватный ключ жил внутри браузерного crypto runtime и его нельзя было экспортировать в байты. Но у этого подхода есть практическая сложность: ключи нужно переживать между перезагрузками страницы, синхронизировать с IndexedDB, аккуратно восстанавливать состояние устройства и не сломать UX.</p><p>В браузерных E2EE-приложениях обычно приходится выбирать между несколькими вариантами:</p><ul><li>Сериализуемые ключи в localStorage или IndexedDB — проще реализовать, но нужно очень серьёзно относиться к XSS и целостности frontend-кода.</li><li>extractable: false + IndexedDB — безопаснее, но сложнее в реализации и восстановлении состояния.</li><li>Нативное secure storage вроде Android Keystore или iOS Secure Enclave — лучший вариант для мобильных клиентов, но он недоступен обычному web-приложению.</li></ul><p>В текущей версии Chaos Messenger используется первый вариант. Это осознанный компромисс для pet/open-source проекта и удобного запуска в браузере. Переход на non-extractable ключи и более строгую модель хранения стоит в roadmap.</p><p>Ключевой момент: backend всё равно не получает приватные ключи и не может расшифровать сохранённые ciphertext-конверты. Но защита ключей на клиенте — отдельная задача, и её нельзя честно замалчивать.</p><h2>Установка сессии</h2><p>Когда Алиса открывает переписку с Бобом впервые, происходит следующее:</p><p>В классическом X3DH четвёртая DH-операция с one-time prekey опциональна: она выполняется, если сервер выдал доступный OPK получателя. В моей реализации устройство публикует набор one-time prekeys при регистрации, поэтому первое сообщение обычно использует DH4. Если OPK закончились, сессию всё равно можно установить через остальные DH-компоненты, но это уже менее сильный вариант.</p><p>Боб, получив конверт с эфемерным публичным ключом Алисы, повторяет те же операции со своими приватными ключами и получает тот же самый</p><p>. Математика симметрична.</p><p>Сервер в этот момент видит только публичные ключи и зашифрованный конверт. Он помогает устройствам найти друг друга, но не участвует в вычислении секрета.</p><p>Получить</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/e7bbacf3-4fd2-4710-863a-2c710b1f6759.webp" alt="" /></figure><h2>Как шифруется каждое сообщение: Symmetric Ratchet</h2><p>X3DH даёт нам стартовый</p><p>. Но использовать один и тот же ключ для всех сообщений — плохая идея. Если использовать один ключ для всей переписки, компрометация этого ключа сразу открывает весь поток сообщений.</p><p>Решение — симметричный ratchet. После каждого сообщения цепочка ключей продвигается вперёд:</p><p>Визуально это выглядит так:</p><p>используется для шифрования одного сообщения через AES-GCM, после чего уничтожается. Если атакующий компрометирует</p><p>— он прочитает только второе сообщение.</p><p>В рамках такой симметричной цепочки это даёт forward secrecy назад по цепочке: зная текущий или отдельный</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/939a74f7-60c5-4816-85f0-05b5afdc9845.webp" alt="" /><figcaption>(диаграмма схемы chainKey → messageKey)</figcaption></figure><p>Само шифрование сообщения:</p><p>А вот что уходит на сервер — живой пример из DevTools:</p><p>Сервер получает</p><p>и</p><p>. Расшифровать без</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/b5e24cda-6fd9-4b15-9f27-3eb9b4f843b0.webp" alt="" /></figure><h2>Важная оговорка: это ещё не полный Double Ratchet</h2><p>В этом проекте реализован Symmetric Ratchet — цепочка, где из</p><p>для каждого сообщения выводится отдельный</p><p>Это защищает прошлые сообщения: если атакующий узнает текущий ключ или отдельный</p><p>, он не сможет откатить HMAC назад и получить старые ключи.</p><p>Но это не полный Double Ratchet из Signal Protocol.</p><p>В полном Double Ratchet есть ещё DH ratchet step: стороны периодически выполняют новый Diffie-Hellman обмен и обновляют root key. Это даёт break-in recovery — возможность восстановить безопасность будущих сообщений после компрометации части состояния.</p><p>В моей реализации DH ratchet step пока нет. Если атакующий получит актуальное состояние сессии на устройстве и сможет продолжать его читать, он сможет расшифровывать будущие сообщения до переустановки сессии. Это честное ограничение текущей версии, и оно стоит первым пунктом в roadmap.</p><h2>Мультиустройство: один пользователь, несколько конвертов</h2><p>Первый неочевидный момент: в E2EE сообщение адресуется не просто пользователю, а конкретным устройствам пользователя.</p><p>Если у Боба два устройства — телефон и ноутбук — нужен отдельный encrypted envelope для каждого устройства. Сервер не может взять один конверт, расшифровать его и "переупаковать" для второго устройства: у него нет ключей и он не знает plaintext.</p><p>Значит при отправке сообщения нужно зашифровать его отдельно для каждого устройства каждого участника чата.</p><p>Для чата где у каждого по 2 устройства — 4 конверта на одно сообщение. Для группы из 10 человек — потенциально 20 конвертов. Это нормально, это цена безопасности.</p><h2>Сервер: хранение и доставка конвертов</h2><p>На сервере сообщение создаётся с контентом</p><p>, а конверты сохраняются отдельно:</p><p>После сохранения — fanout по WebSocket. Каждое устройство получает свой конверт и только его:</p><p>Это важное отличие от обычного WebSocket-чата. В обычном чате сервер рассылает одно и то же событие всем участникам. В E2EE-чате сервер рассылает разные события разным устройствам: payload для каждого устройства содержит свой</p><p>Топик</p><p>— строго персональный. Устройство А не получает конверт устройства Б. Никакого broadcast — только адресная доставка.</p><h2>Архитектура целиком</h2><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/de0e3257-d893-459f-86ed-7ed8eace5d56.webp" alt="" /></figure><h2>Баг который долго не замечал</h2><p>В панели чатов показывается превью последнего сообщения. Я реализовал это через</p><p>Запускаю — в списке чатов у всех написано</p><p>.</p><p>Конечно. Сервер же не знает что там написано.</p><p>Я полчаса думал как решить это на сервере. Потом дошло: нельзя решить это на сервере — у него нет ключей. Решение только на клиенте.</p><p>После того как пользователь открыл чат и сообщения расшифровались — кешируем последнее в памяти:</p><p>Это хороший пример того, как E2EE меняет привычное мышление backend-разработчика. В обычном приложении preview — это поле в SQL-запросе. В E2EE-приложении preview — это локальное клиентское состояние, потому что только клиент видел plaintext.</p><p>Простое решение. Но чтобы к нему прийти нужно было полностью принять идею что сервер здесь просто не при делах — и перестать пытаться решить задачу на его стороне.</p><h2>Rate limiting: дыра которую легко не заметить</h2><p>Эндпоинт</p><p>отправляет SMS с кодом. Без защиты любой скрипт может дёргать его тысячи раз — это называется SMS pumping fraud, SMS стоят реальных денег.</p><p>Redis у нас уже был для хранения онлайн-статусов. Добавил rate limiting поверх него:</p><p>При превышении — HTTP 429 с заголовком</p><p>. Клиент знает через сколько секунд можно повторить.</p><p>Важный нюанс: в текущей реализации, если Redis недоступен, сервис не блокирует авторизацию полностью. Для pet-проекта это приемлемый компромисс: лучше рискнуть одним лишним SMS, чем положить вход в приложение.</p><p>В production я бы сделал строже: fallback in-memory лимит на инстанс, отдельные лимиты по IP и телефону, антифрод-логику и алерты на всплески отправки кодов.</p><h2>Авторизация WebSocket</h2><p>Отдельная история — авторизация WebSocket соединений. HTTP-эндпоинты защищены Spring Security автоматически, но WebSocket — другое дело. STOMP-соединение устанавливается один раз, и нужно проверять JWT при каждом подключении.</p><p>Отдельно важно не только проверить JWT, но и связать WebSocket-соединение с конкретным устройством. Пользователь может быть один, но устройств у него несколько, а encrypted envelope адресован именно</p><p>Поэтому при подключении я проверяю не только токен, но и</p><p>: устройство должно быть зарегистрировано и принадлежать текущему пользователю. Иначе легко случайно превратить per-device E2EE-доставку обратно в обычный broadcast по пользователю.</p><h2>Что получилось — живые скрины</h2><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/1fdfa006-f5c6-4731-a40f-50559be8832d.webp" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/c99164a5-021c-49ac-bcc4-3e38f9cd1c31.webp" alt="" /></figure><p>Что реализовано:</p><ul><li>E2EE-модель с per-device encrypted envelopes</li><li>X3DH session setup + Symmetric Ratchet + AES-GCM</li><li>Мультиустройство</li><li>Личные и групповые чаты</li><li>Realtime доставка через WebSocket/STOMP</li><li>Статусы SENT → DELIVERED → READ</li><li>Редактирование и soft delete сообщений</li><li>Online presence, typing indicator</li><li>Фото-вложения</li><li>Поиск пользователей</li><li>Rate limiting на SMS через Redis</li><li>Prometheus метрики + Grafana дашборд</li><li>Swagger UI с JWT авторизацией</li><li>24 backend-теста на Testcontainers, 12 frontend на Vitest, E2E на Playwright</li><li>GitHub Actions CI</li></ul><p>Что ещё не сделано:</p><ul><li>Полный Double Ratchet с DH ratchet step и break-in recovery</li><li>Ротация signed prekey и аккуратное пополнение one-time prekeys</li><li>Более строгая модель хранения приватных ключей на клиенте: non-extractable CryptoKey + IndexedDB</li><li>Защита от подмены frontend-кода: подпись сборок, независимая верификация клиента, reproducible builds</li><li>Android-клиент с Android Keystore</li><li>Реальный SMS-провайдер вместо кода в backend-логах</li><li>Push-уведомления без утечки содержимого сообщений</li><li>Более строгая metadata-модель для групповых чатов</li></ul><h2>Главный инсайт</h2><p>E2EE — это архитектурное решение, а не библиотека.</p><p>Нельзя взять обычный Spring Boot чат и просто "включить шифрование". Нужно с самого начала проектировать систему так, чтобы backend не был участником доверенной зоны: он не должен получать plaintext, не должен иметь ключи и не должен уметь пересобирать сообщение из данных в базе.</p><p>Это меняет почти всё:</p><ul><li>структуру БД — вместо текста появляются encrypted envelopes</li><li>API — сервер отдаёт [encrypted], а не preview сообщения</li><li>WebSocket — доставка идёт не по пользователю, а по конкретному устройству</li><li>мультиустройство — одно сообщение превращается в несколько ciphertext-конвертов</li><li>frontend — становится полноценной криптографической частью системы, а не просто UI</li></ul><p>Второй инсайт: мессенджер — это не "чат с WebSocket". В E2EE-модели это система доставки зашифрованных конвертов с адресацией по устройствам. Как только это принимаешь, многие странные на первый взгляд решения становятся логичными.</p><h2>Репозиторий</h2><p>Код открыт: <a href="https://github.com/vaazhen/chaos-messenger">github.com/vaazhen/chaos-messenger</a></p><p>В репозитории есть README на русском и английском, диаграммы, скриншоты, security audit, Docker Compose и запуск одной командой.</p><p>Проект не претендует на уровень production-криптомессенджера вроде Signal. Это учебный и инженерный open-source прототип, цель которого — показать, как E2EE меняет архитектуру backend, frontend и realtime-доставки.</p><p>Если вы делали что-то похожее — особенно интересно сравнить подходы к ротации prekey-ов, хранению non-extractable ключей в браузере и реализации DH ratchet step. Вопросы и критика приветствуются.</p>]]></content:encoded>
    </item>
    <item>
      <title>Kubernetes 1.36 приносит 20 alpha-фич: DRA, gang scheduling, HPA scale-to-zero</title>
      <link>https://tproger.ru/translations/kubernetes-1-36-polnyj-razbor-20-novyh-alpha-fich-perevod-deep</link>
      <comments>https://tproger.ru/translations/kubernetes-1-36-polnyj-razbor-20-novyh-alpha-fich-perevod-deep?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/kubernetes-1-36-polnyj-razbor-20-novyh-alpha-fich-perevod-deep</guid>
      <description><![CDATA[<p>Kubernetes 1.36 выходит 22 апреля 2026. Разбираем все 20 alpha-фич: workload-aware preemption, DRA, sharded watches, HPA scale-to-zero. Перевод deep-dive Palark.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/kubernetes-1-36-polnyj-razbor-20-novyh-alpha-fich-perevod-deep">Kubernetes 1.36 приносит 20 alpha-фич: DRA, gang scheduling, HPA scale-to-zero</a>»</p>]]></description>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 23 Apr 2026 16:30:04 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Это перевод статьи «Kubernetes 1.36: Deep dive into new alpha features» от DevOps-команды <b>Palark</b>, участника CNCF. Оригинал: <a href="https://palark.com/blog/kubernetes-1-36-release-features/">palark.com/blog/kubernetes-1-36-release-features/</a>. Разбираются все 20 новых alpha-фич релиза 1.36, а также кратко non-alpha-highlights от Дмитрия Шурупова (сооснователя Palark).</i></p><p>Релиз Kubernetes 1.36, запланированный на 22 апреля 2026 года, содержит разнообразный набор новых alpha-фич, сфокусированных на трёх ключевых направлениях: производительность рабочих нагрузок, масштабируемость API и эффективное использование ресурсов. В этом обновлении много давно ожидаемых возможностей: workload-aware preemption для AI/ML-задач, шардирование API-стримов для больших кластеров, глубокая интеграция Dynamic Resource Allocation (DRA) в scheduler.</p><p>В обзоре — 20 новых фич, добавленных в Kubernetes как alpha (то есть выключены по умолчанию): от node-уровневых gRPC API до graceful leader transitions. Это даёт представление, куда движется контейнерная оркестрация.</p><p><i>Прим.</i> Авторы стараются указывать актуальные изменения, но из-за быстро меняющегося ландшафта фич Kubernetes часть KEP (Kubernetes Enhancement Proposals) может быть исключена из milestone ближе к дате релиза.</p><p>— <b>Релиз.</b> Kubernetes 1.36 выходит 22 апреля 2026. Статья рассматривает 20 alpha-фич.</p><p>— <b>Фокус.</b> AI/ML (workload-aware preemption, gang scheduling, DRA), масштабируемость (sharded watches, kubelet gRPC API), ресурсы (pod-level resource managers, HPA scale-to-zero).</p><p>— <b>По категориям.</b> Nodes (5), Scheduling (6), API (4), Apps (1), Storage (1), Various (3) — итого 20 KEP-ов.</p><p>— <b>Non-alpha.</b> OCI VolumeSource → Stable; Device taints в DRA → Beta (включены по умолчанию). User namespaces в Pod → Stable после 3,5 года в альфе. gitRepo volume plugin удалён.</p><h2>Nodes</h2><h3>DRA: Device Attributes в Downward API</h3><p><b>KEP #5304</b> · Feature gate: отсутствует. Фреймворк предоставляет boolean-флаг (например, --enable-device-metadata), который драйверы встраивают в свой CLI.</p><p>KEP-5304 вводит стандартный способ для DRA-драйвера наполнять метаданные устройства. Фреймворк затем автоматически передаёт эти метаданные в контейнер, монтируя их как JSON-файл по заданному пути. Больше не нужно изобретать кастомные контроллеры или запрашивать Kubernetes API из самой рабочей нагрузки только ради этих деталей.</p><p>В текущей версии DRA, чтобы получить информацию о выделенных устройствах (например, PCIe-адреса для GPU или UUID для mediated-устройств), нужно читать статус ResourceClaim, находить подходящий ResourceSlice и парсить атрибуты. Неудобно. KEP-5304 позволяет DRA-драйверу возвращать метаданные устройства прямо в ответе на gRPC-вызов PrepareResourceClaims (kubelet → driver), а kubelet пишет их в JSON-файл и монтирует его в контейнер. В итоге приложение внутри контейнера просто читает файл /var/run/dra-device-attributes/{claimName}/{requestName}/{driverName}-metadata.json.</p><h3>Новый kubelet gRPC API для локальных подов</h3><p><b>KEP #4188</b> · Feature gate: PodInfoAPI.</p><p>Сейчас, чтобы получить свежий статус пода (ready ли он, его IP, его labels), компоненты на той же ноде — CNI-плагины, мониторинг-агенты — должны ходить в API-сервер. Это создаёт проблемы с надёжностью (если нода потеряла связь с control-plane, локальные компоненты не получат свежие данные, хотя они есть у локального kubelet), масштабируемостью (нагрузка на API-сервер от агентов на каждой ноде) и задержкой (сетевой вызов всегда медленнее локального).</p><p>Предлагается новый gRPC API для подов прямо на ноде: UNIX-сокет /var/lib/kubelet/pods/kubelet.sock, доступ только для привилегированных процессов. API возвращает самую свежую информацию, доступную kubelet, даже если она ещё не синхронизирована с API-сервером. Клиент может запросить полный PodSpec и PodStatus либо конкретные поля через google.protobuf.FieldMask. Три основных метода: ListPods, GetPod, WatchPods.</p><h3>CRI List Streaming</h3><p><b>KEP #5825</b> · Feature gate: CRIListStreaming.</p><p>Иногда kubelet нужен список всех контейнеров на ноде (например, для garbage collection). Для этого он отправляет CRI-запрос ListContainers. Проблема: существующие CRI RPC — unary, то есть клиент (kubelet) шлёт один запрос, сервер (container runtime) возвращает один ответ со всем списком. На нагруженных нодах с тысячами контейнеров (например, от множества короткоживущих CronJob) список может превысить 16 МБ — дефолтный максимум в gRPC. Этот лимит достигается уже на ~11 000 контейнерах (~14 000 подов).</p><p>Чтобы не ломать совместимость, KEP добавляет новые server-side streaming RPC. При streaming-вызове container runtime не строит весь ответ в памяти — открывает gRPC-поток и отправляет StreamContainersResponse для каждого контейнера по очереди. kubelet читает из потока, пока тот не закроется, затем обёртка собирает куски в единый список.</p><h3>DRA: видимость доступности ресурсов</h3><p><b>KEP #5677</b> · Feature gate: DRAResourcePoolStatus.</p><p>Разработчику хочется видеть, какие DRA-ресурсы свободны в кластере, чтобы траблшутить Pod, который не шедулится из-за «insufficient DRA resources». Админу — знать, сколько GPU доступно, для планирования мощностей. Сейчас это сложно: ResourceSlices — cluster-scoped и показывают только общую capacity, ResourceClaims — namespaced и отслеживают конкретные выделения, пользователь с ограниченными правами не видит ResourceClaims вне своего namespace, нет API-механизма видеть соотношение available/allocated.</p><p>KEP добавляет ResourcePoolStatusRequest — паттерн CertificateSigningRequest: пользователь создаёт объект с указанием driver (обязательный) и pool filter (опциональный), контроллер в kube-controller-manager подхватывает его, считает availability и пишет результат в status. Для обновления — удалить старый запрос и создать новый.</p><p>Пример — посмотреть статус всех GPU-пулов:</p><h3>Pod-Level Resource Managers</h3><p><b>KEP #5526</b> · Feature gates: PodLevelResources, PodLevelResourceManagers.</p><p>KEP-2837 позволил задавать единый бюджет ресурсов (CPU, память и т.д.) для всего пода целиком, а не для каждого контейнера отдельно. Это полезно для Guaranteed-QoS-подов в HPC, AI/ML, NFV. Проблема: текущие resource managers работают на уровне контейнера и не умеют использовать pod.spec.resources для NUMA-решений.</p><p>KEP-5526 даёт выбор из двух моделей управления ресурсами (обе поддерживают Guaranteed-поды с mix из Guaranteed- и non-Guaranteed-контейнеров):</p><ul><li>Pod Scope — Topology Manager назначает один ресурсный пул с одной NUMA-ноды на весь под, используя pod.spec.resources. CPU и Memory managers выделяют эксклюзивные сегменты для Guaranteed-контейнеров, остаток идёт в shared-пул для остальных</li><li>Container Scope — ресурсы управляются для каждого контейнера отдельно, pod.spec.resources игнорируется при размещении</li></ul><p>Первая модель — для ML-тренировочного контейнера с сайдкарами (логирование, ingestion, мониторинг) на одной NUMA-ноде. Вторая — для независимого управления контейнерами с разными требованиями внутри одного Guaranteed-пода: Guaranteed-контейнер получает эксклюзивные NUMA-выровненные ресурсы, non-Guaranteed в том же поде работают в shared-пуле ноды. Раньше это было невозможно: все контейнеры в поде должны были быть Guaranteed.</p><h2>Scheduling</h2><h3>Workload-aware preemption</h3><p><b>KEP #5710</b> · Feature gate: WorkloadAwarePreemption.</p><p>Scheduler может инициировать preemption — принудительное удаление подов с более низким приоритетом, чтобы освободить ресурсы под высокоприоритетный под. Проблема: он делает это пер-под. А AI/ML- и HPC-нагрузки обычно — группа тесно связанных подов (например, для распределённого обучения). Если даже один под из группы вытеснен, весь job стопорится и просто ждёт возврата этого пода, удерживая ресурсы впустую.</p><p>KEP-5710 вводит workload-aware preemption: группы связанных подов (PodGroups) теперь — единая сущность для scheduling и preemption. Scheduler прикидывает, можно ли освободить место под высокоприоритетную группу, вытеснив менее важные группы целиком.</p><p>Новое поле DisruptionMode в GangSchedulingPolicy контролирует, может ли Kubernetes вытеснять отдельные поды или группу только целиком (PodGroup). Поле PriorityClassName в PodGroupSpec задаёт приоритет всей группы — используется для всех решений о scheduling/preemption, перекрывая приоритеты отдельных подов. Строится на KEP-4671 (Gang Scheduling в Kubernetes).</p><h3>Topology-aware workload scheduling</h3><p><b>KEP #5732</b> · Feature gate: TopologyAwareWorkloadScheduling.</p><p>Строится на идеях KEP-4671 и KEP-5710. Классический scheduler принимает решения пер-под, что неоптимально для групп связанных подов: их имеет смысл размещать на одной ноде или хотя бы близких нодах — для снижения latency. KEP-5732 делает scheduler topology-aware: можно указать, чтобы группа подов размещалась в пределах одного topological domain, определённого общим label — например, topology.kubernetes.io/rack.</p><h3>DRA: List-типы для атрибутов</h3><p><b>KEP #5491</b> · Feature gate: DRAListTypeAttributes.</p><p>KEP обновляет DRA API под более сложные hardware-конфигурации. Раньше атрибуты устройств в ResourceSlice могли быть только скалярными (string, number, boolean). Нельзя было описать устройство с несколькими соединениями — например, CPU, подключённый к нескольким PCIe-шинам.</p><p>Теперь драйверы могут отдавать атрибуты как списки строк, чисел или версий. Обновлена логика в ResourceClaim: matchAttribute теперь требует непустого пересечения списков (не точного совпадения), distinctAttribute — попарной непересекаемости.</p><p>Пример ResourceSlice с атрибутом resource.kubernetes.io/pcieRoot в разных форматах:</p><h3>DRA: поддержка ResourceClaim для Workloads</h3><p><b>KEP #5729</b> · Feature gate: WorkloadPodGroupResourceClaimTemplate.</p><p>DRA даёт использовать специализированные ресурсы — GPU, FPGA, кастомные сетевые карты. Чтобы под получил такой ресурс, нужно создать соответствующий ResourceClaim. Проблема: если несколько подов делят ресурс, максимум было 256 подов на один ResourceClaim из-за лимита status.reservedFor.</p><p>KEP-5729 чинит: ResourceClaims теперь могут быть на уровне PodGroup. Один claim на всю группу, все поды в ней могут использовать ресурс. Поды ссылаются на ресурс по локальному group-name через PodGroupResourceClaim, а не прямому имени. Динамически создаваемые поды получают доступ к общему ресурсу, автоматически созданному для группы, без необходимости знать его имя заранее.</p><h3>DRA: Native Resource Requests</h3><p><b>KEP #5517</b> · Feature gate: DRANativeResources.</p><p>Появление DRA в Kubernetes породило два независимых механизма учёта ресурсов, которые управляют одним и тем же. Это даёт двойной учёт:</p><ul><li>Supply — capacity CPU/памяти ноды хранится в двух местах: Node.Status.Allocatable у kubelet и ResourceSlice у DRA-драйвера</li><li>Consumption — поды могут запрашивать ресурсы двумя путями: через spec.containers[].resources.requests или spec.initContainers[].resources.requests (проверяет NodeResourcesFit) или через ResourceClaim (обрабатывает DynamicResources)</li></ul><p>KEP-5517 интегрирует DRA-ресурсы со standard resource tracking scheduler-а, обеспечивая единый учёт и предотвращая overcommit. Пример: ML-job запрашивает GPU через ResourceClaim, но конкретная модель GPU требует определённого количества CPU и HugePages. Раньше пользователь должен был знать об этом и прописывать в PodSpec. Теперь GPU-устройство декларирует зависимости само — scheduler учитывает потребности GPU в CPU и HugePages дополнительно к обычным requests.</p><h3>WAS (Workload-Aware Scheduling): декомпозиция PodGroup API</h3><p><b>KEP #5832</b> · Feature gate: GenericWorkload.</p><p>Kubernetes имеет gang scheduling — запуск всех подов в группе вместе. Проблема: логика gang scheduling изначально тесно связана с конкретной реализацией API под названием PodGroup, которая была частью объекта Workload. Это создавало два неудобства:</p><ul><li>Другие проекты экосистемы (Kueue, JobSet), тоже требующие gang scheduling, были вынуждены использовать этот конкретный PodGroup API — не могли применить свои CRD для описания групп</li><li>Обновление статуса одной маленькой Pod-группы требовало чтения/записи всего Workload-объекта, что давало просадку производительности и конфликты при большом числе групп</li></ul><p>KEP-5832 разделяет PodGroup и Workload: PodGroup становится самостоятельным объектом, Workload — статичным шаблоном, определяющим общую политику и структуру групп. Высокоуровневые контроллеры (Job, JobSet, LeaderWorkerSet) автоматически создают инстансы PodGroup из шаблона Workload, затем поды этой PodGroup. В Pod spec появилось поле spec.schedulingGroup.podGroupName, указывающее прямо на PodGroup. Scheduler больше не следит за Workload-объектами — работает напрямую с потоком PodGroup.</p><h2>API</h2><h3>Stale Controller Mitigation</h3><p><b>KEP #5647</b> · Feature gate: StaleControllerConsistency.</p><p>Контроллеры в Kubernetes (например, kube-controller-manager) работают в reconciliation loop: следят за состоянием кластера, сравнивают желаемое с фактическим, синхронизируют. Они используют локальный кэш состояния, чтобы не перегружать API-сервер. Кэш обновляется через watch — это eventually consistent, то есть «когда-нибудь» изменения доедут. Задержка бывает от миллисекунд до минут.</p><p>В больших high-load кластерах проблема обостряется. Контроллер создаёт Pod, через секунду получает запрос reconcile того же объекта, но кэш ещё не обновился — контроллер «не видит» созданный под и пытается создать его снова или делает что-то ещё не то.</p><p>KEP-5647 вводит два изменения:</p><ul><li>В informer добавляется BookmarkFunc, единственная задача которого — уведомить слушателей, что произошло обновление. Вместе с обычными Add/Update/Delete это позволяет контроллеру знать, насколько свеж его кэш</li><li>Улучшена логика контроллера. После успешной операции CREATE или UPDATE сохраняется новый resourceVersion объекта. Перед следующим reconcile контроллер проверяет, обработал ли informer resourceVersion как минимум такой же свежий. Если да — кэш актуален, можно продолжать. Если нет — reconcile пропускается, объект ставится обратно в очередь с exponential backoff</li></ul><h3>Graceful Leader Transition</h3><p><b>KEP #5366</b> · Feature gate: GracefulLeaderTransition.</p><p>В high-availability кластерах несколько реплик ключевых control-plane-компонентов (kube-controller-manager, kube-scheduler) работают одновременно. Чтобы избежать конфликтов, используется leader election. Старый механизм при потере лидерства просто завершал процесс через os.Exit(), kubelet его рестартовал. Это съедало ресурсы, и компонент не мог gracefully завершить работу.</p><p>KEP-5366 вводит smarter способ передачи лидерства без полного рестарта:</p><ul><li>Рефакторинг кода контроллеров — чтобы все внутренние goroutines завершались чисто. Критично, чтобы не утекали ресурсы при частой смене ролей</li><li>Улучшен release leader lease: вместо ожидания TTL, уходящий лидер активно освобождает lock при shutdown, ускоряя новые выборы. Управляется флагом ControllerManagerReleaseLeaderElectionLockOnExit</li><li>Финальная стадия (флаг GracefulLeaderTransition) меняет core-логику компонента: при потере лидерства он не завершается через os.Exit(), а переходит в follower-состояние и пытается стать лидером снова</li></ul><h3>Server-side Sharded List and Watch</h3><p><b>KEP #5866</b> · Feature gate: ShardedListAndWatch.</p><p>В Kubernetes контроллеры непрерывно мониторят состояние ресурсов (Pods, Services) через LIST и WATCH. С ростом кластеров эти операции тяжело масштабировать. Большинство контроллеров, как kube-controller-manager, масштабируются только вертикально — не умеют разделять watch-поток. Некоторые (kube-state-metrics) научились делать client-side sharding, но каждая реплика всё равно получает все события ресурса, десериализует всё, потом выбрасывает то, что не для её шарда. Лишняя сетевая нагрузка и CPU.</p><p>KEP-5866 переносит фильтрацию на API-сервер. Новый параметр shardSelector позволяет клиенту подписаться на конкретный шард данных — задаётся хэш-диапазон. Пример запроса:</p><p>API-сервер использует быстрый FNV-1a для хэша metadata.uid. Если хэш попадает в диапазон — событие уходит клиенту. Каждая реплика подписывается на свой диапазон и получает clean, non-overlapping поток.</p><h3>Manifest Based Admission Control Config</h3><p><b>KEP #5793</b> · Feature gate: ManifestBasedAdmissionControlConfig.</p><p>Чинит серьёзную startup-уязвимость в Kubernetes. Обычно все правила валидации запросов (admission webhooks — MutatingAdmissionWebhook, ValidatingAdmissionWebhook, access policies) — это API-объекты внутри кластера. Это даёт опасное окно: при старте API-сервера (или недоступности etcd) запросы могут обрабатываться до того, как правила загружены. Плюс любой пользователь с повышенными правами может — намеренно или случайно — удалить admission policies по сети.</p><p>KEP-5793 добавляет способ задавать security-политики через локальные манифест-файлы на диске control-plane-сервера. Эти файлы загружаются и применяются до того, как сервер начнёт слушать сеть. API-сервер непрерывно мониторит локальный каталог — при изменении файла правило немедленно подхватывается, валидируется и применяется без рестарта. Если валидация упала, сервер отклоняет новый манифест, логирует warning и возвращается к last-known-good конфигурации.</p><h2>Apps</h2><h3>WAS: интеграция Workload API с Job controller</h3><p><b>KEP #5547</b> · Feature gate: EnableWorkloadWithJob.</p><p>Job controller в Kubernetes отвечает за запуск джобов. Он создаёт поды, но нет гарантии, что они стартанут одновременно. Реальная проблема для распределённых нагрузок (AI/ML, MPI-задачи), где всё должно стартовать синхронно.</p><p>KEP-5547 расширяет Job controller нативной поддержкой gang scheduling (KEP-4671) через Workload и PodGroup API. Когда создаётся Job с нужными параметрами (для альфы это parallelism &gt; 1, completionMode: Indexed, parallelism = completions), контроллер автоматически:</p><ul><li>Создаёт объект Workload с политикой scheduling для группы подов, указывая gang.minCount равным parallelism</li><li>Создаёт объект PodGroup по шаблону из Workload</li><li>При создании подов Job добавляет schedulingGroup.podGroupName в их спецификацию, связывая поды с соответствующей PodGroup</li></ul><p>Scheduler видит, что поды — часть PodGroup, и ждёт возможности запустить все поды из minCount (минимум для старта workload) одним махом.</p><h2>Storage</h2><h3>PVC — время последнего использования</h3><p><b>KEP #5541</b> · Feature gate: PersistentVolumeClaimUnusedSinceTime.</p><p>Со временем в кластерах накапливаются PVC, которые больше не используются. Приложение удалили, мигрировали или просто остановили, а PVC остаётся — жрёт хранилище и деньги. Сейчас в Kubernetes нет простого способа посмотреть, когда PVC использовался в последний раз.</p><p>KEP-5541 добавляет поле UnusedSince в статус PVC (PersistentVolumeClaimStatus). PVC protection controller ставит туда metav1.Now при удалении или переходе в terminal state последнего пода, ссылающегося на PVC, и nil при появлении нового пода, начинающего ссылаться на этот PVC.</p><h2>Various</h2><h3>HPA: масштабирование до/от нуля по object/external metrics</h3><p><b>KEP #2021</b> · Feature gate: HPAScaleToZero.</p><p>Раньше Horizontal Pod Autoscaler не мог скейлить до нуля реплик. Он опирался на метрики активных подов — CPU, память — поэтому всегда требовался минимум один работающий под для сбора данных.</p><p>KEP вводит поддержку external и object metrics: HPA может принимать решения по внешним индикаторам (например, длина очереди сообщений). Если задач нет — число подов приложения скейлится до нуля, фактически глушит его. HPA записывает это в специальный status-поле ScaledToZero. Это предотвращает случайный scale-up приложения, которое админ вручную опустил до нуля через replicas: 0. Как только появляется задача (сообщение в очереди) — HPA поднимает первую реплику.</p><h3>Native Histogram Support для метрик Kubernetes</h3><p><b>KEP #5808</b> · Feature gate: NativeHistograms.</p><p>Гистограммы в Prometheus сейчас работают через предопределённые buckets. Разработчик заранее задаёт диапазоны значений. Например, для latency: до 10 мс, до 50 мс, до 100 мс, до 500 мс. Если запрос занял 49 мс — инкрементится «до 50 мс». У этого два недостатка:</p><ul><li>Неоднозначность — невозможно узнать точное распределение внутри bucket (все запросы на 11 мс или все на 49 мс? Эта информация теряется)</li><li>Избыточность — передаются данные для всех bucket'ов, даже если туда ничего не попало. Жрёт ресурсы и диск</li></ul><p>Prometheus v2.40 ввёл Native Histograms (стали stable в v3.8.0) с умными auto-adjusting экспоненциальными buckets. KEP-5808 интегрирует Prometheus Native Histograms в метрики компонентов Kubernetes.</p><h3>Обработка незашифровываемых ресурсов</h3><p><b>KEP #3926</b> · Feature gate: AllowUnsafeMalformedObjectDeletion.</p><p>Шифрование API-ресурсов at-rest давно используется в Kubernetes. Иногда оно ломается из-за внешних сбоев или неверной настройки. Если один объект определённого типа не расшифровывается, то list этого типа в префиксе, содержащем объект, всегда падает — даже если остальные объекты читаются. Поломанный объект нельзя удалить через Kubernetes API, админ должен лезть в etcd вручную.</p><p>KEP-3926 предлагает метод идентификации ресурсов, которые не расшифровываются или не декодируются в объект, и вводит новый DeleteOption — IgnoreStoreReadErrorWithClusterBreakingPotential, разрешающий удалить ресурс, даже если его данные не читаются.</p><h2>Non-alpha highlights релиза 1.36 — выбор Дмитрия Шурупова</h2><p>Статья намеренно фокусируется на alpha-фичах, чтобы показать, куда движется разработка. Но каждый релиз содержит много других обновлений — это alpha, введённые раньше, или фичи, сейчас находящиеся в beta/stable. Самые заметные, по мнению <b>Дмитрия Шурупова</b> (сооснователя Palark, CNCF Ambassador):</p><ul><li>Device taints и tolerations в DRA (KEP 5055) и DRA support for partitionable devices (KEP 4815) — Beta. Включены по умолчанию</li><li>OCI VolumeSource (KEP 4639) — Stable. Новый VolumeSource (появился в 1.31), поддерживает OCI-образы: хранение файлов и расшаривание между контейнерами в поде без включения в основной образ</li><li>User namespaces в Pods (KEP 127) — Stable. Стартовал в alpha в 1.25 (август 2022), через 3,5 года наконец GA</li><li>Mutating Admission Policies (KEP 3962) — Stable. Расширяет mutating admission webhooks через CEL-выражения</li><li>Accelerated recursive SELinux label change (KEP 1710) — Stable. В beta с 1.27 (апрель 2023)</li><li>gitRepo volume plugin (KEP 5040) — удалён. Критическая security-проблема: выполнение кода как root на ноде</li></ul><p>Часть alpha-фич из 1.35 и более ранних релизов (gang scheduling, user namespaces в HostNetwork-подах) значительно доработана, но осталась в альфе.</p><p>Это не полный список изменений — полную информацию можно посмотреть в <a href="https://github.com/kubernetes/enhancements">official enhancements tracker</a> и <a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.36.md">changelog</a>.</p><h2>Заключение</h2><p>Релиз Kubernetes 1.36 существенно расширяет инструментарий оркестратора, фокусируясь на производительности, безопасности и удобстве использования. Интегрируя gang scheduling и продвинутое управление ресурсами, Kubernetes всё лучше подходит для современных распределённых нагрузок и больших кластеров, одновременно оптимизируя ядро своих API.</p><blockquote>Спасибо всем разработчикам и авторам KEP, сделавшим Kubernetes 1.36 возможным. Вы потрясающе сработали.</blockquote><p>Интересуют другие alpha-фичи, недавно добавленные в Kubernetes? Читайте deep-dives по <a href="https://palark.com/blog/kubernetes-1-35-release-features/">Kubernetes 1.35</a> (декабрь 2025) и <a href="https://palark.com/blog/kubernetes-1-34-release-features/">Kubernetes 1.34</a> (август 2025).</p><p><i>Оригинал статьи: <a href="https://palark.com/blog/kubernetes-1-36-release-features/">palark.com/blog/kubernetes-1-36-release-features/</a>. Перевод публикуется с сохранением оригинальной структуры и всех технических деталей.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>docker pull ломается в Испании по выходным — La Liga блокирует IP Cloudflare</title>
      <link>https://tproger.ru/news/docker-pull-lomaetsya-v-ispanii-po-vyhodnym-la-liga-blokiruet-i</link>
      <comments>https://tproger.ru/news/docker-pull-lomaetsya-v-ispanii-po-vyhodnym-la-liga-blokiruet-i?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/docker-pull-lomaetsya-v-ispanii-po-vyhodnym-la-liga-blokiruet-i</guid>
      <description><![CDATA[<p>По выходным до 24 мая 2026 docker pull, GitHub Actions и Vercel могут не работать в Испании: La Liga блокирует IP Cloudflare. Как настроить зеркало реестра и CI вне страны.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/docker-pull-lomaetsya-v-ispanii-po-vyhodnym-la-liga-blokiruet-i">docker pull ломается в Испании по выходным — La Liga блокирует IP Cloudflare</a>»</p>]]></description>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[CDN]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 13 Apr 2026 11:00:05 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если у вас команда в Испании или серверы, завязанные на Cloudflare/Vercel, — по выходным до 24 мая 2026 ждите странных сбоев: docker pull вылетает по таймауту, GitHub-экшены падают на клонировании, половина SaaS возвращает 5xx. Это не у вас — это <a href="https://www.laliga.com/">La Liga</a> снова блокирует IP-адреса CDN на время матчей.</p><p>Свежий <a href="https://news.ycombinator.com/item?id=47738883">тред на Hacker News</a> снова показал: на прошлых выходных docker pull из Испании стабильно ломался. Причина — судебный приказ от декабря 2024-го, который разрешает La Liga просить всех испанских ISP мгновенно блокировать любые IP без предварительной проверки, если лига считает, что на них ведётся нелегальный стрим футбольного матча.</p><ul><li>Судебный приказ Торгового суда №6 Барселоны (декабрь 2024) разрешает La Liga блокировать любые IP-адреса на время матчей без уведомления сервисов-владельцев.</li><li>Пиратские стримы прячутся за CDN Cloudflare, Vercel, Netlify, где один IP обслуживает тысячи легитимных сайтов — в итоге блокируются Docker Hub, Twitch, Steam, LinkedIn, X, часть ИИ-провайдеров.</li><li>Cloudflare и RootedCON проиграли апелляцию в марте 2025. Правительство Испании в октябре 2025 отказалось вмешиваться. Сезон 2025/26 продлится до 24 мая 2026 — до этого блокировки регулярны.</li><li>Docker уже падал по всей Испании осенью 2025 на несколько дней. Новые жалобы в апреле 2026 — это уже рутина, а не единичный случай.</li><li>Обход — VPN или прокси вне Испании. Для команд с испанскими разработчиками — зеркало реестра, резервный CI-раннер вне страны, жалоба в Еврокомиссию по регламенту 2015/2120.</li></ul><h2>Что именно ломается</h2><p>Разработчики из Испании (в основном из Мадрида и Барселоны) сообщают о регулярных сбоях по субботам и воскресеньям во время матчей La Liga. Конкретно ломается:</p><ul><li>docker pull для образов, раздающихся через Docker Hub (Cloudflare CDN)</li><li>GitHub Actions на self-hosted runners в Испании, а также у GitHub-hosted runners, если они тянут образы через испанский ISP</li><li>Vercel-хостинг (фронтенд-сайты внезапно возвращают 5xx)</li><li>Twitch, Steam, LinkedIn, часть Twitter/X — всё, что висит за Cloudflare</li><li>API некоторых LLM-провайдеров, которые используют Cloudflare Workers</li></ul><p>По словам Guillermo Rauch (CEO Vercel), La Liga даже не связывается с владельцами инфраструктуры — просто присылает ISP IP-адрес для блокировки. Даже после открытия официального канала связи (апрель 2025) Vercel в мае 2025 <a href="https://x.com/rauchg/status/1921595519886041395">жаловался</a>, что их CDN продолжают блокировать «без разбора».</p><h2>Почему страдает именно инфраструктура</h2><p>La Liga идентифицирует сайты, где, по их мнению, идёт пиратский стрим, и записывает IP серверов этих сайтов. Но сами стримы стоят за Cloudflare/Vercel/Netlify — эти CDN используют anycast: один и тот же IP-адрес объявляется из десятков дата-центров и обслуживает тысячи клиентов одновременно. Когда La Liga просит ISP заблокировать конкретный IP, отваливаются не только пиратские стримы, но и Docker Hub, SaaS-панели, виджеты поддержки и всё остальное, что делит IP с «подозреваемым».</p><p>Это не баг блокировки, а её фундаментальное свойство. Cloudflare прямо указывает на <a href="https://blog.cloudflare.com/cloudflare-la-liga-response/">непропорциональность</a> меры: блокировка одного IP выключает миллионы легитимных ресурсов. Суд это аргумент отклонил.</p><h2>Как мы сюда пришли</h2><ul><li><b>Декабрь 2024:</b> Торговый суд №6 Барселоны выдаёт La Liga разрешение на блокировки без предварительной проверки. Условие одно: «не затрагивать третьих лиц» — условие, которое физически невозможно соблюсти.</li><li><b>Февраль 2025:</b> первая крупная блокировка IP Cloudflare, массовые сбои в Испании. La Liga обвиняет Cloudflare в «защите преступных организаций».</li><li><b>Март 2025:</b> Cloudflare и RootedCON проигрывают апелляцию. Суд заявил, что доказательств влияния на третьи стороны нет.</li><li><b>Апрель–май 2025:</b> CEO Vercel Guillermo Rauch публично жалуется, что La Liga игнорирует обращения и продолжает блокировать IP CDN без согласования.</li><li><b>Осень 2025:</b> Docker падал по всей Испании на несколько дней после старта нового сезона.</li><li><b>Октябрь 2025:</b> испанский парламент отклоняет инициативу остановить блокировки. RootedCON публикует шаблон коллективного иска.</li><li><b>Апрель 2026:</b> сезон 25/26 в разгаре, свежий тред на HN показывает, что docker pull всё ещё не работает по выходным.</li></ul><h2>Что делать, если вас задело</h2><ol><li>Проверьте, затронут ли ваш сервис, на <a href="https://hayahora.futbol/">hayahora.futbol</a> — сайт мониторит IP, которые La Liga активно блокирует. Список меняется каждую неделю.</li><li>Для быстрой разблокировки команды: корпоративный VPN с выходом вне Испании (Нидерланды, Ирландия, Франция) или SSH-туннель через зарубежный VPS. Для российских разработчиков SSH-туннель через собственный VPS — надёжнее публичных VPN-сервисов, которые в РФ могут быть недоступны.</li><li>Для CI/CD: поставьте self-hosted runner в AWS/GCP/Yandex Cloud за пределами Испании. GitHub-hosted runners тоже затронуты, если трафик идёт через CDN.</li><li>Для docker pull: поднимите <a href="https://docs.docker.com/docker-hub/mirror/">pull-through mirror</a> — это локальный прокси-кэш Docker-образов, который живёт на вашем сервере вне Испании. Демон тянет слои через него, и трафик к Docker Hub (а значит, к Cloudflare) идёт уже не из Испании.</li><li>Для сайтов на Vercel/Cloudflare Pages: рассмотрите резервный деплой на AWS CloudFront или Yandex Cloud CDN — хотя бы как fallback на время матчей.</li><li>Подайте жалобу в <a href="https://ec.europa.eu/law/application-eu-law/report-breach">Европейскую комиссию</a> (регламент 2015/2120, нарушение сетевой нейтральности). Массовые жалобы — единственный реальный путь давления на Испанию.</li></ol><h2>Вывод</h2><p>Это прецедент, который неприятнее, чем кажется на первый взгляд. Страна ЕС на уровне судебного приказа разрешила частной лиге блокировать произвольную инфраструктуру интернета «по субботам» — и это не останавливают ни Еврокомиссия, ни парламент, ни публичное давление. Если такая практика закрепится, завтра правообладатели фильмов, музыки или игр захотят тот же инструмент, и уже не только в Испании.</p><blockquote>Проблема не в том, что они это делают. Проблема в том, что они МОГУТ это делать. Это вид государственной цензуры, который не должен быть возможен в принципе.</blockquote><p>Для разработчиков прагматичный вывод один: если у вас есть критическая зависимость от CDN Cloudflare или Vercel и хоть одно звено инфраструктуры физически в Испании, заложите план-B. Зеркало реестра, резервный CI-раннер, fallback-домен — мелочь в обычное время, страховка в выходные.</p><p>Источники: <a href="https://news.ycombinator.com/item?id=47738883">Hacker News</a>, <a href="https://daniel.es/blog/cloudflare-vs-la-liga/">daniel.es</a>, <a href="https://www.techradar.com/vpn/vpn-privacy-security/cloudflare-and-la-ligas-conflict-deepens-as-piracy-legal-battle-continues">TechRadar</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 DevTools-материалов tproger, которые вы могли пропустить за последний год</title>
      <link>https://tproger.ru/articles/10-devtools-materialov-tproger-kotorye-vy-mogli-propustit-za-p</link>
      <comments>https://tproger.ru/articles/10-devtools-materialov-tproger-kotorye-vy-mogli-propustit-za-p?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-devtools-materialov-tproger-kotorye-vy-mogli-propustit-za-p</guid>
      <description><![CDATA[<p>Подборка лучших статей tproger об инструментах разработчика за последний год: ИИ-ассистенты, Docker, терминал, IDE и дебаг. То, что утонуло в ленте.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-devtools-materialov-tproger-kotorye-vy-mogli-propustit-za-p">10 DevTools-материалов tproger, которые вы могли пропустить за последний год</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 12 Apr 2026 14:30:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы пропустили хотя бы неделю на tproger — могли упустить инструмент, который сэкономит вам часы. Мы собрали 10 материалов об инструментах разработчика за последние 6–12 месяцев — от ИИ-ассистентов до Docker-трюков. Всё, что утонуло в ленте, но заслуживает второго шанса.</p><p>— 3 материала про ИИ в IDE: какие ассистенты доступны в РФ, Copilot бесплатно, ловушки Cursor</p><p>— 3 материала про контейнеры: Docker-советы, Podman как альтернатива, Docker для фронтендеров</p><p>— 4 материала про инструменты: Bruno вместо Postman, Linux-команды, Playwright + VS Code, дебаг vs console.log</p><h2>ИИ в IDE</h2><h3>1. Топ 5 ИИ-ассистентов для IDE, доступных российским разработчикам</h3><p>Обзор ИИ-ассистентов, которые реально работают в России: от GigaCode (Сбер) до Codeium. Для каждого — поддерживаемые IDE, ограничения и стоимость. 24 000+ просмотров — один из самых читаемых материалов за год.</p><p><a href="https://tproger.ru/articles/top-5-ii-assistentov-dlya-ide--dostupnyh-rossijskim-razrabotchikam">Читать статью →</a></p><h3>2. GitHub Copilot стал полностью бесплатным в VS Code</h3><p>В декабре 2025 Microsoft сделала Copilot бесплатным внутри VS Code. Что входит в бесплатный тир, какие ограничения и стоит ли переходить с платных альтернатив — разбор для тех, кто пропустил.</p><p><a href="https://tproger.ru/news/--github-copilot-stal-polnostyu-besplatnym-vnutri-vscode">Читать статью →</a></p><h3>3. «Безлимит» Cursor оказался не таким уж безлимитным</h3><p>Пользователи Cursor обнаружили, что тарифы меняются без предупреждения, а «безлимитный» план имеет скрытые ограничения. Если вы платите за ИИ-IDE — полезно знать, за что именно.</p><p><a href="https://tproger.ru/news/--polzovateli-cursor-zhaluyutsya--tarify-menyayutsya-vtihuyu--a--bezlimit--okazalsya-ne-takim-uzh-bezlimitnym">Читать статью →</a></p><h2>Контейнеры</h2><h3>4. 6 советов, которые прокачают работу с Docker</h3><p>Многоэтапные сборки, кеширование слоёв, health checks, .dockerignore и другие практики, которые сокращают время сборки и размер образов. 7 600+ просмотров.</p><p><a href="https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker">Читать статью →</a></p><h3>5. Контейнеры после Docker: Podman и что нас ждёт</h3><p>Docker — уже не единственный вариант. Podman работает без демона, поддерживает rootless-режим из коробки и совместим с Docker CLI. Обзор состояния экосистемы контейнеров в 2026 году.</p><p><a href="https://tproger.ru/articles/kontejnery-posle-docker--kuda-dvizhetsya-mir-s-podman-i-chto-nas-zhdet-v-2026">Читать статью →</a></p><h3>6. 5 вещей про Docker, которые должен знать фронтенд-разработчик</h3><p>Docker для тех, кто привык к npm start. Зачем фронтендеру контейнеры, как контейнеризировать React/Next.js-приложение и что такое Docker Compose на практике.</p><p><a href="https://tproger.ru/articles/5-veshhej--kotorye-dolzhen-znat-frontend-razrabotchik-pro-docker">Читать статью →</a></p><h2>Инструменты и приёмы</h2><h3>7. Bruno API Client — альтернатива Postman</h3><p>Коллекции хранятся в Git, нет облачного аккаунта, работает офлайн. Bruno дошёл до версии 1.35 и стал серьёзной альтернативой Postman для тех, кому важна приватность и версионирование API-запросов. 6 200+ просмотров.</p><p><a href="https://tproger.ru/news/-ubijca--postman---bruno-api-client---obnovilsya-do-versii-1-35">Читать статью →</a></p><h3>8. 7 команд Linux, которые экономят время</h3><p>Команды за пределами стандартного набора: от быстрого поиска по истории до мониторинга ресурсов. Подойдёт и тем, кто только осваивает терминал, и тем, кто ищет новые трюки.</p><p><a href="https://tproger.ru/articles/chto-eshhe-est-v-terminale-linux--7-komand--kotorye-ekonomyat-kuchu-vremeni">Читать статью →</a></p><h3>9. Playwright + VS Code: автотест за 15 минут</h3><p>Пошаговый гайд: установка Playwright, расширение для VS Code, запись и запуск первого теста. Полезно, если откладывали автотесты — теперь порог входа ниже некуда.</p><p><a href="https://tproger.ru/articles/playwright---vs-code--ustanovka-i-pervyj-test-za-15-minut">Читать статью →</a></p><h3>10. 1% разработчиков используют дебаг в VS Code. 99% — console.log</h3><p>Исследование показало, что подавляющее большинство разработчиков игнорирует встроенный дебаггер VS Code. Разбор: почему так происходит, что теряют те, кто не дебажит, и стоит ли менять привычки.</p><p><a href="https://tproger.ru/news/issledovanie--v-1--sluchaev-razrabotchiki-ispolzuyut-otladku-vs-code--v-99----console-log--">Читать статью →</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Что такое Kubernetes: оркестрация контейнеров простыми словами</title>
      <link>https://tproger.ru/articles/chto-takoe-kubernetes--orkestraciya-kontejnerov-prostymi-slovami</link>
      <comments>https://tproger.ru/articles/chto-takoe-kubernetes--orkestraciya-kontejnerov-prostymi-slovami?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-takoe-kubernetes--orkestraciya-kontejnerov-prostymi-slovami</guid>
      <description><![CDATA[<p>Kubernetes простыми словами: Pod, Node, Deployment, Service. Архитектура K8s, сравнение с Docker Compose и Swarm, старт с Minikube и облачных сервисов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-takoe-kubernetes--orkestraciya-kontejnerov-prostymi-slovami">Что такое Kubernetes: оркестрация контейнеров простыми словами</a>»</p>]]></description>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 29 Mar 2026 05:31:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Представьте, что вы запустили десять микросервисов в Docker-контейнерах. Пока их три — всё управляется вручную. Но когда их становится тридцать, сто, тысяча — ручное управление превращается в кошмар: сервисы падают, нагрузка распределяется неровно, обновления выкатываются часами. Именно здесь на сцену выходит Kubernetes.</p><h2>Что такое Kubernetes</h2><p><b>Kubernetes</b> (произносится «кубернетес», сокращённо K8s) — это система оркестрации контейнеров с открытым исходным кодом, которая автоматизирует развёртывание, масштабирование и управление контейнеризированными приложениями. Kubernetes был создан компанией Google на основе внутренней системы Borg и передан в открытый доступ в 2014 году. Сегодня он управляется фондом Cloud Native Computing Foundation (CNCF).</p><p>Если <a href="https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c">Docker</a> — это технология упаковки приложений в контейнеры, то Kubernetes — это система, которая управляет этими контейнерами в промышленном масштабе: решает, на каком сервере их запустить, следит за их здоровьем, перезапускает упавшие, масштабирует под нагрузку и обновляет без простоев.</p><p>- Kubernetes автоматизирует развёртывание, масштабирование и управление контейнерами
- Основные сущности: Pod, Node, Cluster, Deployment, Service, Namespace
- Архитектура делится на Control Plane (управление) и Worker Nodes (исполнение)
- K8s поддерживает самовосстановление: упавший Pod перезапускается автоматически
- Kubernetes подходит для больших распределённых систем; для небольших проектов достаточно Docker Compose
- Минимальный старт — Minikube или kind на локальной машине за 10 минут
- Облачные решения GKE, EKS, AKS берут на себя управление Control Plane
- По данным CNCF на 2024 год, Kubernetes используют или оценивают более 84% организаций (CNCF 2023)</p><h2>Зачем нужен Kubernetes — проблема управления контейнерами в масштабе</h2><p>Контейнеры решили проблему «у меня работает, у тебя не работает» — приложение вместе со всеми зависимостями упаковывается в изолированный образ. Но с ростом количества контейнеров появляются новые проблемы.</p><ul><li><b>Высокая доступность.</b> Если контейнер упал — его нужно перезапустить. Вручную это нереально при сотнях сервисов.</li><li><b>Балансировка нагрузки.</b> Трафик нужно распределять между несколькими экземплярами одного сервиса.</li><li><b>Масштабирование.</b> В час пик нужно быстро добавить экземпляры, ночью — убрать, чтобы сэкономить ресурсы.</li><li><b>Обновления без даунтайма.</b> Rolling update или blue-green деплой требуют координации.</li><li><b>Управление конфигурацией и секретами.</b> Переменные среды, токены, сертификаты — всё это нужно доставлять в контейнеры безопасно.</li><li><b>Размещение на серверах.</b> Решить, на каком из 50 серверов запустить очередной контейнер, учитывая доступные ресурсы CPU и памяти.</li></ul><p>По данным CNCF, организации, использующие <a href="https://tproger.ru/articles/chto-takoe-mikroservisy--arhitektura--plyusy-i-minusy--primery">микросервисную архитектуру</a>, в среднем управляют более чем 10 сервисами в продакшене, а крупные компании — тысячами. Вручную это не масштабируется. Kubernetes решает все перечисленные задачи декларативно: вы описываете желаемое состояние системы, а K8s сам приводит её к этому состоянию и поддерживает его.</p><h2>Основные концепции Kubernetes</h2><p>Прежде чем погружаться в архитектуру, важно понять базовые сущности, с которыми работает Kubernetes каждый день.</p><h3>Pod — минимальная единица развёртывания</h3><p><b>Pod</b> — это один или несколько контейнеров, которые всегда запускаются вместе на одном узле и разделяют сетевое пространство (один IP-адрес) и тома хранилища. Обычно один Pod = один контейнер с основным приложением. Второй контейнер в Pod используется как sidecar: например, для сбора логов или проксирования трафика.</p><h3>Node — рабочий узел кластера</h3><p><b>Node</b> (узел) — это физическая или виртуальная машина, на которой запускаются Pod-ы. Каждый узел содержит kubelet (агент, который следит за Pod-ами), kube-proxy (сетевые правила) и container runtime (Docker, containerd или CRI-O). В кластере обычно несколько узлов — от 3 до тысяч в крупных системах.</p><h3>Cluster — совокупность всех узлов</h3><p><b>Cluster</b> (кластер) — это набор узлов, управляемых единым Control Plane. Весь Kubernetes работает внутри кластера. Один кластер может объединять сотни серверов в разных датацентрах.</p><h3>Deployment — управление жизненным циклом приложения</h3><p><b>Deployment</b> — это объект, который описывает желаемое состояние для набора Pod-ов: сколько реплик должно работать, какой образ использовать, как выполнять обновления. Deployment следит за тем, чтобы нужное количество Pod-ов всегда было запущено, и управляет rolling-обновлениями.</p><h3>Service — стабильная точка доступа к Pod-ам</h3><p><b>Service</b> — это абстракция, которая предоставляет стабильный IP-адрес и DNS-имя для набора Pod-ов. Pod-ы могут создаваться и удаляться, их IP меняется — Service обеспечивает постоянную точку входа и балансирует нагрузку между ними. Основные типы: ClusterIP (внутри кластера), NodePort (снаружи по порту узла), LoadBalancer (облачный балансировщик).</p><h3>Namespace — изоляция ресурсов внутри кластера</h3><p><b>Namespace</b> — это виртуальный раздел внутри кластера. Позволяет изолировать ресурсы разных команд, проектов или окружений (dev, staging, production) в рамках одного кластера. По умолчанию существуют namespace-ы: default, kube-system, kube-public.</p><h2>Как работает Kubernetes — архитектура изнутри</h2><p>Kubernetes состоит из двух уровней: <b>Control Plane</b> (управляющий слой) и <b>Worker Nodes</b> (рабочие узлы). Разберём каждый компонент.</p><h3>Control Plane — мозг кластера</h3><ul><li><b>API Server (kube-apiserver)</b> — единственная точка входа для всех операций с кластером. Все компоненты общаются только через API Server. kubectl, CI/CD системы, внутренние контроллеры — всё идёт через него. Принимает REST-запросы, валидирует их и сохраняет состояние в etcd.</li><li><b>etcd</b> — распределённое хранилище типа «ключ-значение», где хранится всё состояние кластера: конфигурации, метаданные Pod-ов, секреты. Это единственное место с состоянием в Kubernetes — если etcd жив, кластер восстановим.</li><li><b>Scheduler (kube-scheduler)</b> — отвечает за размещение новых Pod-ов на узлах. Учитывает доступные ресурсы узлов, affinity-правила, ограничения и политики. Не запускает Pod-ы сам — только решает, на каком узле их запустить.</li><li><b>Controller Manager (kube-controller-manager)</b> — набор контроллеров, каждый из которых следит за определённым типом ресурсов. Deployment Controller следит, чтобы работало нужное число реплик. Node Controller реагирует на отказ узлов. ReplicaSet Controller поддерживает заданное количество Pod-ов.</li></ul><h3>Worker Nodes — исполнители</h3><ul><li><b>kubelet</b> — агент на каждом узле. Получает от API Server описание Pod-ов, которые должны работать на этом узле, запускает их через container runtime и сообщает статус.</li><li><b>kube-proxy</b> — управляет сетевыми правилами на узле (iptables или IPVS). Обеспечивает работу Service: трафик к виртуальному IP Service перенаправляется на реальные Pod-ы.</li><li><b>Container Runtime</b> — движок для запуска контейнеров. Kubernetes поддерживает containerd (рекомендован), CRI-O и Docker Engine через специальный shim.</li></ul><p>Типичный жизненный цикл запроса: вы применяете YAML через kubectl apply → API Server сохраняет объект в etcd → Scheduler находит подходящий узел → kubelet на том узле получает задание и запускает контейнер → Controller Manager следит, что всё работает как описано.</p><h2>Kubernetes vs Docker Compose vs Docker Swarm — когда что использовать</h2><p>Выбор инструмента зависит от масштаба задачи. Не стоит использовать Kubernetes там, где достаточно Docker Compose — это избыточная сложность.</p><ul><li><b>Docker Compose</b> — идеально для локальной разработки и небольших проектов на одном сервере. Простой синтаксис, быстрый старт, нет оверхеда. Не умеет автоматически восстанавливаться при отказе хоста, не масштабируется горизонтально.</li><li><b>Docker Swarm</b> — встроенная кластеризация Docker. Проще Kubernetes, подходит для небольших кластеров (2–10 серверов), когда не нужны продвинутые возможности. Экосистема значительно меньше, развитие заморожено.</li><li><b>Kubernetes</b> — для продакшен-систем с требованиями к высокой доступности, горизонтальному масштабированию, сложным сетевым политикам и богатой экосистеме. Оправдан при наличии хотя бы 3–5 сервисов и команды DevOps.</li></ul><blockquote>Если вы можете управлять системой через Docker Compose — используйте Docker Compose. Kubernetes стоит выбирать, когда боль от ручного управления стала больше, чем сложность K8s.</blockquote><p>Ключевые отличия в цифрах: Docker Compose запускается за секунды, Kubernetes требует минимум 3 узла для продакшена и несколько часов на начальную настройку. Зато Kubernetes поддерживает до 5000 узлов и 150 000 Pod-ов в одном кластере.</p><h2>Как начать работу с Kubernetes</h2><p>Для изучения и разработки не нужен облачный кластер. Есть несколько способов запустить Kubernetes локально.</p><h3>Minikube — классический локальный кластер</h3><p>Minikube запускает однонодовый кластер Kubernetes в виртуальной машине или контейнере. Поддерживает macOS, Linux и Windows. Встроен dashboard, поддержка нескольких профилей и дополнений.</p><h3>kind — Kubernetes в Docker</h3><p><b>kind</b> (Kubernetes IN Docker) запускает узлы кластера как Docker-контейнеры. Быстрее Minikube, идеален для CI/CD и тестирования, поддерживает многонодовые кластеры.</p><h3>Облачные управляемые сервисы</h3><p>Для продакшена большинство команд выбирает управляемый Kubernetes — облачный провайдер берёт на себя Control Plane, обновления и резервирование etcd.</p><ul><li><b>GKE (Google Kubernetes Engine)</b> — оригинальный управляемый K8s от Google. Лучшая интеграция с экосистемой Google Cloud, автопилот-режим для полностью управляемой инфраструктуры.</li><li><b>EKS (Amazon Elastic Kubernetes Service)</b> — Kubernetes на AWS. Глубокая интеграция с сервисами AWS: IAM, ALB, EBS. Самый популярный выбор среди enterprise-компаний.</li><li><b>AKS (Azure Kubernetes Service)</b> — K8s на Microsoft Azure. Хорошая интеграция с Azure Active Directory, бесплатный Control Plane.</li><li><b>Yandex Managed Service for Kubernetes</b> — российский вариант с серверами в РФ, интеграция с Yandex Cloud.</li></ul><p>Помимо самого кластера, при работе с <a href="https://tproger.ru/articles/chto-takoe-rest-api-prostymi-slovami--principy--metody-i-primery">REST API</a> сервисов внутри Kubernetes понадобится настроить Ingress-контроллер (nginx, Traefik) для маршрутизации внешних HTTP-запросов к нужным Service-ам.</p><h2>Выводы</h2><p>Kubernetes — это де-факто стандарт оркестрации контейнеров в 2024–2025 годах. По данным CNCF Annual Survey, более 84% компаний используют или оценивают K8s, а рынок контейнерной оркестрации продолжает расти двузначными темпами.</p><p>Kubernetes решает реальные проблемы масштаба: автоматическое самовосстановление, горизонтальное масштабирование, нулевой даунтайм при обновлениях, декларативное управление инфраструктурой. За это приходится платить сложностью — не стоит применять K8s там, где хватает Docker Compose.</p><p>Путь в Kubernetes начинается с понимания контейнеров, затем — знакомство с kubectl и Minikube, первые Deployment-ы и Service-ы, потом — изучение Ingress, ConfigMap, Secret, HorizontalPodAutoscaler. Это путь в несколько месяцев, но он открывает доступ к одной из самых востребованных технологий в DevOps.</p><p>Изучаете облачные технологии? Прочитайте наши статьи о <a href="https://tproger.ru/articles/chto-takoe-mikroservisy--arhitektura--plyusy-i-minusy--primery">микросервисной архитектуре</a> и <a href="https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c">Docker</a> — они помогут выстроить полную картину современной облачной разработки. Автоматизировать деплой в Kubernetes поможет <a href="https://tproger.ru/articles/chto-takoe-ci-cd--nepreryvnaya-integraciya-i-dostavka">CI/CD</a>: пайплайн собирает образ, прогоняет тесты и автоматически деплоит в кластер.</p><p>Если хотите собрать Kubernetes не как отдельный страшный инструмент, а как часть цельного пути, посмотрите <a href="https://tproger.ru/articles/roadmap-devops-inzhenera-v-2026-godu--chto-uchit-i-v-kakom-poryadke">план обучения DevOps-инженера</a>. Там видно, почему Kubernetes появляется после Docker, CI/CD и инфраструктуры, а не вместо них.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что такое Docker простыми словами: контейнеры, образы и Docker Compose</title>
      <link>https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c</link>
      <comments>https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c</guid>
      <description><![CDATA[<p>Docker упаковывает приложение и все зависимости в контейнер, который одинаково работает везде. Разбираем образы, Dockerfile и Compose с примерами кода.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c">Что такое Docker простыми словами: контейнеры, образы и Docker Compose</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 28 Mar 2026 15:29:10 GMT</pubDate>
      <content:encoded><![CDATA[<p>Docker — слово, которое звучит на каждом втором собеседовании. Его упоминают в вакансиях, обсуждают на митапах и требуют в тестовых заданиях. Но что на самом деле за ним стоит?</p><p><b>Docker</b> — это платформа для контейнеризации приложений. Она позволяет упаковать программу вместе со всеми её зависимостями в изолированный контейнер, который одинаково работает на любом компьютере — от ноутбука разработчика до боевого сервера. Docker выпущен в 2013 году компанией Docker, Inc. и с тех пор стал стандартом индустрии: по данным Stack Overflow Developer Survey 2023, его используют более 52% профессиональных разработчиков.</p><p>— Docker упаковывает приложение и все его зависимости в контейнер, который запускается одинаково в любой среде</p><p>— Контейнер — это запущенный экземпляр образа, а образ — шаблон для создания контейнеров</p><p>— Dockerfile описывает, как собрать образ, а Docker Compose управляет несколькими контейнерами сразу</p><p>— Docker потребляет значительно меньше ресурсов, чем виртуальная машина, и запускается за секунды</p><p>— Для начала работы достаточно установить Docker Desktop и выполнить одну команду</p><h2>Зачем нужен Docker — проблема «у меня работает»</h2><p>Каждый разработчик хотя бы раз сталкивался с классической ситуацией: код отлично работает на его машине, но ломается на сервере или у коллеги. Причина — различия в окружении: другая версия языка, недостающая библиотека, конфликт зависимостей.</p><p>Docker решает эту проблему радикально. Вместо того чтобы настраивать каждое окружение вручную, вы упаковываете приложение вместе со всем необходимым в контейнер. Этот контейнер работает одинаково везде — на macOS, Windows, Linux, в облаке AWS или на сервере в дата-центре.</p><p>Вот что это даёт на практике:</p><ul><li><b>Воспроизводимость</b> — «у меня работает» превращается в «работает у всех»</li><li><b>Изоляция</b> — приложения не мешают друг другу, каждое живёт в своём контейнере</li><li><b>Скорость развёртывания</b> — новый сервер поднимается за секунды, а не за часы</li><li><b>Масштабирование</b> — нужно больше мощности? Запустите ещё контейнеров</li></ul><h2>Основные понятия Docker</h2><h3>Образ (Image)</h3><p>Образ — это неизменяемый шаблон, из которого создаётся контейнер. Его можно сравнить с классом в программировании: сам по себе он ничего не делает, но на его основе можно создать сколько угодно рабочих экземпляров.</p><p>Образы хранятся в реестрах (registry). Самый популярный — <a href="https://hub.docker.com/">Docker Hub</a>, где доступны тысячи готовых образов: Python, Node.js, PostgreSQL, Nginx и многие другие.</p><h3>Контейнер (Container)</h3><p>Контейнер — это запущенный экземпляр образа. Если образ — это класс, то контейнер — это объект. Внутри контейнера работает ваше приложение в изолированном окружении со своей файловой системой, сетью и процессами.</p><p>Контейнер можно запустить, остановить, удалить и создать заново из того же образа. Данные внутри контейнера по умолчанию не сохраняются после удаления — для постоянного хранения используются тома (volumes).</p><h3>Dockerfile</h3><p>Dockerfile — это текстовый файл с инструкциями для сборки образа. Каждая строка описывает один шаг: какой базовый образ взять, какие файлы скопировать, какие пакеты установить, какую команду запустить.</p><p>Пример Dockerfile для Python-приложения:</p><p>Разберём построчно:</p><ul><li>FROM python:3.12-slim — базовый образ с Python 3.12</li><li>WORKDIR /app — рабочая директория внутри контейнера</li><li>COPY requirements.txt . — копирует файл зависимостей</li><li>RUN pip install — устанавливает зависимости</li><li>COPY . . — копирует остальной код</li><li>CMD — команда запуска приложения</li></ul><h3>Docker Compose</h3><p>Docker Compose — инструмент для запуска многоконтейнерных приложений. Реальные проекты редко состоят из одного сервиса: обычно есть веб-сервер, база данных, кеш, очередь сообщений. Compose описывает их все в одном файле compose.yml.</p><p>Пример — веб-приложение с PostgreSQL и Redis:</p><p>Одна команда docker compose up поднимает все три сервиса разом. Остановить — docker compose down.</p><h2>Как начать работу с Docker</h2><ol><li>Скачайте и установите <a href="https://docs.docker.com/get-docker/">Docker Desktop</a> (Windows, macOS) или Docker Engine (Linux)</li><li>Проверьте установку командой docker --version</li><li>Запустите первый контейнер</li></ol><p>Вот команда, которая запустит ваш первый контейнер:</p><p>Docker скачает образ hello-world из Docker Hub и запустит контейнер, который выведет приветственное сообщение. Весь процесс занимает несколько секунд.</p><p>Хотите попробовать что-то серьёзнее? Запустите Nginx-сервер одной командой:</p><p>Откройте http://localhost:8080 в браузере — там будет работающий веб-сервер. Флаг -d запускает контейнер в фоне, а -p 8080:80 пробрасывает порт.</p><p>Больше полезных команд для ежедневной работы — в нашей подборке <a href="https://tproger.ru/translations/top-10-docker-commands">10 команд Docker, которые должен знать каждый разработчик</a>.</p><h2>Docker и виртуальная машина — в чём разница</h2><p>На первый взгляд Docker похож на виртуальную машину (VM): и то, и другое изолирует приложения. Но под капотом — принципиально разные подходы.</p><p><b>Виртуальная машина</b> эмулирует целый компьютер: процессор, память, диск, сетевую карту. Внутри VM работает полноценная операционная система со своим ядром. Это тяжело — VM занимает гигабайты памяти и запускается минутами.</p><p><b>Контейнер Docker</b> использует ядро хост-системы и изолирует только процессы приложения. Это легко — контейнер весит мегабайты и стартует за секунды.</p><ul><li><b>Размер:</b> образ Docker — 50–500 МБ, VM — 5–20 ГБ</li><li><b>Запуск:</b> контейнер — 1–3 секунды, VM — 1–5 минут</li><li><b>Ресурсы:</b> на одном сервере работают десятки контейнеров, но лишь единицы VM</li><li><b>Изоляция:</b> VM — полная (отдельное ядро ОС), контейнер — на уровне процессов</li></ul><p>Когда использовать что: Docker подходит для микросервисов, CI/CD и быстрого развёртывания. VM — когда нужна полная изоляция на уровне ОС, например для запуска Windows-приложений на Linux-хосте.</p><h2>Заключение</h2><p>Docker изменил подход к разработке и развёртыванию приложений. Вместо многочасовой настройки серверов — одна команда. Вместо «у меня работает» — гарантированная воспроизводимость на любой машине.</p><p>Начните с малого: установите Docker, запустите docker run hello-world, а затем контейнеризируйте свой pet-проект. Когда освоите основы — переходите к Docker Compose для многосервисных приложений.</p><p>Docker — ключевой строительный блок современной DevOps-экосистемы. Контейнеры отлично сочетаются с <a href="https://tproger.ru/articles/chto-takoe-mikroservisy--arhitektura--plyusy-i-minusy--primery">микросервисной архитектурой</a> — каждый сервис упаковывается в отдельный образ и деплоится независимо. Когда сервисов становится много, ими начинает управлять <a href="https://tproger.ru/articles/chto-takoe-kubernetes--orkestraciya-kontejnerov-prostymi-slovami">Kubernetes</a>. А автоматизировать сборку и доставку образов поможет <a href="https://tproger.ru/articles/chto-takoe-ci-cd--nepreryvnaya-integraciya-i-dostavka">CI/CD</a> — связка Docker + CI/CD является стандартом современной разработки.</p><p>Если хотите понять, какое место Docker занимает во всей цепочке, посмотрите <a href="https://tproger.ru/articles/roadmap-devops-inzhenera-v-2026-godu--chto-uchit-i-v-kakom-poryadke">план обучения DevOps-инженера</a>. Там Docker показан как мост между Git, CI/CD, инфраструктурой и Kubernetes.</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>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>Docker открыл доступ к 1000+ защищенным DHI-образам, сделав их open-source</title>
      <link>https://tproger.ru/news/docker-otkryl-dostup-k-1000--zashhishhennym-dhi-obrazam--sdelav-ih-open-source</link>
      <comments>https://tproger.ru/news/docker-otkryl-dostup-k-1000--zashhishhennym-dhi-obrazam--sdelav-ih-open-source?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/docker-otkryl-dostup-k-1000--zashhishhennym-dhi-obrazam--sdelav-ih-open-source</guid>
      <description><![CDATA[<p>Docker сделал более 1000 Docker Hardened Images бесплатными и open-source. Защищенные базовые образы под Apache 2.0 теперь доступны всем разработчикам без подписки</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/docker-otkryl-dostup-k-1000--zashhishhennym-dhi-obrazam--sdelav-ih-open-source">Docker открыл доступ к 1000+ защищенным DHI-образам, сделав их open-source</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 22 Dec 2025 10:16:39 GMT</pubDate>
      <content:encoded><![CDATA[<p>Docker <a href="https://www.bleepingcomputer.com/news/security/docker-hardened-images-now-open-source-and-available-for-free/">открыл</a> бесплатный доступ к более чем тысяче <b>Docker Hardened Images (DHI)</b> и перевел их в статус open-source.</p><p>Все образы теперь доступны без подписки, но под лицензией <b>Apache 2.0</b>. Ими может воспользоваться любой разработчик — <b>без ограничений и скрытых условий</b>.</p><p>Ранее DHI были коммерческим продуктом. В октябре Docker уже делал шаг навстречу сообществу, открыв неограниченный доступ и предложив <b>30-дневный пробный период</b>.</p><p>Теперь компания пошла еще дальше и полностью <b>убрала платный барьер</b>.</p><h2>Что такое Docker Hardened Images</h2><p><b>Docker Hardened Images</b> — это минималистичные, защищенные базовые контейнерные образы, которые Docker представил в мае. Они предназначены для продакшена и поддерживаются самой компанией.</p><p>Образы собраны таким образом, чтобы не содержать в себе ничего лишнего. То есть в них нет ненужных компонентов, что позволяет достичь минимальной поверхности атаки. Более того, в DHI в принципе отсутствуют известные на момент публикации уязвимости.</p><h2>Безопасность без компромиссов</h2><p>Docker подчеркивает, что перевод DHI в open-source <b>не означает снижения уровня защиты</b>. Все образы остаются проверяемыми через SBOM, сборки соответствуют SLSA Build Level 3, а каждый образ сопровождается доказательством подлинности.</p><p>Идея в том, чтобы <b>безопасная база была доступна «с первого пула»</b>, а не становилась привилегией крупных компаний с отдельным бюджетом на безопасность.</p><h2>Что остается платным</h2><p>Единственное заметное отличие между бесплатной версией и коммерческой DHI Enterprise — сроки гарантированных исправлений.</p><p>Для платных клиентов Docker <b>гарантирует выпуск патчей для критических CVE в течение семи дней</b> после раскрытия уязвимости. В бесплатной версии исправления тоже будут, но без жесткого SLA.</p><p>В Docker заявляют, что для Enterprise-версии планируют сократить время реакции до одного дня или даже меньше. Платный тариф также позволяет глубже кастомизировать образы, настраивать рантайм и устанавливать дополнительные инструменты.</p>]]></content:encoded>
    </item>
    <item>
      <title>15 полезных команд терминала macOS для новичков</title>
      <link>https://tproger.ru/articles/15-poleznyh-komand-terminala-macos-dlya-novichkov</link>
      <comments>https://tproger.ru/articles/15-poleznyh-komand-terminala-macos-dlya-novichkov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/15-poleznyh-komand-terminala-macos-dlya-novichkov</guid>
      <description><![CDATA[<p>Команды терминала macOS для новичков: поиск файлов, очистка диска, управление процессами, скрытые настройки системы. Синтаксис и примеры для каждой команды.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/15-poleznyh-komand-terminala-macos-dlya-novichkov">15 полезных команд терминала macOS для новичков</a>»</p>]]></description>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Инструменты командной строки]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 13 Dec 2025 12:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Обзор базовых команд терминала macOS, которые пригодятся в повседневной работе.</p><p><b>Вы научитесь</b>:</p><ul><li>находить потерянные файлы,</li><li>проверять скорость интернета,</li><li>переименовывать сотни документов одной строкой,</li><li>убивать зависшие процессы без перезагрузки,</li><li>включать скрытые функции, которых нет в настройках.</li></ul><p>Каждую команду объясняем простым языком, показываем синтаксис и приводим примеры использования.</p><h2>Как найти любой файл за пару секунд</h2><p>Команда find ищет файлы и папки по критериям. Finder тоже умеет искать, но через терминал вы получаете точный контроль над параметрами поиска.</p><p>Синтаксис:</p><p>Попробуем найти все PDF-файлы в папке «Документы»:</p><p>Символ «~» обозначает вашу домашнюю папку. Звёздочка «*» заменяет любую последовательность символов, поэтому «*.pdf» означает «все файлы с расширением pdf».</p><p>Больше примеров:</p><p>Команда find пригодится, когда:</p><ul><li>Вы не помните, куда сохранили файл.</li><li>Нужно найти все скриншоты или документы определённого типа.</li><li>Хотите очистить диск от больших файлов, но не знаете, где они лежат.</li></ul><h2>Как узнать, что съедает место на диске</h2><p>Команда du (disk usage) показывает, сколько места занимают папки и файлы.</p><p>Самый полезный вариант использования:</p><p>Флаг «-s» выводит итоговый размер каждого элемента, «-h» форматирует числа в человекочитаемый вид (килобайты, мегабайты, гигабайты).</p><p>Результат выглядит так:</p><ul><li>1.8G — /Users/username/Downloads/video.mp4</li><li>46M — /Users/username/Downloads/archive.zip</li><li>7.9M — /Users/username/Downloads/document.pdf</li></ul><p>Найдём 10 самых больших папок в домашней директории:</p><p>Здесь команды объединены через символ «|». Результат du передаётся в «sort», который сортирует по размеру в обратном порядке, «head» оставляет только первые 10 строк.</p><p>Функции du пригодятся, когда:</p><ul><li>MacOS предупреждает о нехватке места на диске.</li><li>Хотите понять, какие папки разрослись за время использования.</li><li>Нужно решить, что удалить или перенести на внешний накопитель.</li></ul><h2>Как скачать файл по ссылке без браузера</h2><p>Команда curl загружает файлы из интернета напрямую в указанную папку. Это быстрее, чем открывать браузер, и удобнее для больших файлов.</p><p>Базовый синтаксис:</p><p>Флаг «-O» сохраняет файл с оригинальным именем в текущую папку.</p><p>Чтобы сохранить файл с другим именем:</p><p>Продолжить прерванную загрузку:</p><p>Флаг «-C -» проверяет, сколько уже скачано, и продолжает с того места, где загрузка прервалась.</p><p>Показать прогресс загрузки:</p><p>Флаг «-#» отображает прогресс-бар вместо технической информации.</p><p>Перед загрузкой перейдите в нужную папку командой cd /путь/к/папке, иначе файл сохранится в текущей директории (по умолчанию — домашняя папка).</p><h2>Как быстро просмотреть содержимое текстового файла</h2><p>Команда cat показывает весь файл целиком.</p><p>Текст выводится прямо в терминал. Подходит для коротких файлов.</p><p>Команда head показывает начало файла.</p><p>Число после «-» задаёт количество строк. В данном случае head покажет первые 20 строк.</p><p>Команда tail выводит конец файла:</p><p>Так удобнее просматривать логи, где свежие записи добавляются в конец файла.</p><p>Команда less запускает постраничный просмотр:</p><p>Навигация:</p><ul><li>пробел — следующая страница;</li><li>b — предыдущая страница;</li><li>/слово — поиск по файлу;</li><li>q — выход.</li></ul><h2>Как изменить скрытые настройки macOS</h2><p>Команда defaults управляет системными настройками macOS. Включая те, которых нет в стандартных «Настройках». Apple хранит параметры в файлах формата .plist, и defaults редактирует их напрямую.</p><p>Показать скрытые файлы в Finder:</p><p>Строка «killall Finder» перезапускает Finder, чтобы изменения вступили в силу.</p><p>Изменить формат скриншотов с PNG на JPG:</p><p>JPG-файлы занимают меньше места, что удобно, если вы регулярно делаете скриншоты.</p><p>Изменить папку сохранения скриншотов:</p><p>Теперь скриншоты перестанут захламлять рабочий стол.</p><p>Ускорить анимацию Dock:</p><p>Первая команда убирает задержку перед появлением Dock, вторая ускоряет саму анимацию.</p><p>Вернуть настройку к значению по умолчанию:</p><p>Команда defaults пригодится, если:</p><ul><li>Хотите настроить систему под себя, но в «Настройках» нет нужной опции.</li><li>Раздражают стандартные анимации или поведение интерфейса.</li><li>Нужно оптимизировать рабочее окружение.</li></ul><p>Перед изменением настроек запишите текущее значение. Посмотреть его можно командой «defaults read». Например, «defaults read com.apple.screencapture type».</p><h2>Как управлять процессами и освобождать ресурсы системы</h2><p>Команда top показывает запущенные процессы в реальном времени: какие программы потребляют процессор и память.</p><p>Запуск:</p><p>Экран обновляется каждые несколько секунд. Вы увидите таблицу с колонками:</p><ul><li>PID — идентификатор процесса;</li><li>COMMAND — название программы;</li><li>%CPU — процент использования процессора;</li><li>MEM — использование памяти.</li></ul><p>Управление внутри:</p><ul><li>q — выход;</li><li>o cpu — сортировка по использованию процессора;</li><li>o mem — сортировка по использованию памяти.</li></ul><p>Чтобы завершить зависший процесс, найдите PID процесса в top или через команду «pgrep -l "название_программы"».</p><p>Затем завершите процесс:</p><p>Если процесс не реагирует на обычный kill:</p><p>Флаг «-9» принудительно завершает процесс без возможности сохранить данные.</p><p>Когда пригодится:</p><ul><li>Вентиляторы Mac работают на полную, и непонятно, какая программа нагружает систему.</li><li>Приложение зависло и не закрывается обычным способом.</li><li>Хотите понять, куда уходят ресурсы компьютера.</li></ul><p>Команда htop показывает ту же информацию в более удобном виде, но её нужно установить отдельно через Homebrew.</p><h2>Как упростить ввод длинных команд</h2><p>Терминал macOS поддерживает <b>алиасы</b> — короткие команды, которые заменяют длинные.</p><p>Создать временный алиас (работает до закрытия терминала):</p><p>Теперь команда «ll» выводит содержимое папки в подробном формате, включая скрытые файлы.</p><p>Чтобы создать постоянный алиас, откройте файл конфигурации Zsh:</p><p>Добавьте строку с алиасом в конец файла. Сохраните файл (Ctrl+O, затем Enter) и выйдите (Ctrl+X).</p><p>Примените изменения:</p><p>Примеры полезных алиасов:</p><p>Команда alias пригодится, если вы часто выполняете одни и те же длинные команды или хотите создать свои «горячие клавиши» для терминала.</p><h2>Как узнать информацию о своём Mac одной командой</h2><p>Чтобы выяснить, какой процессор стоит в Mac, сколько оперативной памяти установлено или какая версия macOS запущена, обычно открывают меню «Об этом Mac». Терминал даёт гораздо больше информации и делает это быстрее.</p><p>Команда system_profiler выводит подробные сведения о железе и программном обеспечении. Для обзора основных характеристик введите:</p><p>Терминал покажет модель Mac, идентификатор модели, название процессора, количество ядер, объём оперативной памяти и серийный номер. Информация пригодится при обращении в поддержку Apple или при продаже устройства.</p><p>Для просмотра информации о дисках:</p><p>Отобразится название каждого тома, файловая система, общий объём и свободное место.</p><p>Если хотите узнать всё о сетевых интерфейсах:</p><p>Команда выведет список всех Wi-Fi, Ethernet, Bluetooth PAN. Для каждого интерфейса отобразится IP-адрес, MAC-адрес и статус подключения.</p><p>Полный отчёт о системе:</p><p>Команда сохраняет подробный отчёт в текстовый файл на рабочем столе. Файл содержит информацию обо всём: от установленных приложений до подключённых USB-устройств.</p><h2>Как проверить скорость интернета и сетевые соединения</h2><p>Команда ping отправляет тестовые пакеты на указанный адрес и измеряет время ответа:</p><p>Терминал начнёт отправлять запросы и показывать время отклика в миллисекундах. Нормальный пинг до крупных сайтов — 20-100 мс.</p><p>Чтобы остановить ping, нажмите «Ctrl+ C». Для отправки определённого количества запросов добавьте флаг «-c»:</p><p>Команда отправит ровно 10 пакетов и покажет статистику: минимальное, среднее и максимальное время отклика с процентами потерянных пакетов.</p><p>В macOS Monterey и новее появилась встроенная утилита для измерения скорости интернета:</p><p>Команда измерит скорость загрузки и выгрузки, покажет показатель RPM (Round-trips Per Minute) — он отражает отзывчивость соединения. Тест занимает около 15-20 секунд.</p><h2>Как очистить кэш DNS при проблемах с сайтами</h2><p>Иногда сайт не открывается, хотя интернет работает нормально. Или сайт переехал на другой сервер, но браузер упорно показывает старую версию. Причина в кэше DNS, для очистки используйте комбинацию двух команд:</p><p>Система запросит пароль администратора. После выполнения кэш очистится, и macOS начнёт заново запрашивать адреса сайтов у DNS-серверов.</p><p>Когда это помогает:</p><ul><li>Сайт не открывается, хотя у других пользователей работает.</li><li>После смены DNS-серверов в настройках сети.</li><li>При разработке, когда переключаетесь между локальным и рабочим сервером.</li><li>Когда сайт переехал на новый хостинг, но отображается старая версию.</li></ul><p>Проверить текущий DNS-кэш нельзя — Apple не предоставила такой команды. Очистка занимает секунду и ничего не ломает, поэтому при проблемах с доступом к сайтам стоит попробовать.</p><h2>Как создавать и распаковывать архивы</h2><p>Finder умеет создавать ZIP-архивы через контекстное меню. Терминал даёт больше контроля: выбор степени сжатия, исключение определённых файлов, работа с разными форматами архивов.</p><p>Создание ZIP-архива из папки:</p><p>Флаг «-r» означает рекурсивную обработку — в архив попадут все вложенные папки и файлы. Без этого флага заархивируется только сама папка.</p><p>Создание архива с паролем:</p><p>Флаг «-e» включает шифрование. Терминал дважды попросит ввести пароль. Без этого пароля распаковать архив не получится.</p><p>Исключение определённых файлов:</p><p>Команда создаст архив проекта, но пропустит служебные файлы .DS_Store и папку node_modules.</p><p>Распаковка ZIP-архива:</p><p>Архив распакуется в текущую директорию. Для распаковки в конкретную папку:</p><h2>Как узнать историю введённых команд и повторить их</h2><p>После нескольких дней работы с терминалом накапливается история команд. Вместо того чтобы вспоминать и заново набирать длинную строку, её можно найти в истории.</p><p>Просмотр последних команд:</p><p>Терминал выведет пронумерованный список всех введённых команд. По умолчанию Zsh хранит 1000 последних команд.</p><p>Для поиска конкретной команды используйте grep:</p><p>Эта команда покажет только строки, содержащие слово «docker».</p><p>Повторение последней команды:</p><p>Два восклицательных знака выполнят предыдущую команду.</p><p>Очистка истории (если вводили что-то конфиденциальное):</p><p>Для полной очистки, включая файл истории:</p><h2>Как переименовать много файлов одной командой</h2><p>Переименование одного файла — это стандартная задача, для неё необязательно открывать терминал. Зато в ситуации, когда нужно переименовать 500 фотографий или добавить префикс к сотне документов, использование Finder превращается в пытку.</p><p>Базовое переименование одного файла через терминал:</p><p>Команда mv (move) перемещает файл. Если указать тот же каталог, но другое имя — файл переименуется.</p><p>Массовое переименование с добавлением префикса:</p><p>Цикл пройдёт по всем JPG-файлам в текущей папке и добавит к каждому префикс «vacation_». Файл «IMG_001.jpg» станет «vacation_IMG_001.jpg».</p><p>Замена части имени во всех файлах:</p><p>Конструкция ${file/IMG/Photo} заменяет «IMG» на «Photo» в имени файла. Файл «IMG_001.jpg» станет «Photo_001.jpg».</p><p>Добавление даты к имени файла:</p><p>Каждый PDF-файл получит префикс с текущей датой в формате «2025-01-15_».</p><p>Изменение расширения файлов:</p><p>Конструкция ${file%.jpeg} удаляет расширение .jpeg, а затем добавляется .jpg.</p><h2>Как выключить или перезагрузить Mac из терминала</h2><p>Немедленная перезагрузка:</p><p>Система запросит пароль и сразу начнёт перезагрузку. Несохранённые данные в приложениях будут потеряны.</p><p>Перезагрузка через определённое время:</p><p>Mac перезагрузится через 5 минут. Таймер даст время сохранить работу в других приложениях.</p><p>Выключение Mac:</p><p>Флаг «-h» означает «halt» — полное выключение.</p><p>Выключение в определённое время:</p><p>Mac выключится в 23:00.</p><p>Отмена запланированного выключения:</p><p>Если передумали, команда отменит запланированное выключение.</p><p>Усыпление Mac:</p><p>Команда не требует sudo и мгновенно переводит Mac в режим сна.</p><h2>Как открыть файл или папку в нужном приложении</h2><p>Команда open связывает терминал с графическим интерфейсом macOS.</p><p>Открытие текущей папки в Finder:</p><p>Точка означает текущую директорию. Команда пригодится, когда вы перешли в нужную папку через терминал и хотите продолжить работу в Finder.</p><p>Открытие конкретной папки:</p><p>Finder откроет папку «Загрузки».</p><p>Открытие файла в приложении по умолчанию:</p><p>PDF откроется в программе, назначенной по умолчанию для этого типа файлов (обычно «Просмотр»).</p><p>Открытие файла в конкретном приложении:</p><p>Флаг «-a» указывает приложение. Файл project.py откроется в VS Code, даже если по умолчанию Python-файлы открываются в другом редакторе.</p><p>Открытие нескольких файлов:</p><p>Все JPG-файлы в текущей папке откроются в приложении для просмотра изображений.</p><p>Показать файл в Finder (не открывая):</p><p>Флаг «-R» откроет Finder и выделит указанный файл. Полезно, чтобы определить расположение файла.</p><h2>Итоги</h2><p>Начните с команд find, du и cat. Они решают повседневные задачи: найти потерянный файл, выяснить, что занимает место на диске, быстро просмотреть содержимое документа.</p><p>После освоения базы переходите к связкам команд. Например, find находит файлы, а du показывает их размер — вместе они помогают очистить диск.</p><p>Для специфичных задач используйте:</p><ul><li>ping и networkQuality — диагностируют проблемы с интернетом;</li><li>top — выявляет программы, загружающие процессор;</li><li>kill — завершает зависшие процессы;</li><li>defaults — настраивает скрытые параметры интерфейса;</li><li>цикл for с командой mv — переименовывает сотни файлов за секунды;</li><li>history возвращает ранее введённые строки.</li></ul><p>Сохраните эту подборку и обращайтесь к ней по мере необходимости. Через пару недель регулярного использования команды запомнятся сами.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как подключить VSCode к GitLab, Docker, Jupyter</title>
      <link>https://tproger.ru/articles/kak-podklyuchit-vscode-k-gitlab--docker--jupyter</link>
      <comments>https://tproger.ru/articles/kak-podklyuchit-vscode-k-gitlab--docker--jupyter?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-podklyuchit-vscode-k-gitlab--docker--jupyter</guid>
      <description><![CDATA[<p>Пошаговая инструкция по интеграции VSCode с GitLab, Docker и Jupyter. Как получить токен доступа, настроить Dev Container, выбрать ядро для ноутбука и объединить все инструменты разработки в одном редакторе.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-podklyuchit-vscode-k-gitlab--docker--jupyter">Как подключить VSCode к GitLab, Docker, Jupyter</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 12 Nov 2025 10:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчики каждый день открывают VSCode и начинают писать код. Но редактор сам по себе — это просто текстовый блокнот с подсветкой синтаксиса.</p><p>Продуктивность разработчика повышается, когда к VSCode подключены инструменты для командной работы, контейнеризации и анализа данных. В статье по шагам разобрали, как интегрировать VSCode с GitLab, Docker и Jupyter.</p><h2>Зачем всё это подключать</h2><p>VSCode из коробки умеет работать с <b>Git</b>. Но когда ваш репозиторий лежит на GitLab, хочется создавать merge request прямо из редактора, просматривать pipeline, работать с issues.</p><p><b>Docker </b>решает проблему «у меня работает, а у тебя нет». Вы пишете код в контейнере с одними версиями библиотек, и любой член команды запустит точно такое же окружение.</p><p><b>Jupyter </b>традиционно запускают в браузере. Но переключаться между браузером и редактором неудобно. VSCode умеет работать напрямую — редактируете код, запускаете ячейки, смотрите графики в одном окне.</p><h2>Как подключить VSCode к GitLab</h2><h2>Шаг 1. Устанавливаем расширение</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-11-05/0971c3c4-ccd5-4c1a-8642-2895bb77ba7d.jpg" alt="" /></figure><p>Откройте VSCode и нажмите Ctrl+Shift+X. В поиске введите «GitLab Workflow». Установите официальное расширение. После установки в левой панели появится иконка GitLab.</p><h2>Шаг 2. Получаем токен доступа</h2><p>Расширению нужен способ общаться с вашим GitLab-сервером. Для этого создадим персональный токен:</p><ol><li>Зайдите в GitLab через браузер.</li><li>Кликните на аватар &gt;&gt; Settings &gt;&gt; Access Tokens.</li><li>Придумайте название токена.</li><li>Выберите срок действия.</li><li>Отметьте галочками права доступа: api, read_user, read_repository, write_repository.</li><li>Нажмите «Create personal access token».</li><li>Скопируйте токен — он покажется только один раз.</li></ol><h2>Шаг 3. Настраиваем расширение</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-11-05/b05bc74a-9bf9-4150-b228-b8065918ca18.jpg" alt="" /></figure><p>Вернитесь в VSCode. Нажмите Ctrl+Shift+P и введите «GitLab: Add Account». Расширение попросит два параметра:</p><ul><li><b>GitLab instance URL</b> — адрес вашего GitLab (например, https://gitlab.com или адрес корпоративного сервера).</li><li><b>Personal Access Token</b> — токен, который только что создали.</li></ul><p>Вставьте токен и нажмите Enter. Если всё правильно, в статус-баре внизу появится ваше имя пользователя GitLab.</p><h2>Шаг 4. Работаем с проектом</h2><p>Попробуем клонировать проект. Нажмите Ctrl+Shift+P и выберите «GitLab: Clone from GitLab». Расширение покажет список доступных проектов. Выберите нужный, укажите папку для клонирования.</p><p>Теперь вам доступны функции Git:</p><ul><li><b>Pipeline </b>— в боковой панели GitLab видны все запущенные сборки, их статусы и логи.</li><li><b>Issues </b>— создавайте, редактируйте и закрывайте задачи прямо из редактора.</li><li><b>Merge requests</b> — посмотрите список MR, оставьте комментарии к коду, одобрите изменения.</li><li><b>Snippets </b>— сохраняйте фрагменты кода для повторного использования.</li></ul><h2>Как подключить VSCode к Docker</h2><p>Редактор умеет запускать код прямо внутри контейнера. Вы редактируете файлы, а выполняются они в изолированной среде с выбранными настройками.</p><h2>Шаг 1. Подготовка</h2><p>Установите Docker Desktop с <a href="https://www.docker.com/products/docker-desktop/">официального сайта</a>. После установки убедитесь, что Docker запущен — в системном трее должна появиться иконка кита.</p><p>В VSCode установите два расширения:</p><ul><li>Docker.</li><li>Dev Containers.</li></ul><h2>Шаг 2. Создаём Dockerfile</h2><p>В корне проекта создайте файл Dockerfile. Пример для Python-проекта:</p><p>Этот файл говорит Docker:</p><ol><li>Возьми базовый образ Python 3.11.</li><li>Создай рабочую директорию /app.</li><li>Скопируй и установи зависимости.</li><li>Скопируй весь код проекта.</li><li>При запуске выполни команду python main.py.</li></ol><h2>Шаг 3. Настраиваем Dev Container</h2><p>Создайте папку .devcontainer в корне проекта. Внутри создайте файл devcontainer.json:</p><p>Конфигурация использует ваш Dockerfile для сборки контейнера. Она автоматически устанавливает Python-расширения внутри контейнера, пробрасывает порт 8000 (если у вас веб-приложение) и выполняет команду после создания контейнера.</p><h2>Шаг 4. Запускаем разработку в контейнере</h2><p>Нажмите Ctrl+Shift+P и выберите «Dev Containers: Reopen in Container». Редактор соберёт Docker-образ по вашему Dockerfile, запустит контейнер, подключится к нему и откроет ваш проект уже внутри контейнера.</p><p>Теперь весь код выполняется в изолированной среде. Терминал в VSCode работает внутри контейнера. Расширения устанавливаются в контейнер, отладчик запускает код там же.</p><h2>Как подключить VSCode к Jupyter</h2><p>В классическом интерфейсе нет нормального автодополнения кода, сложно работать с Git, неудобно рефакторить код и нет полноценной отладки. Плагины VSCode решают эти проблемы.</p><h2>Шаг 1. Установка</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-11-05/eb48ea48-285c-4f04-90c2-e20932174fe9.jpg" alt="" /></figure><p>Установите расширение «Jupyter» от Microsoft. Оно автоматически подтянет все необходимые зависимости.</p><p>В терминале установите Jupyter и ipykernel:</p><h2>Шаг 2. Создаём первый ноутбук</h2><p>Создайте файл с расширением .ipynb или нажмите Ctrl+Shift+P &gt;&gt; «Create: New Jupyter Notebook».</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-11-05/f956c803-cb87-4a4e-b849-7f4b956fb2e8.jpg" alt="" /></figure><p>VSCode откроет интерфейс ноутбука. Вверху вы увидите панель инструментов с выбором ядра, кнопки запуска и добавления ячеек.</p><h2>Шаг 3. Выбираем ядро</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-11-05/d66667d6-f595-494f-a0ef-a9480b1b9da8.jpg" alt="" /></figure><p>Кликните на «Select Kernel» в правом верхнем углу. VSCode покажет список доступных интерпретаторов:</p><ul><li>Локальные Python-окружения.</li><li>Виртуальные окружения (venv, conda).</li><li>Docker-контейнеры (если настроены).</li><li>Удалённые Jupyter-серверы.</li></ul><p>Выберите нужное окружение. VSCode запомнит выбор для этого ноутбука.</p><h2>Шаг 4. Пишем и выполняем код</h2><p>В ячейке напишите код:</p><p>Нажмите Shift+Enter для выполнения ячейки. График отобразится прямо под кодом.</p><p>Для Python-файлов можно включить интерактивный режим. Добавьте комментарий <i># %%</i> в .py файл:</p><p>VSCode покажет кнопки «Run Cell» над каждым блоком. Теперь можно выполнять код частям.</p><h2>Что в итоге</h2><p>Первая настройка VSCode с GitLab, Docker и Jupyter занимает 30-40 минут. В итоге вы получаете единое рабочее пространство для ваших задач разработки.</p><p>Начните с GitLab и научитесь создавать merge requests из редактора. Потом добавьте Docker для одного проекта. Когда освоитесь, подключите Jupyter для работы с данными. Инструменты решают разные задачи, а VSCode объединяет их функции в одном интерфейсе.</p><p>Возьмите проект и последовательно подключите каждый инструмент. Через неделю удивитесь, как раньше работали без этой связки. Код пишется быстрее, ошибок меньше, а переключений между окнами почти нет.</p><p><i>Если что-то непонятно или не получается настроить — пишите в комментариях, разберёмся вместе!</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Быстрый старт StarRocks Lakehouse — Apache Iceberg</title>
      <link>https://tproger.ru/articles/bystryj-start-starrocks-lakehouse---apache-iceberg</link>
      <comments>https://tproger.ru/articles/bystryj-start-starrocks-lakehouse---apache-iceberg?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Li Free]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bystryj-start-starrocks-lakehouse---apache-iceberg</guid>
      <description><![CDATA[<p>Пошаговый старт: StarRocks с Apache Iceberg, MinIO и Spark — Docker Compose, Iceberg REST Catalog, импорт Parquet и быстрые запросы без миграции данных.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bystryj-start-starrocks-lakehouse---apache-iceberg">Быстрый старт StarRocks Lakehouse — Apache Iceberg</a>»</p>]]></description>
      <category><![CDATA[Архитектура ПО]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Архитектура приложений]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Nov 2025 10:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Предисловие</h2><p>Это краткое руководство поможет быстро разобраться с Lakehouse‑архитектурой (лейкхаус): ключевые особенности, сильные стороны, типовые сценарии, а также как быстро собрать решение на базе StarRocks. В конце вы найдёте практические шаги и реальные кейсы использования StarRocks Lakehouse.</p><p>Ссылки на официальные материалы:</p><ul><li>Подробный туториал StarRocks + Iceberg: <a href="https://docs.starrocks.io/en/docs/quick_start/iceberg/">https://docs.starrocks.io/en/docs/quick_start/iceberg/</a></li><li>Iceberg Spark Quickstart: <a href="https://iceberg.apache.org/spark-quickstart/">https://iceberg.apache.org/spark-quickstart/</a></li><li>Видео‑демо: <a href="https://www.bilibili.com/video/BV1ET42167TY/?spm_id_from=333.999.0.0&amp;vd_source=1cb452610138142d1300dd37a6162a88">https://www.bilibili.com/video/BV1ET42167TY/?spm_id_from=333.999.0.0&amp;vd_source=1cb452610138142d1300dd37a6162a88</a></li></ul><h2>Введение в Apache Iceberg</h2><p>Apache Iceberg — открытый табличный формат, созданный для масштабных и сложных наборов данных (до ПБ и выше). Изначально разработан в Netflix для управления большим числом таблиц, открыт в инкубаторе Apache в 2018 году и получил статус верхнеуровневого проекта в 2020 году.</p><p>Iceberg располагается между вычислительными движками (например, Apache Flink и Apache Spark) и форматами хранения (ORC, Parquet, Avro), выступая прослойкой, которая абстрагирует сложность низкоуровневых форматов и предоставляет унифицированные табличные семантики. Такой дизайн обеспечивает гибкость операций и управления схемой в разных средах без привязки к конкретному движку хранения, с масштабированием в HDFS, S3, OSS и т. п.</p><h2>Архитектура и ключевые компоненты</h2><figure><img src="https://media.tproger.ru/user-uploads/133686/2025-10-22/dbb0db40-c607-4f1a-b931-dc736649376d.png" alt="" /><figcaption>Архитектура и ключевые компоненты</figcaption></figure><p>Архитектура Iceberg состоит из трёх слоёв:</p><ul><li>Слой данных: фактические файлы данных (Parquet, ORC и др.).</li><li>Слой метаданных: многоуровневая структура со схемой таблицы и индексами файлов данных.</li><li>Слой каталога (Catalog): указатели на местоположения файлов метаданных; доступны реализации вроде HadoopCatalog и HiveCatalog.</li></ul><p>Управление метаданными включает три ключевых сущности:</p><ul><li>Файл метаданных (Metadata File): хранит текущую версию метаданных, включая все снимки.</li><li>Снимок (Snapshot): отражает состояние таблицы после конкретной операции (коммита); новый коммит — новый снимок.</li><li>Манифест (Manifest): перечисляет файлы данных, связанные со снимком, задаёт целостное представление организации данных и ускоряет поиск/модификации.</li></ul><p>Цель Iceberg — отслеживать эволюцию таблицы во времени с помощью снимков, которые фиксируют полный набор файлов данных на произвольный момент. Каждый апдейт создаёт новый снимок, обеспечивая согласованность и упрощая историческую аналитику и инкрементальное чтение.</p><h2>Ключевые возможности</h2><ul><li>Скрытое партиционирование (Hidden partitioning): автоматическое разбиение по времени и другим функциям без необходимости знать детали партиций.</li><li>Эволюция схемы (Schema evolution): безопасные изменения структуры таблицы без переписывания данных, с историей изменений.</li><li>Эволюция партиционирования (Partition evolution): смена стратегии партиционирования без воздействия на исторические данные; новые данные следуют новой стратегии.</li><li>Многоверсионный контроль (MVCC): записи не блокируют чтения; управление через Manifest‑файлы.</li><li>ACID‑транзакции: оптимистичная блокировка для конкурентных записей, атомарность операций.</li><li>Обновления на уровне строк: в v1 — Copy‑on‑Write (COW), в v2 — Merge‑on‑Read (MOR), поддержка position deletes и equality deletes для логических обновлений.</li></ul><h2>Преимущества Apache Iceberg</h2><ul><li>Широкая поддержка движков вычислений: Spark, Flink, Hive и др.; есть нативный Java API.</li><li>Гибкая организация данных: работает для потоковых инкрементальных и пакетных сценариев на единой модели хранения (HDFS, Apache Ozone и др.); поддерживает Parquet/ORC/Avro; скрытое партиционирование и эволюция партиций устраняют «островки данных».</li><li>Оптимизированная загрузка данных (ingest): ACID делает новые данные мгновенно видимыми без влияния на текущие задачи; upsert/merge на уровне строк сокращают задержки.</li><li>Инкрементальное чтение: встроенная интеграция со Spark Structured Streaming и Flink Table Source; поддержка исторических версий повышает надёжность и аудитируемость.</li></ul><h2>Типовые сценарии использования</h2><ul><li>Импорт и запросы в реальном времени: непрерывная запись в таблицы Iceberg и мгновенная аналитика через Hive/Spark/Presto/Iceberg. ACID обеспечивает изоляцию и отсутствие «грязных» данных.</li><li>Удаление/обновление данных: операции на уровне файлов вместо полной переработки таблицы; например, DELETE FROM test_table WHERE id &gt; 10.</li><li>Контроль качества данных: валидация схемы при загрузке; изменения схемы через DDL Spark SQL без переэкспорта исторических данных; ACID изолирует изменения схемы от текущих чтений.</li><li>ML в реальном времени: конвейер подготовки данных (очистка/трансформации/feature engineering) превращается в надёжный поток; поддержка нативного Python SDK.</li></ul><h2>Ускорение запросов StarRocks × Iceberg</h2><p>StarRocks эффективно анализирует как внутренние данные, так и данные в озере, поддерживает внешний каталог Iceberg (External Catalog) и позволяет запрашивать таблицы Iceberg без миграции данных. Поддерживаются Iceberg v1 и v2 (чтение/запись).</p><p>Оптимизации:</p><ul><li>Метаданные: кэш метаданных снижает избыточный I/O; распределённое планирование заданий ускоряет параллельное чтение/фильтрацию Manifest‑файлов; Manifest Cache уменьшает накладные расходы парсинга.</li><li>План выполнения: стоимостной оптимизатор (CBO) использует статистики; StarRocks собирает статистики по внешним таблицам (включая гистограммы и сложные типы).</li><li>Форматы файлов: оптимизации для Parquet/ORC снижают объём сканирования и I/O.</li><li>Снятие различий между внешними и внутренними таблицами: кэш данных (Data Cache) снижает удалённый I/O; «умные» материализованные представления обеспечивают переписывание запросов и инкрементальное обновление.</li><li>Интеграция с экосистемой: поддержка чтения/записи Iceberg упрощает обратную выгрузку в озеро и лёгкую переработку данных, улучшая производительность запросов и единое управление.</li></ul><h2>Быстрый старт</h2><p>В рамках руководства вы:</p><ul><li>Развёрнёте объектное хранилище, Apache Spark, Iceberg Catalog и StarRocks с помощью Docker Compose.</li><li>Импортируете данные в озеро Iceberg.</li><li>Настроите StarRocks для доступа к Iceberg Catalog.</li><li>Выполните запросы к данным озера из StarRocks.</li></ul><p>Подробный учебник: <a href="https://docs.starrocks.io/en/docs/quick_start/iceberg/">https://docs.starrocks.io/en/docs/quick_start/iceberg/</a></p><p>Iceberg Spark Quickstart: <a href="https://iceberg.apache.org/spark-quickstart/">https://iceberg.apache.org/spark-quickstart/</a></p><h2>Развёртывание Iceberg</h2><p>Чтобы добавить Iceberg в существующий Spark, достаточно подключить соответствующий JAR в параметры запуска. В данном руководстве используется контейнер tabulario/spark-iceberg — Spark уже с интегрированным Iceberg, что позволяет сразу работать в среде PySpark.</p><h2>Окружение (Docker Compose)</h2><p>Используется шесть контейнеров:</p><ul><li>starrocks-fe: метаданные, подключения клиентов, планирование и диспетчеризация запросов.</li><li>starrocks-be: выполнение планов запросов.</li><li>rest: сервис метаданных — Iceberg Catalog (REST).</li><li>spark-iceberg: окружение Apache Spark для PySpark.</li><li>mc: MinIO Client.</li><li>minio: объектное хранилище MinIO.</li></ul><p>Docker Compose файл (скачайте из репозитория StarRocks) настраивает:</p><ul><li>Iceberg REST‑каталог (http://iceberg-rest:8181) с CATALOG_WAREHOUSE=s3://warehouse/, S3FileIO и CATALOG_S3_ENDPOINT=http://minio:9000.</li><li>MinIO с публичной политикой на bucket warehouse.</li><li>Переменные доступа S3‑совместимого хранилища: AWS_ACCESS_KEY_ID=admin, AWS_SECRET_ACCESS_KEY=password.</li></ul><h2>Загрузка Docker Compose и набора данных</h2><h2>Запуск окружения в Docker</h2><p>Подсказка: команды docker compose выполняйте из каталога, где лежит docker-compose.yml.</p><p>Дождитесь, когда starrocks-fe и starrocks-be перейдут в состояние healthy (обычно ~30 секунд).</p><h2>Работа с PySpark и Iceberg</h2><p>Скопируйте набор данных в контейнер spark-iceberg:</p><p>Запустите PySpark:</p><p>Загрузите данные в DataFrame и проверьте схему/выборку:</p><p>Создайте таблицу Iceberg и запишите в неё данные:</p><p>Примечание: таблица будет доступна через внешний каталог StarRocks (External Catalog) на следующем шаге.</p><h2>Подключение к StarRocks и настройка доступа к Iceberg Catalog</h2><p>Подключитесь к StarRocks из MySQL‑клиента (из контейнера FE):</p><p>Создайте внешний каталог iceberg в StarRocks:</p><p>Проверьте каталоги, переключитесь и посмотрите БД/таблицы:</p><p>Замечание по типам: в Spark</p><p>будет отображаться в StarRocks как</p><p>(и возможны другие конверсии типов).</p><h2>Запросы к таблицам Iceberg из StarRocks</h2><p>Время приёма заказа (первые 10 строк):</p><p>Пиковые часы по количеству поездок:</p><h2>Видео‑демонстрация</h2><p>Демонстрация StarRocks + Iceberg + MinIO (EN)<a href="https://www.bilibili.com/video/BV1ET42167TY/?spm_id_from=333.999.0.0&amp;vd_source=1cb452610138142d1300dd37a6162a88">https://www.bilibili.com/video/BV1ET42167TY/?spm_id_from=333.999.0.0&amp;vd_source=1cb452610138142d1300dd37a6162a88</a></p><h2>Расширенные материалы</h2><ul><li>Apache Iceberg — Spark Quickstart: <a href="https://iceberg.apache.org/spark-quickstart/">https://iceberg.apache.org/spark-quickstart/</a></li><li>Apache Iceberg — Catalogs: <a href="https://iceberg.apache.org/docs/latest/catalogs/">https://iceberg.apache.org/docs/latest/catalogs/</a></li><li>Apache Iceberg — REST Catalog: <a href="https://iceberg.apache.org/docs/latest/rest-catalog/">https://iceberg.apache.org/docs/latest/rest-catalog/</a></li><li>StarRocks — Quick Start с Iceberg: <a href="https://docs.starrocks.io/en/docs/quick_start/iceberg/">https://docs.starrocks.io/en/docs/quick_start/iceberg/</a></li><li>StarRocks — External Catalog (Iceberg): <a href="https://docs.starrocks.io/en/docs/data_source/catalog/iceberg_catalog/">https://docs.starrocks.io/en/docs/data_source/catalog/iceberg_catalog/</a></li></ul><h2>Примечания по терминологии</h2><ul><li>Catalog → каталог; External Catalog → внешний каталог (External Catalog).</li><li>Metadata File / Snapshot / Manifest — используем русские эквиваленты с английскими терминами в скобках при первом упоминании.</li><li>Hidden partitioning → скрытое партиционирование.</li><li>Schema/Partition evolution → эволюция схемы/партиционирования.</li><li>MVCC, ACID, CBO, Data Cache, Manifest Cache, Copy‑on‑Write (COW), Merge‑on‑Read (MOR), position/equality deletes — используем английские аббревиатуры/термины, так как это общепринятая практика в индустрии.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>5 вещей, которые должен знать фронтенд-разработчик про Docker</title>
      <link>https://tproger.ru/articles/5-veshhej--kotorye-dolzhen-znat-frontend-razrabotchik-pro-docker</link>
      <comments>https://tproger.ru/articles/5-veshhej--kotorye-dolzhen-znat-frontend-razrabotchik-pro-docker?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Державин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-veshhej--kotorye-dolzhen-znat-frontend-razrabotchik-pro-docker</guid>
      <description><![CDATA[<p>Зачем фронтенд-разработчику Docker? Практическое руководство: основные команды, создание Dockerfile, подключение к бэкенду, работа с реестрами и запуск в продакшене. Повысите свой уровень с Middle до Senior.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-veshhej--kotorye-dolzhen-znat-frontend-razrabotchik-pro-docker">5 вещей, которые должен знать фронтенд-разработчик про Docker</a>»</p>]]></description>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 30 Oct 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Каждый день граница между фронтендом и бэкендом размывается, поэтому компании всё чаще ищут универсальных разработчиков, способных не только написать код, но и обеспечить стабильную работу приложения на каждом этапе релизного цикла, вплоть до запуска в продакшене.</p><p><i>Много кто пропустил момент, когда Docker стал стандартом в индустрии, а контейнеризация перестала быть приятным опциональным бонусом при найме опытного разработчика.</i></p><p>Сегодня причислять себя к Senior-грейду без знания основ контейнеризации — неоправданно.</p><p>Не будем лукавить — также компании любят экономить на сотрудниках, размывая отвественность из смежных областей на фронтенд-разработчика, который находится где-то посредине релизного цикла.</p><p>Давайте разбираться, что должен знать фронтенд-разработчик про Docker.</p><h2>Что такое Docker?</h2><p><i>Docker</i> — это программа для создания, развёртывания и управления приложениями в контейнерах. Контейнер создаётся на основе образа, который описан в <i>Dockerfile</i>.</p><p><i>Dockerfile</i> — по сути, инструкция для создания контейнера. В нём описывается окружение, зависимости и команды для запуска приложений внутри, например, прокси-сервера или микросервиса авторизации.</p><h3>Какие проблемы решает Docker во фронтенде?</h3><p>В небольшом проекте работа с web-приложением сводится к использованию четырёх команд: start, build, test, deploy.</p><p>А вот запуск веб-приложения в большом и устоявшемся коммерческом проекте выглядит так:</p><ul><li>Запусти Nginx, чтобы отдать клиент.</li><li>Подними (а перед этим установи) бекенд на Go и кэш на Redis, чтобы заработало API.</li><li>Запусти БД, чтобы были данные.</li><li>Запусти вспомогательные сервисы для API, например, аутентификацию или backoffice.</li></ul><p>Без контейнеризации запуск сложного приложения превращается в филиал ада: разработчики тратят время на запуск инфраструктуры, у пользователей MacOS не работает то, что работает у пользователей Ubuntu, а порты Postgres конфликтуют с портами локально поднятого почтового сервера.</p><p>Так ноутбук начинает выполнять функцию обогревателя для помещения площадью 40 квадратных метров 🙂</p><h3>Для решения каких задач фронтенд-разработчики выбирают Docker чаще всего?</h3><p>На стороне фронтенда Docker чаще всего используют для:</p><ul><li>Запуска и работы web-приложения.</li><li>Запуска инфраструктуры для web-приложения.</li><li>Запуска тестов (создание скриншотов, e2e-тесты).</li><li>Сборка приложения на CI.</li></ul><h2>Что же должен знать фронтенд-разработчик про Docker?</h2><h3>Основные команды для работы с Docker</h3><p>Без знания основных команд вы не сможете ни запустить контейнер, ни отладить, ни понять, что же с ним происходит.</p><p>Базовое управление контейнерами также доступно через интуитивно понятный Docker UI.</p><p><b>Важно:</b> все основные команды имеют полезные аргументы. Полный список аргументов вы можете найти в документации.</p><h3>Как создать базовый Docker-образ для веб-приложения?</h3><p>Прежде чем запустить контейнер, нужно описать его содержимое, а также выбрать порядок выполнения команд.</p><p>Образ стандартного web-приложения выглядит примерно так:</p><p>При создании Dockerfile рекомендуем следовать минимальному набору лучших практик:</p><ul><li>Использовать базовые образы, чтобы не нагружать образ лишними модулями.</li><li>Добавлять <i>.dockerignore</i>, чтобы исключать лишние файлы из сборки.</li><li>Не запускать контейнер от root, чтобы снизить риски для безопасности.</li><li>Проверять сторонние образы с помощью docker scan, опять же, чтобы снизить риски для безопасности.</li></ul><h3>Как отправить образ в Container Registry?</h3><p><i>Container Registry</i> — это хранилище для Docker-образов.</p><p>Container Registry можно сравнить с Github, только вместо репозиториев — готовые для развёртывания образы.</p><p>Для работы с Container Registry есть несколько основных команд:</p><p>По тегу latest вы всегда можете получить последнюю версию вашего контейнера.</p><p>Популярные Container Registry:</p><ul><li>Docker Hub (публичный, простой и бесплатный для открытых проектов);</li><li>GitHub Container Registry (платный, интегрирован с GitHub);</li><li>Google Container Registry (платный);</li><li>Yandex Container Registry (платный).</li></ul><p>Важно: старайтесь подбирать Container Registry под экосистему, в которой будет работать ваше приложение. Это сэкономит много сил и времени.</p><h2>Как запустить Docker-контейнер локально и на сервере?</h2><p>Для локального запуска контейнера потребуется пройти простой пайплайн:</p><p>Если вы хотите запустить контейнер на удалённом сервере с установленным Docker, то вам потребуется пройти пайплайн посложнее:</p><p>Важно: в данном примере мы используем в качестве Container Registry — Docker Hub.</p><h2>Как подключить фронтенд к бэкенду внутри Docker?</h2><p>Чтобы не настраивать общение клиента и сервера через порты, хорошая практика — объединять сервисы в рамках единой Docker-сети.</p><p>Обычно этой задачей занимается файл-оркестратор docker-compose.yml:</p><p>Чтобы поднять весь стэк, нам понадобятся команды:</p><p>Ключевые моменты:</p><ul><li>Сервисы в одной сети могут общаться по имени (в примере фронтенд обращается к бэкенду по http://backend:5000);</li><li>depends_on гарантирует порядок запуска, но не ждёт готовности сервиса;</li><li>Для продакшена можно разделить конфигурации на docker-compose.yml и docker-compose.prod.yml.</li></ul><h2>Бонус: Как управлять контейнерами через UI?</h2><p>В случае отсутствия опыта контейнеризации у команды разработки, управление контейнерами можно осуществлять через UI (вместо терминала) при помощи <i>Portainer</i>.</p><p>Portainer — это легковесная панель управления Docker-контейнерами. Через удобный графический интерфейс он позволяет выполнять операции, которые обычно отправляются через терминал (docker run, docker ps, docker compose up).</p><figure><img src="https://media.tproger.ru/user-uploads/113154/2025-10-16/4ff13bab-77e8-4d2f-b78d-2695dc106945.png" alt="Админ панель Portainer.IO для управления контейнерами и их образами" /><figcaption>Админ панель Portainer.IO для управления контейнерами и их образами</figcaption></figure><p>Portainer делает управление докер-контейнерами доступным для широкого круга пользователей: от разработчиков и тестировщиков до системных администраторов.</p><p>Portainer не заменяет необходимость знания Docker, но значительно ускоряет и упрощает такие рутинные операции, как развёртывание и мониторинг.</p><h2>Когда Docker необходим, а когда можно обойтись?</h2><p>Используйте Docker когда:</p><ul><li>работаете в команде с разными ОС;</li><li>проект имеет сложные внутренние и внешние зависимости;</li><li>нужно обеспечить идентичность разных сред: разработки, тестирования, продакшена;</li><li>работаете с full-stack приложениями, где фронтенд тесно связан с бэкендом.</li></ul><p>Без Docker можно обойтись когда:</p><ul><li>работаете над небольшим проектом;</li><li>вся команда использует одинаковое железо и ОС;</li><li>проект не имеет сложных зависимостей;</li><li>нет необходимости в изоляции окружений.</li></ul><h2>Заключение</h2><p>В последние годы Docker прочно вошёл в арсенал фронтенд-разработчиков, перестав быть инструментом исключительно для бэкенда и DevOps.</p><p>Основная ценность Docker для фронтенд разработчика заключается в решении двух ключевых задач: быстрый запуск сложной рабочей среды приложения и обеспечение стабильности на протяжении релизного цикла.</p><p>Поэтому даже базовое знание Docker поможет выделиться на фоне других разработчиков, ведь вы сможете не просто создать приложение, но и провести его через полный релизный цикл.</p><p>В своём <a href="https://t.me/+2OPggty992w5YTY6">телеграмм-канале</a> я делюсь практическим опытом разработки, честно рассказываю о трудностях в работе, а также показываю кейсы проектов, которыми занимаюсь в свободное время!</p><p>Буду рад каждому, кто подписался  ✨</p><h2>Возможно, вам будет интересно:</h2><p>Делитесь своими находками и полезными командами для работы с Docker в комментариях!</p>]]></content:encoded>
    </item>
    <item>
      <title>Какие приложения установить на Windows и macOS</title>
      <link>https://tproger.ru/articles/kakie-prilozheniya-ustanovit-na-windows-i-macos</link>
      <comments>https://tproger.ru/articles/kakie-prilozheniya-ustanovit-na-windows-i-macos?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakie-prilozheniya-ustanovit-na-windows-i-macos</guid>
      <description><![CDATA[<p>Список разбит по категориям: от браузеров и гейминга до утилит безопасности и инструментов для продуктивности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakie-prilozheniya-ustanovit-na-windows-i-macos">Какие приложения установить на Windows и macOS</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[Браузеры]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Slack]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Windows 10]]></category>
      <category><![CDATA[Google Chrome]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Управление проектами]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Xbox]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Для продвинутых]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[Adobe]]></category>
      <category><![CDATA[Firefox]]></category>
      <category><![CDATA[IBM]]></category>
      <category><![CDATA[Mozilla]]></category>
      <category><![CDATA[Avast]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[NVIDIA]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[AMD]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[Epic Games]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Бета]]></category>
      <category><![CDATA[Safari]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[PlayStation]]></category>
      <category><![CDATA[Microsoft Edge]]></category>
      <category><![CDATA[Discord]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[RPA]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Figma]]></category>
      <category><![CDATA[Графы]]></category>
      <category><![CDATA[Markdown]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Notion]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Steam]]></category>
      <category><![CDATA[GPU]]></category>
      <category><![CDATA[Hardware]]></category>
      <category><![CDATA[iPhone]]></category>
      <category><![CDATA[MacBook]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 26 Oct 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Итак, вы только что настроили новый компьютер. Операционная система установлена, драйверы обновлены, и теперь пора заняться самым интересным — установкой программ. Но с чего начать? Какие приложения действительно необходимы, а какие просто занимают место?</p><p>Редакция Tproger сделала и адаптировала <a href="https://www.techspot.com/article/2974-desktop-software-essentials/">перевод подборки  программ для Windows и macOS</a>. Здесь вы найдёте проверенные временем решения для работы, развлечений и повседневных задач. Мы сосредоточились на бесплатных и условно-бесплатных приложениях с отличной репутацией, которые решают реальные задачи без навязывания ненужных функций.</p><p>Список разбит по категориям: от браузеров и гейминга до утилит безопасности и инструментов для продуктивности.</p><p>Неважно, опытный вы пользователь или новичок — здесь найдётся что-то полезное для каждого.</p><h2>Браузеры</h2><p>Браузер — это, пожалуй, самое важное приложение на вашем компьютере. Именно через него проходит большая часть вашей цифровой жизни: работа, развлечения, коммуникации. Выбор браузера влияет не только на скорость загрузки страниц, но и на конфиденциальность, безопасность и удобство работы.</p><ul><li><b>Большинство пользователей:</b> Chrome, Edge или Safari</li><li><b>Защита приватности: </b>Firefox, Brave, Ungoogled Chromium</li><li><b>Опытные пользователи:</b> Vivaldi</li><li><b>Максимальная анонимность: </b>Tor Browser</li></ul><h3>Google Chrome</h3><p>Chrome остаётся самым популярным браузером в мире — и не просто так. Он быстрый, стабильный и отлично интегрируется с экосистемой Google. Огромная библиотека расширений из Chrome Web Store позволяет настроить браузер под любые задачи. Синхронизация между устройствами работает безупречно: вкладки, пароли, закладки и история всегда под рукой.</p><p>Минус один, но существенный: Chrome прожорлив. Если у вас открыто больше десятка вкладок, он может съесть несколько гигабайт оперативной памяти. На компьютерах с 8 ГБ RAM и меньше это становится проблемой.</p><h3>Mozilla Firefox</h3><p>Firefox — это выбор тех, кто ценит приватность и открытость. Mozilla не зарабатывает на продаже ваших данных, а сам браузер активно развивается сообществом. Встроенные инструменты защиты от трекинга работают из коробки, блокируя рекламные сети и скрипты слежения.</p><p>По скорости Firefox не уступает Chrome, а по потреблению памяти даже выигрывает. Библиотека расширений чуть меньше, чем у Chrome, но все основные инструменты доступны.</p><h3>Microsoft Edge</h3><p>Edge построен на том же движке Chromium, что и Chrome, но при этом лучше оптимизирован для Windows. Microsoft вложилась в производительность: браузер работает быстро, потребляет меньше ресурсов и отлично интегрируется с системой.</p><p>Особенно приятны функции вроде Collections (коллекции вкладок для организации исследований), режим чтения и встроенный скриншотер. Edge поддерживает все расширения Chrome, так что переход безболезненный.</p><h3>Brave</h3><p>Brave — это Chrome на стероидах приватности. Браузер блокирует рекламу и трекеры по умолчанию, что делает сёрфинг быстрее и безопаснее. При этом он полностью совместим с расширениями Chrome.</p><p>Есть интересная фишка: Brave Rewards позволяет зарабатывать криптовалюту за просмотр приватной рекламы (если захотите её включить). Спорная механика, но как опция — почему нет. Для тех, кто хочет Chrome без Google и с упором на приватность, Brave — отличный выбор.</p><h3>Safari (только macOS)</h3><p>Если у вас Mac, Safari заслуживает внимания. Это самый энергоэффективный браузер для macOS: на MacBook он даёт ощутимо больше автономности по сравнению с Chrome или Firefox. Интеграция с экосистемой Apple безупречна: Handoff, синхронизация через iCloud, Reading List, автозаполнение паролей.</p><p>Safari быстрый, безопасный и не перегружен функциями. Единственный минус — библиотека расширений заметно скромнее, чем у конкурентов. Но для большинства задач базового функционала хватает.</p><h3>Ungoogled Chromium</h3><p>Для ультраосторожных Ungoogled Chromium удаляет всё отслеживание и сервисы Google — но вам придётся настраивать всё самостоятельно, так как в нём нет автообновлений или встроенной синхронизации.</p><p>Для максимально осторожных пользователей — это Chrome, из которого убрали всю телеметрию Google, отслеживание и облачные сервисы. Браузер работает, но требует ручной настройки: отсутствуют автоматические обновления и встроенная синхронизация между устройствами.</p><h3>Tor Browser</h3><p>Выводя приватность на следующий уровень, Tor Browser маршрутизирует ваш трафик через сеть Tor, анонимизируя ваш IP и многократно шифруя соединение. Он медленнее по задумке, но идеален, если ваш приоритет — максимальная анонимность, а не скорость или удобство.</p><h3>Vivaldi</h3><p>Vivaldi — браузер мечты для тех, кто хочет полного контроля. Стекирование вкладок, тайлинг, кастомные горячие клавиши, встроенная почта и календарь, веб-панели — это полноценный десктопный опыт внутри браузера. Хотите боковую панель браузера, открывающую ваши заметки, RSS-ленты или любой нужный сайт? Vivaldi это умеет.</p><h3>Arc</h3><p>Наконец, Arc — когда-то новичок на рынке браузеров, нацеленный на переосмысление UX: замена традиционной панели вкладок на боковую панель, акцент на веб-приложениях, интегрированные разделённые виды и easels для заметок и доски. К сожалению, компания за Arc прекратила разработку, чтобы полностью переключиться на ИИ с новым браузером, который сейчас в закрытой бета-версии.</p><h2>Управление паролями</h2><ul><li><b>Лучший бесплатный выбор:</b> Bitwarden</li><li><b>Также отлично:</b> 1Password, Dashlane, KeePass</li></ul><p>Миллионы людей продолжают использовать одни и те же слабые пароли на всех сайтах — или, что ещё хуже, держатся за классику вроде «123456». Даже сильные пароли мало помогают, если их повторяют или забывают. Конечно, большинство браузеров предлагают встроенные менеджеры паролей, но они ограничены, привязаны к одному браузеру и менее безопасны, чем специализированные решения.</p><p>Также не будем забывать о passkeys (ключах доступа). Если говорить практически, можно сказать, что passkeys объединяют концепцию пароля и двухфакторной аутентификации (2FA) в одно плавное действие, но гораздо безопаснее и гораздо менее раздражающе.</p><h3>Bitwarden</h3><p>Полностью опенсорсный, зашифрованный и щедрый даже в бесплатной версии. Вы получаете неограниченное количество паролей, синхронизацию между устройствами и приложения для всех платформ. Премиум ($10/год) добавляет безопасный обмен файлами и инструменты 2FA. Также есть доступные семейные и командные планы.</p><h3>1Password</h3><p>Премиум-решение с отполированным интерфейсом, сильной кроссплатформенной поддержкой и отличными функциями вроде Travel Mode (режим путешествий) и полной интеграцией passkeys.</p><h3>Dashlane</h3><p>Предлагает мониторинг даркнета, интеграцию VPN и плавный пользовательский опыт. Есть бесплатный тариф с ограниченными функциями, но премиум-версия конкурентоспособна.</p><h3>KeePassXC</h3><p>Отличная оффлайн-альтернатива, если хотите полного контроля и не против ручной синхронизации (или использования чего-то вроде Syncthing или Dropbox для синхронизации базы данных).</p><p>Пропустите LastPass — когда-то фаворит, он упал в немилость после повторных утечек безопасности. Для душевного спокойствия лучше поискать в другом месте.</p><h2>Продвинутые утилиты и дополнения к ОС</h2><ul><li><b>Поиск + лаунчеры:</b> Everything или Wox (Windows), Alfred или Raycast (macOS)</li><li><b>Пакетные менеджеры: </b>WinGet, Homebrew (macOS)</li><li><b>Для пользователей Windows:</b> PowerToys</li><li><b>Для пользователей Mac: </b>Rectangle</li><li><b>История буфера обмена: </b>ClipClip, Flycut (macOS)</li><li><b>Скриншоты + аннотации: </b>Monosnap</li></ul><h3>Winget</h3><p><b></b>Официальный менеджер пакетов Microsoft, встроенный в Windows 10 и 11. Работает похоже на Chocolatey, но разработан и поддерживается Microsoft. Homebrew — самый популярный менеджер пакетов для macOS. Позволяет быстро устанавливать, обновлять и управлять приложениями и CLI-инструментами с помощью команд в терминале.</p><h3>Everything</h3><p>Что касается поиска, Everything остаётся золотым стандартом сверхбыстрого поиска по именам файлов в Windows. Он индексирует диски за секунды и выдаёт почти мгновенные результаты с минимальной нагрузкой на систему. Если нужен функционал шире базового поиска, Wox использует движок Everything и добавляет мощные возможности лаунчера: поиск файлов, запуск приложений, калькулятор, перевод текста и расширения через плагины. Получается более гибкий опыт в духе Spotlight для Windows.</p><h3>Command Palette/Alfred/Raycast</h3><p>В который раз Microsoft не смогла существенно улучшить встроенный поиск Windows, хотя <b>Command Palette</b> в PowerToys даёт неплохой компромисс для тех, кто не хочет ставить сторонние утилиты.</p><p>На macOS <b>Alfred</b> по-прежнему главный лаунчер и утилита поиска. Он быстрый, интуитивный и в бесплатной версии включает историю буфера и настраиваемые поиски; расширенная автоматизация и «воркфлоу» доступны в Powerpack.</p><p>Тем, кто хочет современную облачно-интегрированную альтернативу с готовыми расширениями и встроенной поддержкой Notion, GitHub и Slack, стоит присмотреться к <b>Raycast</b> — это стильный, дружественный к разработчикам вариант, который стремительно набирает популярность.</p><h3>Менеджеры буфера обмена</h3><p>Они позволяют возвращаться к ранее скопированному — тексту, изображениям, ссылкам — и сильно ускоряют рутинные операции.</p><p>В Windows встроенная история буфера (Win + V) кое-как выручает, но продвинутым пользователям обычно хочется большего. В числе бесплатных рекомендаций — <b>ClipClip</b> для Windows и <b>Flycut</b> для macOS.</p><p>Когда речь о скриншотах и аннотациях, штатные инструменты macOS и Windows заметно выросли. Но многим всё равно удобнее сторонние решения. Нам по-прежнему нравится <b>Monosnap</b> за простоту и возможность мгновенно заливать снимки в облако для шаринга (и это бесплатно).</p><p><b>PowerToys</b> — набор полезных утилит от Microsoft для продвинутых пользователей Windows, повышающих продуктивность и упрощающих рабочие процессы. Среди инструментов: FancyZones для продвинутого раскладывания окон, PowerRename для пакетного переименования, Keyboard Manager для ремапинга клавиш, универсальный color picker и другие.</p><p><b>Rectangle</b> и <b>Magnet </b>— два самых популярных приложения на macOS для закрепления окон: быстрые выравнивание и ресайз по хоткеям или перетаскиванием, примерно как по умолчанию в Windows. Пользователям, пришедшим с Windows и скучающим по системному снапингу, одно из них жизненно необходимо.</p><p>Широко используемая альтернатива в Windows — <b>FancyZones</b> (часть PowerToys), предлагающая продвинутое управление окнами: настраиваемые сетки, зоны привязки и поддержку нескольких мониторов — поэтому это фаворит пауэр-пользователей на Windows.</p><h2>Для рутины и создания проектов</h2><ul><li><b>Бесплатные инструменты: </b>FreeOffice, LibreOffice и WPS Office</li><li>Microsoft Office за единовременную плату $49, Office 2024 — $129</li><li><b>Заметки: </b>Notion, OneNote, Obsidian</li><li><b>Бесплатный PDF-редактор: </b>PDFsam</li><li><b>Почтовые клиенты:</b> Thunderbird, eM Client</li></ul><p>Независимо от того, пишете ли вы тексты, планируете проект, кодите или наводите порядок в цифровой жизни, правильные инструменты решают многое. Сегодня выбор топовых приложений для продуктивности и разработки — часто бесплатных — лучше, чем когда-либо.</p><p><b>Microsoft Office</b> остаётся отраслевым стандартом для профессиональной продуктивности. Подписка Microsoft 365 открывает доступ к Word, Excel, PowerPoint, Outlook и включает 1 ТБ облачного хранилища.</p><p>Среди бесплатных альтернатив LibreOffice — мощный open-source комплект с сильным сообществом (хотя интерфейс некоторым кажется старомодным). Если нужна внешне более майкрософтовская альтернатива, попробуйте<b> FreeOffice </b>или <b>WPS Office Free</b> — у них хорошая совместимость.</p><p>На macOS <b>Pages</b>, <b>Numbers</b> и <b>Keynote</b> предустановлены и более чем достаточны для большинства задач, особенно если вы в экосистеме Apple.</p><h3>Знания и ведение заметок</h3><p><b>Notion</b> стал универсальной платформой организации: заметки, базы данных, to-do, управление проектами, создания совместных рабочих пространств. Если нужны более локальные заметки с синхронизацией между устройствами и поддержкой Markdown, <b>Obsidian</b> — любимец студентов и исследователей.</p><p>Для быстрых кроссплатформенных заметок <b>OneNote</b> — крепкий бесплатный вариант от Microsoft. В качестве альтернатив — <b>Simplenote</b> или open-source <b>Joplin</b>.</p><p>Если вы занимаетесь академической работой и научными статьями, <b>Zotero</b> — отличный open-source менеджер источников с интеграцией в браузер и совместными коллекциями. <b>Milanote</b> предлагает визуальный подход к заметкам и планированию — идеально для креативных пользователей.</p><h3>Работа с PDF</h3><p>Хотя Adobe Acrobat остаётся премиальным редактором PDF, бесплатные альтернативы вроде <b>PDFsam</b> позволяют без усилий объединять, разбивать, редактировать и поворачивать страницы.</p><h2>Инструменты для дизайна и создания контента</h2><p>Для дизайна два выделяющихся приложения хорошо дополняют набор продуктивности. <b>Figma Desktop</b> — совместная платформа интерфейс-дизайна, широко используемая UI/UX-дизайнерами и фронтенд-разработчиками. Десктоп-версия работает быстрее, чем браузер, и лучше интегрируется с ОС — это удобно для сложных дизайн-систем и коллаборации в реальном времени.</p><p><b>Canva</b> с интуитивным drag-and-drop превосходно чувствует себя и как десктоп-приложение. Отлично подходит для быстрых графических материалов для соцсетей, маркетинга, постеров и презентаций. Благодаря тысячам шаблонов и совместной работе это фаворит как у профи, так и у новичков.</p><h2>Почтовые клиенты</h2><p>Если вы предпочитаете отдельный почтовый клиент, у <b>eM Client</b> много функций, бесплатный — до двух аккаунтов. <b>Mozilla</b> <b>Thunderbird</b> — мощная open-source альтернатива с удобной настраиваемостью, а <b>Mailbird</b> — вариант с упором на продуктивность для тех, кого не пугает подписка.</p><h2>Инструменты разработчика</h2><ul><li><b>Редакторы кода и текста:</b> VS Code, Cursor, Sublime Text</li><li><b>Система контроля версий:</b> SourceTree, GitHub Desktop</li><li><b>Контейнеры: </b>Docker</li><li><b>Локальные LLM: </b>Ollama</li><li><b>SFTP, загрузка файлов:</b> WinSCP, Forklift</li></ul><p>Для разработчиков <b>Visual Studio Code</b> — безусловный вариант. Бесплатный, лёгкий, но мощный, кроссплатформенный — тысячи расширений покрывают практически любой язык, фреймворк или инструмент. Набирающая популярность альтернатива — <b>Cursor</b>, редактор на базе VS Code с усиленной AI-помощью. Он подходит для связки с LLM: даёт inline-подсказки, генерирует код, рефакторит и позволяет редактировать кодовую базу.</p><p>При этом<b> Sublime Text </b>остаётся для скорости и простоты, а <b>Notepad++</b> — отличный лёгкий редактор для быстрых правок в Windows.</p><p>Для Git графические клиенты <b>SourceTree</b> и <b>SmartGit</b> дают понятный интерфейс для управления репозиториями на GitHub, GitLab и не только. <b>GitHub Desktop</b> раньше был простоват и не слишком хорош, но сейчас существенно прибавил — всё ещё простой для работы, но в хорошем смысле.</p><p>Для локальных окружений, API-тестирования или терминального воркфлоу инструментов — пруд пруди. Например, <b>Docker Desktop</b> стал стандартом для тех, кто собирает и запускает контейнеризированные приложения на разных платформах. Он упрощает настройку окружений и держит систему чистой.</p><p><b>Ollama</b> позволяет запускать большие языковые модели (LLM) локально с минимальной настройкой. Поддерживает модели вроде LLaMA, Mistral и другие open-weight альтернативы GPT, так что можно работать с ИИ прямо на своём компьютере без отправки данных в облако.</p><p>Если вы работаете с облачными хранилищами или SFTP, WinSCP (Windows) и ForkLift (macOS) — отличные клиенты с двухпанельным управлением файлами, синхронизацией и автоматизацией. На Mac также популярны <b>Commander One</b> и <b>Transmit</b> — у них есть встроенные подключения к удалённым и облачным путям.</p><h3>Безопасность</h3><p>И Windows, и macOS сегодня предлагают более чем достойную встроенную защиту. С защитой в реальном времени, интеграцией с файерволом и биометрией вроде <b>Windows Hello</b> и <b>Touch ID</b>. Для обычных пользователей, которые соблюдают гигиену безопасности: не скачивают сомнительное ПО, используют менеджеры паролей и включают 2FA — встроенной защиты часто хватает.</p><p>Для продвинутых пользователей есть дополнительные варианты.</p><p>Отличное первое дополнение — <b>Malwarebytes</b>. Это давний фаворит в обнаружении и удалении malware, adware и руткитов; бесплатная версия по-прежнему хороша для ручных сканов. В платной — защита в реальном времени без ощутимой просадки производительности.</p><p>Если не хочется ставить традиционный антивирус, есть достойные альтернативы. <b>Emsisoft Emergency Kit</b> — мощный портативный сканер, который можно запускать с флешки: идеально для редких глубоких сканов или лечения заражённых систем без установки чего-либо. Просто подключаете, когда нужно.</p><p>Ещё один отличный инструмент — <b>VirusTotal</b>: бесплатный веб-сервис, который проверяет файлы и URL через десятки антивирусных движков. Прежде чем открывать подозрительную загрузку, можно залить файл на VirusTotal.com или использовать их расширение для браузера, чтобы проверять ссылки в реальном времени. Быстро, просто и удобно для осторожных пользователей.</p><p>Мы не поклонники установки антивирусов на каждый компьютер и не полностью в курсе, какие сейчас показывают лучшие результаты. Тем не менее, <b>AV-Tes</b>t давно и регулярно оценивает популярные решения, поэтому советуем смотреть их свежие отчёты. В текущем списке высокооценённых — <b>Avast, BitDefender, ESET </b>и другие; многие из них предлагают бесплатные версии для пробы.</p><h3>Удалённый доступ и вспомогательные утилиты</h3><p><b>RustDesk</b> стал современным, ориентированным на приватность аналогом <b>TeamViewer</b>. Он с открытым исходным кодом, быстрый и работает кроссплатформенно.</p><p>Тем, кому нужны более устоявшиеся коммерческие решения, подойдёт <b>AnyDesk</b>, который остаётся лёгким и надёжным вариантом для личного и командного использования.</p><p>Превращение смартфона в пульт дистанционного управления компьютером бывает невероятно удобно — будь то презентации, потоковое видео или просто навигация с дивана.</p><p><b>Remote Mouse</b> — простой и эффективный способ эмулировать мышь и клавиатуру с телефона. Для более продвинутых сценариев можно использовать приложения вроде <b>Unified Remote.</b></p><h2>Редактирование изображений и видео</h2><ul><li><b>Профессиональный видеомонтаж:</b> DaVinci Resolve</li><li><b>Простой видеомонтаж: </b>CapCut</li><li><b>Редакторы изображений:</b> GIMP, PhotoDemon, Pixelmator Pro</li><li><b>Бесплатное улучшение изображений:</b> Upscayl</li><li><b>RAW-редактирование:</b> RawTherapee</li><li><b>Видеоконвертация:</b> HandBrake</li></ul><p>Если вам нужен бесплатный инструмент для редактирования изображений, <b>GIMP</b> — один из самых мощных вариантов. Он предоставляет профессиональные возможности, такие как слои, маски и настраиваемые плагины, что делает его идеальным для продвинутых пользователей. Если вы ищете более лёгкий редактор с чистым интерфейсом, стоит обратить внимание на <b>PhotoDemon</b>. Он работает как портативное приложение на Windows, поддерживает слои и редактирование — отличный выбор для быстрых правок или ретуши.</p><p>Если вы хотите увеличивать разрешение изображений без потери качества, <b>Upscayl</b> — мощный и бесплатный инструмент для апскейла. Он кроссплатформенный, и по нашим тестам показывает результаты на уровне платных решений вроде Topaz.</p><p>Для векторной графики — логотипы, иллюстрации — <b>Inkscape</b> является достойным open-source вариантом с полной поддержкой редактирования SVG. <b>Krita</b> — ещё один отличный бесплатный инструмент, особенно подходящий для цифровой живописи и художественного творчества.</p><p>Для редактирования RAW-фотографий, <b>Darktable</b> и <b>RawTherapee</b> — два высококлассных open-source аналога Adobe Lightroom. Их широко используют фотографы, которым нужна работа с изображениями без подписки.</p><p>Для простых GIF-анимаций <b>ScreenToGif</b> — удобная утилита, мгновенно записывающая область экрана и экспортирующая в GIF или другие форматы с оверлеями.</p><p>Среди платных фоторедакторов <b>Adobe Photoshop</b> остаётся лидером, но для macOS есть <b>Pixelmator Pro</b> — мощное приложение с разовой оплатой, а <b>Affinity Photo</b> предлагает профессиональные возможности по более доступной цене.</p><h3>Видеомонтаж и конвертация</h3><p><b>DaVinci Resolve</b> считается лучшим бесплатным профессиональным ПО. Его используют и энтузиасты, и профессионалы — от простого тримминга до цветокоррекции и сложного постпродакшена.</p><p><b>Shotcut</b> и <b>Kdenlive</b> — тоже сильные бесплатные варианты, предлагают более простой фукнционал с хорошим набором функций для новичков и продвинутых пользователей. <b>CapCut</b>, изначально мобильное приложение, теперь доступен на десктопе — идеально подходит для быстрых монтажей и роликов для соцсетей.</p><p>Для пользователей macOS <b>iMovie </b>предустановлен и остаётся надёжным вариантом для базовых видео. Если вам нужно просто конвертировать или сжимать видео в современные форматы, <b>HandBrake</b> — проверенное бесплатное решение с поддержкой и вариацией входных и выходных форматов.</p><p>Тем, кто ищет топовый профессиональный монтаж, подойдут <b>Adobe Premiere Pro</b> и<b> Final Cut Pro</b>, но там есть дорогая подписка и более высокий порог входа.</p><h2>Коммуникации и совместная работа</h2><ul><li><b>Для повседневной связи: </b>WhatsApp, Messenger и Zoom, если у вас нет FaceTime</li><li><b>Для приватности: </b>Signal</li><li><b>Для работы:</b> Slack, Teams</li><li><b>Для игр и общения: </b>Discord</li></ul><p>Выбор коммуникационных и мессенджерных приложений в первую очередь зависит от того, с кем вы общаетесь — с семьёй, друзьями, коллегами или игровым сообществом. Вот актуальная картина:</p><p>Для личной переписки <b>WhatsApp</b> и <b>Facebook Messenger</b> остаются самыми массовыми платформами по всему миру. У них есть десктопные клиенты и встроенное сквозное шифрование по умолчанию. <b>Telegram</b> также крайне популярен благодаря синхронизации между устройствами и поддержке крупных чатов. Пользователи Apple продолжают активно использовать <b>iMessage</b> для приватного, шифрованного общения в экосистеме Apple.</p><p>Из видеоконференций <b>Zoom</b> остаётся одним из лидеров для групповых звонков и онлайн-ивентов, предлагая локальные записи, демонстрацию экрана и комнаты (breakout rooms). Однако бесплатный тариф ограничивает 1:1 звонки 40 минутами, если не перейти на платный план. Zoom поддерживает сквозное шифрование, но при включении E2EE отключаются некоторые функции вроде облачной записи и комнат.</p><p><b>Google Meet</b> — отличный браузерный аналог без необходимости установки, который заметно улучшился по качеству и удобству использования. Многие компании применяют Meet в ежедневной работе и гибридных форматах. Если ваша организация использует Microsoft 365, скорее всего, вы работаете в <b>Microsoft Teams</b>, который уже заменил Skype на корпоративном уровне. Teams поддерживает большие созвоны, обмен файлами и глубоко интегрирован с Office. Сквозное шифрование доступно, но только для 1:1 звонков.</p><p><b>FaceTime</b> по-прежнему отличный для пользователей Apple, и благодаря новым обновлениям к звонку теперь могут присоединяться и пользователи Android/Windows по ссылке через браузер.</p><p>Когда приватность критична, <b>Signal</b> — один из лучших вариантов. Разработан некоммерческой организацией, бесплатен, open-source, без рекламы, использует надёжное сквозное шифрование для сообщений и звонков.</p><p>Для рабочих коммуникаций<b> Slack</b> и <b>Teams</b> продолжают использоваться в бизнес-среде. Бесплатный тариф Slack ограничивает историю 90 днями и звонки, но остаётся любимцем стартапов и малых команд благодаря интеграциям и ботам. <b>Cisco Webex</b> — также крепкий вариант, особенно популярен в корпоративной среде.</p><p>Если вы работаете с креативными командами, сообществами или геймерами, <b>Discord</b> стал явным лидером. Изначально созданный для игр, он превратился в полноценную коллаборативную платформу с текстом, голосом и видео, стримингом экрана и ботами для автоматизации. Многие комьюнити — и даже IT-компании — используют Discord как основной рабочий инструмент.</p><p>Для внутриигрового голосового чата <b>TeamSpeak </b>остаётся олдскульным достойным вариантом: можно использовать анонимно и получать полный контроль над сервером. Встроенный чат Steam лучше, чем раньше, и помогает в игровой координации, но большинство всё же выбирает Discord.</p><h2>Гейминг, моддинг и стриминг</h2><ul><li><b>Игровые платформы: </b>Steam, Epic Games, EA App, Ubisoft, GOG</li><li><b>Последние драйверы для GPU:</b> Nvidia GeForce, AMD Radeon, Intel Arc</li><li><b>Стриминг:</b> OBS Studio</li></ul><p><b>Steam</b> остаётся центром PC-игр. Это не только магазин, но и социальная платформа, лаунчер и площадка с модами, облачными сохранениями и встроенным стримингом. Регулярные распродажи, поддержка контроллеров и сообщества делают его обязательным для любого PC-геймера.</p><p>Не менее важно установить Epic <b>Games Store</b>. Хотя библиотека меньше, он регулярно раздаёт бесплатные игры, доступные любому с аккаунтом Epic. Это также must-have, если вы играете в Fortnite.</p><p>Помните: не все издатели размещают игры на Steam или Epic. Для тайтлов EA понадобится <b>EA App (ранее Origin)</b>, для Ubisoft — <b>Ubisoft Connect</b>, для Blizzard/Activision — <b>Battle.net</b>, а GOG Galaxy не только предлагает DRM-free классику, но и может агрегировать игры из других лаунчеров.</p><p>Некоторые сверхпопулярные игры распространяются отдельно: Minecraft (через Minecraft.net или Microsoft Store), Roblox, League of Legends и Valorant (через лаунчер Riot Games). Если вы новичок и ищете что-то лёгкое, можно начать с free-to-play тайтлов или классики вроде <b>Brutal Chess</b> или <b>GZDoom</b>.</p><p>Если вы играете с геймпадом, Windows поддерживает Xbox-контроллеры из коробки. PlayStation-контроллеры теперь тоже отлично работают: Steam через <b>Steam Input </b>поддерживает DualShock 4 и DualSense практически во всех играх. При необходимости глубокой кастомизации можно использовать DS4Windows, но большинству хватает возможностей Steam.</p><p>Если вас интересует моддинг, хороший менеджер модов время в этой жизни:</p><ul><li><b>Mod Organizer 2</b> — лучший для RPG Bethesda (Skyrim, Fallout).</li><li><b>Vortex (от Nexus Mods)</b> — дружелюбный к новичкам и поддерживает широкий перечень игр.</li></ul><p>Для записи геймплея или стриминга <b>Nvidia ShadowPlay</b> и <b>AMD Radeon ReLive</b> подходят для простых задач. Но для стриминга с вебкой, сценами, оверлеями или многосценовым продакшеном <b>OBS Studio</b> — безальтернативный лидер. Он бесплатный, open-source и подходит как новичкам, так и про-стримерам (Twitch, YouTube, Kick и т.д.). <b>SignalRGB</b> помогает синхронизировать весь RGB-зоопарк и задавать динамические эффекты.</p><h2>Мониторинг железа и разгон</h2><ul><li><b>Мониторинг: </b>CPU-Z, HWMonitor, HWiNFO64</li><li><b>Настройка и разгон:</b> Afterburner, FanControl, ThrottleStop, SignalRGB</li></ul><p>Одно из первых дел, которое стоит сделать после сборки ПК — убедиться, что компоненты соответствуют ожиданиям и работают корректно. К счастью, существует много инструментов, позволяющих мониторить, тестировать и настраивать железо.</p><p>Начать стоит с <b>CPU-Z</b> — классического бесплатного инструмента, показывающего информацию о CPU, материнской плате, оперативной памяти и других компонентах. Он также умеет запускать простой стресс-тест и бенчмарк для проверки стабильности.</p><p>Для более широкого мониторинга <b>HWMonitor</b> показывает температуры, напряжения и скорости вентиляторов в реальном времени. Если нужно ещё глубже и с более гибким интерфейсом — <b>HWiNFO64</b> считается одним из лучших: поддерживает логирование датчиков и интеграцию с оверлеями (например, RTSS или Rainmeter).</p><p>Чтобы проверить хранилище, <b>CrystalDiskMark</b> измеряет скорость чтения/записи SSD и HDD — это помогает понять, соответствует ли диск заявленным характеристикам. Глубже оценить здоровье накопителя можно в <b>Hard Disk Sentinel</b>, который анализирует SMART-данные, оценивает срок службы и предлагает ограниченный ремонт.</p><p>С точки зрения охлаждения, всё больше геймеров используют утилиты для настройки вентиляторов. <b>FanControl</b> — актуальный бесплатный фаворит: поддерживает сложные кривые оборотов, привязку к датчикам, и совместим с большинством современных материнских плат. На Mac одной из лучших утилит остаётся<b> Macs Fan Control.</b></p><p>Для настройки видеокарт долгое время стандартом был <b>MSI Afterburner</b> — для разгона, настройки вентиляторов и мониторинга с RTSS-оверлеем. Однако из-за замедления обновлений многие сегодня используют встроенные утилиты от <b>Nvidia (GeForce Experience/Control Panel)</b> и <b>AMD (Adrenalin Software)</b>.</p><p>Если вы меняете видеокарту или подозреваете проблемы с драйверами, обязательно используйте <b>Display Driver Uninstaller</b> (DDU) — он полностью очищает систему от старых драйверов перед переустановкой.</p><p>Если вы играете на ноутбуке или хотите снизить нагрев и повысить автономность, <b>ThrottleStop</b> остаётся одним из лучших инструментов для андервольта CPU и настройки энергопрофилей.</p><p>Тем, кто серьёзно подошёл к разгону CPU и GPU, пригодятся фирменные инструменты вроде <b>Intel XTU (для Intel) и AMD Ryzen Master</b> — они дают контроль над частотами, напряжениями и лимитами мощности.</p><h2>Управление файлами</h2><ul><li><b>Поиск больших файлов:</b> SpaceSniffer, WizTree, Disk Drill (macOS)</li><li><b>Поиск дубликатов: </b>dupeGuru</li><li><b>Архивы и ZIP: </b>PeaZip, The Unarchiver</li><li><b>Очистка: </b>BCUninstaller, CCleaner Portable, AppCleaner (macOS)</li></ul><p>Чтобы грамотно управлять файлами и освобождать место, нужно понимать, что именно занимает пространство. На Windows популярны <b>WinDirStat и WizTree </b>— быстрые бесплатные инструменты для визуализации диска. <b>SpaceSniffer</b> предоставляет динамическую схему.</p><p>На macOS — <b>GrandPerspective и Disk Drill </b>предлагают аналогичный функционал, а <b>DaisyDisk</b> — один из самых красивых платных вариантов с молниеносным сканированием.</p><p>Если дубликаты засоряют диск, <b>dupeGuru</b> (open-source) отлично справляется с поиском повторяющихся изображений и музыки, даже слегка изменённых.</p><p>Для пакетного переименования файлов (например, фоточек с камеры) существует гибкий <b>Bulk Rename Utility</b>. Если нужно что-то попроще: <b>PowerRename</b> из PowerToys (Windows) или встроенный инструмент в <b>Finder</b> (macOS) подходят большинству.</p><p>Встроенный <b>File Explorer</b> в Windows недавно получил вкладки и стал удобнее, но <b>Files</b> (open-source) — современная альтернатива с улучшенным UX. Кто-то ещё пользуется <b>Total Commander</b> или <b>Directory Opus</b>, благодаря расширяемости и скриптам, хотя новичкам они кажутся устаревшими. Для просмотра изображений по-прежнему незаменим <b>IrfanView</b>.</p><p>Для работы с архивами, если не устраивает встроенный ZIP-менеджер Windows, скачайте <b>7-Zip</b> или <b>PeaZip</b>. На Mac лучшим бесплатным инструментом остаётся <b>The Unarchiver</b>.</p><p>Для очистки системы важно выбирать надёжные утилиты. На Windows, <b>BCUninstaller (Bulk Crap Uninstaller)</b> — один из самых проверенных для удаления программ и их хвостов. <b>BleachBit</b> и <b>Wise Disk Cleaner</b> — безопасные альтернативы <b>CCleaner</b> (лучше использовать Portable-версию, так как стационарная испортила репутацию). На Mac <b>AppCleaner</b> всё ещё любим за полное удаление приложений без мусора.</p><p>Если вы организуете большую библиотеку медиа, стоит взглянуть на open-source <b>TagSpaces</b>, позволяющий тегировать файлы локально, без облака.</p><h2>Облачное хранилище и резервное копирование</h2><ul><li><b>Простая синхронизация: </b>Dropbox, Google Drive</li><li><b>Фото между устройствами:</b> Apple iCloud, Google Photos</li><li><b>Приватность: </b>pCloud, Proton Drive, Internxt</li><li><b>Полные бэкапы:</b> Backblaze, IDrive</li></ul><h3>Базовое облачное хранилище</h3><p><b>Dropbox</b> — один из самых простых в использовании, хотя бесплатных 2 ГБ мало.</p><p><b>
Google Drive</b> — 15 ГБ бесплатно, используется Gmail, Docs и Photos. Идеален для Android.</p><p><b>
OneDrive</b> — идёт в комплекте с Windows и Microsoft 365. 1 ТБ включён в большинство Office-планов. Хотя по скорости и интерфейсу уступает Dropbox/Google.</p><p><b>
iCloud Drive</b> — лучший выбор для пользователей Apple, глубокая интеграция с macOS/iOS. Бесплатно 5 ГБ, далее по планам до 2 ТБ.</p><p><b>
Proton Drive</b> — шифрованная альтернатива от создателей ProtonMail.</p><h3>Фото и видео</h3><p>На macOS приложение <b>Photos</b> автоматически создаёт альбомы по людям и локациям, синхронизирует всё через iCloud.</p><p>На Windows мы часто рекомендуем <b>Google Photos</b>, который предлагает аналогичный набор функций и автоматизацию. Для пользователей Android — это стандарт по умолчанию. Да, раньше было безлимитно, теперь фото занимают общее место Google Drive (15 ГБ), которое быстро заканчивается.</p><h3>Полные бэкапы</h3><p>Если требуется сохранять всю систему, терабайты медиа, состояние дисков используйте отдельные сервисы резервного копирования.</p><p><b>Backblaze</b> — топ в этой категории: фиксированная цена (~$8/месяц за устройство), безлимитное хранилище, минимум настроек: установил и забыл.</p><p><b>IDrive</b> — более контролируемый вариант, поддерживает несколько устройств, внешние диски и версионность файлов.</p><p>Простой для не-технарей — <b>Carbonite</b>, с возможностью быстрого восстановления и круглосуточной поддержкой.</p><p>Профессионалам — <b>Acronis Cyber Protect</b>: клон дисков, анти-вымогатель, гибридное облако.</p><h3>Для особо чувствительных данных</h3><p>Если вы храните личные финансовые документы или медицинские сведения, стоит выбрать end-to-end решений.</p><p><b>pCloud</b> предлагает клиентское шифрование (через платный «Crypto»). Даже при взломе аккаунта файлы не расшифруются без ключа.</p><p><b>Proton Drive </b>— аналогичный подход, с прозрачностью open-source.</p><h2>Прочие полезные инструменты, не вошедшие в другие разделы</h2><p><b>Google Earth</b> — для любителей карт и планировки.</p><p><b>qBittorrent</b> — лучший torrent-клиент: чистый, без рекламы, с поиском. Альтернатива — легковесный Transmission или кастомизируемый Deluge.</p><p><b> iMazing</b> — must-have для владельцев iPhone: резервные копии, экспорт медиа, проверка батареи, конвертация HEIC.</p><p><b>AirDroid</b> — аналог для Android: управление файлам, уведомления, SMS с ПК.</p><p><b>Rufus</b> — лидер по созданию загрузочных USB-дисков для Windows/Linux.</p><p><b>Open Shell </b>— возвращает классическое меню «Пуск» в стиле Windows 7.</p><p><b>Stretchly</b> — напоминает делать перерывы — полезно удалёнщикам и фрилансерам.</p><p><b>AutoHotkey</b> — скриптовый движок для Windows: переназначение клавиш, макросы, автоматизация.</p><p><b>VPN: </b>бесплатные — ProtonVPN, Windscribe, TunnelBear (с лимитом). Платные — ProtonVPN, NordVPN.</p><p><b>Calibre</b> — лучшее бесплатное решение для чтения, организации и конвертации e-book (EPUB, MOBI, PDF и др.).</p><h2>Заключение</h2><p>Итак, мы прошлись по основным категориям приложений, которые стоит установить на новый компьютер. Конечно, этот список не исчерпывающий — у каждого свои задачи и предпочтения. Но если вы установите хотя бы половину из перечисленного, ваш компьютер станет гораздо удобнее и функциональнее.</p><p>Несколько советов напоследок:</p><ol><li><b>Не захламляйте систему.</b> Устанавливайте только то, что действительно используете. Чем меньше фоновых процессов — тем быстрее работает компьютер.</li><li><b>Следите за обновлениями.</b> Большинство программ обновляются автоматически, но некоторые требуют ручного апдейта. Свежие версии — это не только новые функции, но и закрытые уязвимости.</li><li><b>Делайте резервные копии.</b> Никакие утилиты не спасут от отказа жёсткого диска. Регулярный бэкап на внешний носитель или в облако — обязательная практика.</li><li><b>Экспериментируйте. </b>Попробуйте несколько браузеров, редакторов, плееров. То, что подходит большинству, может не подойти именно вам.</li><li><b>Читайте отзывы.</b> Перед установкой незнакомого приложения загляните на форумы или Reddit. Сообщество быстро выявляет проблемы и подводные камни.</li></ol><p>Теперь ваш компьютер готов к работе, учёбе, развлечениям — и чему угодно ещё. Главное — не забывайте, что инструменты важны, но ещё важнее то, как вы их используете. Удачи!</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>Контейнеры после Docker: куда движется мир с Podman и что нас ждет в 2026</title>
      <link>https://tproger.ru/articles/kontejnery-posle-docker--kuda-dvizhetsya-mir-s-podman-i-chto-nas-zhdet-v-2026</link>
      <comments>https://tproger.ru/articles/kontejnery-posle-docker--kuda-dvizhetsya-mir-s-podman-i-chto-nas-zhdet-v-2026?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kontejnery-posle-docker--kuda-dvizhetsya-mir-s-podman-i-chto-nas-zhdet-v-2026</guid>
      <description><![CDATA[<p>Сравниваем Docker и Podman по безопасности, производительности и совместимости. Актуальный анализ архитектуры rootless-режимов, работы с Kubernetes и практических сценариев использования. Прогноз развития контейнерных технологий на 2026 год для DevOps-инженеров и разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kontejnery-posle-docker--kuda-dvizhetsya-mir-s-podman-i-chto-nas-zhdet-v-2026">Контейнеры после Docker: куда движется мир с Podman и что нас ждет в 2026</a>»</p>]]></description>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 15 Oct 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Революция контейнеризации все-таки состоялась. Мы привыкли упаковывать приложения в контейнеры, а слово «Docker» стало нарицательным, как ксерокс. Но за монополией рано или поздно приходит альтернатива. Тишина вокруг Docker стала оглушительной. После этого сообщество заговорило о безопасности, архитектуре и зависимости от одного вендора.</p><p>Из тени вышел Podman. Это был ответ на вопросы, которые раньше боялись или не хотели задавать. Нужен ли нам процесс, который работает с правами root? Можно ли управлять контейнерами иначе и обеспечить безопасность по умолчанию, а не в виде опции?</p><p>Разберемся без предвзятости и выясним, что предлагают оба инструмента, где они находятся в 2025 году и что нас ждёт дальше.</p><h2>Архитектура: демон против бездемонного подхода</h2><p>Главное различие лежит в самой основе продуктов. Podman, как альтернативный инструмент управления контейнерами, базируется на принципиально иной технологии. Это формирует не только технические, но и идеологические различия.</p><p>Docker построен вокруг демона dockerd — это фоновый процесс, который работает с повышенными привилегиями. Когда вы пишете docker run, CLI-утилита не запускает контейнер сама, а даёт команду демону. Демон, обладая правами root, делает всю грязную работу.</p><p>Это создает единую точку контроля и отказа. Если демон падает, вы на время теряете управление контейнерами. Уязвимость в демоне открывает путь к захвату всей системы.</p><figure><img src="https://media.tproger.ru/user-uploads/133848/2025-10-15/83de190d-0b69-45b7-b884-0e357c38a7b7.png" alt="" /></figure><p>Podman пошёл другим путем. В его основе — децентрализованная архитектура. Команда podman run запускает контейнер напрямую, через библиотеку libpod. Процесс работает от имени вашего пользователя. Нет центрального сервера, который можно атаковать.</p><p>Это похоже на разницу между центральным сервером и персональными компьютерами. Первый мощный, но его поломка парализует всех. Вторые — независимы, и выход одного из строя не затронет остальных.</p><h2>Безопасность: rootless как новая норма</h2><p>В 2025 году запуск контейнеров из-под root — критическая ошибка. Это создает критический риск для всей системы. Идея «безопасность по умолчанию» окончательно победила. Rootless-режим стал обязательной практикой для всех, кто серьезно относится к защите серверной инфраструктуры.</p><p>Podman и Docker поддерживают эту практику. Но их подходы различаются на фундаментальном уровне. Podman родился с этой идеей, его архитектура изначально заточена под обычного пользователя. Docker же добавил rootless-режим позже, как важный, но всё же надстрочный элемент.</p><h3>Как работает rootless</h3><p>Оба инструмента используют пространства имён пользователей (user namespaces), чтобы обмануть контейнер. Внутри контейнера процесс может работать от имени root (UID 0). Но ядро хоста прозрачно пробрасывает этот внутренний root-идентификатор на обычный, непривилегированный UID (уникальный идентификатор пользователя) снаружи.</p><p>Контейнер внутри работает с правами суперпользователя. Он «считает», что может делать что угодно. Но ядро операционной системы обманывает его. Снаружи контейнер работает с правами обычного пользователя, который его запустил. Все его действия проходят через этот фильтр.</p><p>Если злоумышленник найдёт уязвимость и вырвется из контейнера, он окажется не в полной системе, а в ограниченной среде (песочнице) вашего пользователя. Он не сможет удалять системные файлы или мешать другим юзерам.</p><h3>Podman: rootless из коробки</h3><p>У Podman этот механизм <a href="https://docs.astralinux.ru/latest/guide/virtual/podman/">включен</a> по умолчанию. Вы устанавливаете Podman и сразу можете запускать контейнеры без sudo (команды с повышенными привилегиями). Хранилище образов и контейнеров создаётся в вашем домашнем каталоге (~/.local/share/containers), изолируя работу от действий других пользователей на том же сервере.</p><p>Это решает проблему многопользовательских сред. В Docker все, у кого есть доступ к демону (через группу docker), получают эффективные права root на хосте. В Podman пользователь может управлять только своими контейнерами. Он не вправе вмешаться в работу соседа.</p><h3>Docker: ручная настройка безопасности</h3><p>Docker проделал большой путь. Его rootless-режим — серьезное достижение. Но он не работает по умолчанию. Системному администратору нужно его сначала установить и настроить.</p><p>В rootless-режиме Docker использует дополнительные компоненты, такие как RootlessKit, для эмуляции ряда низкоуровневых функций. Это создаёт определенные проблемы. Например, сетевая связность может быть более ограниченной, а Docker Swarm в rootless-режиме не работает вовсе.</p><p>Docker можно обезопасить. Но для этого системному администратору нужно:</p><ul><li>вручную установить и настроить rootless-режим;</li><li>правильно настроить cgroups и делегирование прав;</li><li>переконфигурировать демон для работы без привилегий.</li></ul><p>Podman предлагает безопасную конфигурацию сразу после установки. Его архитектура не требует дополнительных настроек для работы в rootless-режиме.</p><h3>Больше, чем просто rootless — глубина защиты</h3><p>Безопасность Podman не ограничивается rootless-режимом:</p><ul><li><b>Меньше прав по умолчанию.</b> Контейнер в Docker изначально получает около 14 System Capabilities — привилегий внутри пространства ядра. Podman по умолчанию выдаёт только 11, следуя принципу минимальных привилегий и отсекая, например, возможность модификации настроек сети.</li><li><b>Глубокая интеграция с SELinux.</b> В системах вроде RHEL или Fedora Podman автоматически назначает контейнерам SELinux-метки для изоляции. Docker тоже поддерживает SELinux, но часто это требует ручных настроек.</li><li><b>Аудит и отслеживаемость. </b>Поскольку каждый контейнер — это процесс пользователя, системные журналы и аудиты однозначно показывают, кто именно его запустил. В модели Docker с демоном все действия в журналах проходят как действия пользователя root, что размывает ответственность.</li></ul><h2>Какая разница для инженера</h2><p>Представьте, что злоумышленник использует уязвимость в приложении внутри контейнера, чтобы вырваться из него:</p><ul><li>С Docker по умолчанию: атакующий получает доступ к демону, который работает как root.</li><li>С Docker в rootless-режиме риск снижен. Атакующий остаётся в рамках пользователя, который запустил демон.</li><li>С Podman атакующий попадает в песочницу того пользователя, который выполнил команду podman run. Его возможности строго ограничены. Он не может трогать системные службы, контейнеры других пользователей или критичные файлы хоста.</li></ul><p>Индустрия делает осознанный сдвиг в сторону security-by-default (безопасности по умолчанию). Podman здесь чувствует себя увереннее, поскольку его архитектура не заставляет вас делать лишние телодвижения для защиты. Вы с самого начала работаете в более безопасном контуре, не жертвуя при этом удобством или функциональностью.</p><figure><img src="https://media.tproger.ru/user-uploads/133848/2025-10-15/d867b45c-cb30-4319-9088-188bf8edb8ed.png" alt="" /></figure><p>Комментирует <b>Дмитрий Зайцев</b>, CTO Flocktory, программный директор DevOpsConf:</p><blockquote>Несмотря на то, что риски атаки в вашу сторону невелики — они есть, и примерно раз в год мы видим уязвимости в разных частях системы (но в основном в runc), которые позволяют зловреду выйти за пределы своего контейнера и получить доступ к докер-демону. Это, в свою очередь, работая от рута, даёт доступ ко всему серверу. Лучше заранее перестраховаться и перейти на решения без центрального демона с рут-доступом.</blockquote><p>Комментирует эксперт Лев Прокопьев, технический директор <a href="https://privesc.ru">Privesc Technique</a>:</p><blockquote>Мило всё это — стандарты, OCI, проверки на деплое. Буду честен: всё это — меры необходимые, но недостаточные. Когда внутри контейнера у вас дырявое приложение, плоская сеть и набор привилегий, которые дают атакующему лёгкий путь к хосту — вы в опасности. Можно ставить любую тулзу, но если в логике приложения заложены возможности вырваться из неймспейса (capabilities, setuid-баги, неограниченные mount/namespace-операции) — вы уже проиграли. Если в сети контейнеров открыт административный интерфейс, а в одном из контейнеров живёт «php-уродец» от племянника подрядчика, который пишет код после двух онлайн-курсов — поздравляю, у атакующего есть не одна, а десятки точек входа. У злоумышленников есть козырь, которого вы не имеете, — время и отсутствие реальных технических возможностей его деанонимизации. А вот e-mail-адреса и пароли ваших разработчиков порой встречаются в логах стиллеров. Вы тюнингуйте CI, но не забывайте, что в наше время паранойя спасает бизнес.</blockquote><p><i>Жёсткие факты, без иллюзий:</i></p><ul><li><i>Демонстрация standard-compliance и добавление проверок в CI — это полезно, но недостаточно.</i></li><li><i>Архитектурные решения движков — лишь часть картины; реальная опасность — в приложениях и в политике привилегий.</i></li><li><i>Плоская сеть + доступные админ-панели = тривиальная возможность для lateral movement в вашей инфраструктуре.</i></li><li><i>Непроверенный код в образах, секреты в Dockerfile/контексте сборки, неограниченные capability — прямой путь к компрометации хоста.</i></li><li><i>Нет ничего зазорного в том, чтобы смотрeть публичные образы на Docker Hub, но если вы тупо его скопировали и не проанализировали (например, с помощью https://github.com/wagoodman/dive), при наличии уязвимости у автора образа или при переиспользовании его конфигураций вы можете подарить атакующим точку входа».</i></li></ul><p><br /></p><h2>Совместимость: Podman учится говорить на языке Docker</h2><p>Огромная заслуга Docker — стандарт OCI (Open Container Initiative). Спецификации OCI Runtime и Image Format способны переносить контейнеры между разными системами. Образы, созданные в Docker, работают в Podman через общий формат. Это снимает главный барьер для миграции.</p><p>Podman понимает команды Docker. Алиас alias docker=podman у программистов <a href="https://www.thecrumb.com/posts/2022-11-15-docker-to-podman/">стал мемом</a>, но он реально работает. Большинство базовых команд выполняются одинаково благодаря совместимой CLI-структуре.</p><p>Но есть нюансы. Сложные сценарии, особенно связанные с сетью или volumes, могут вести себя по-разному. Прямая замена не всегда срабатывает при использовании специфических флагов или параметров монтирования.</p><p>Инструмент podman-docker заменяет бинарник Docker на Podman на системном уровне. Это помогает тестировать Podman в существующих CI/CD-пайплайнах без их переписывания, обеспечивая прозрачную замену.</p><p>Docker Compose — отдельная история. Podman долгое время не имел полноценной альтернативы. Сейчас есть podman-compose — реализация на Python, которая всё ещё догоняет по функциональности оригинал. Для простых случаев хватает, но для сложных композиций с несколькими сетями и томами могут возникнуть проблемы с совместимостью.</p><p>Комментирует Дмитрий Зайцев, CTO Flocktory, программный директор DevOpsConf:</p><blockquote>Это момент, на котором смена решения часто буксует. Docker Compose — буквально стандарт-дефакто для большинства ci-пайплайнов мира. В итоге на Podman и прочие аналоги легко и просто уходят в рантайме, где нужно только запускать контейнеры. А CI остаётся жить с Докером и проблемами, которые вызывает там docker in docker (добавьте ещё пару слоёв in docker по вкусу).</blockquote><p>В 2025 году Podman 4.x значительно улучшил совместимость с Compose через нативную поддержку Podman Compose. Однако если ваш пайплайн завязан на специфические функции Docker Compose V2, такие как расширения профилей или кастомные интерполяции, переход потребует дополнительного тестирования и адаптации конфигурационных файлов.</p><h2>Производительность: битва за миллисекунды и мегабайты</h2><p>В спорах о производительности контейнерных движков много мифов. Энтузиасты любят сравнивать синтетические бенчмарки, но в реальной работе разница часто незаметна.</p><p><b>Запуск контейнера.</b> Podman, благодаря отсутствию демона, избавляется от одного сетевого hop'а при коммуникации CLI с движком. На практике это экономит десятки миллисекунд. Для человеческого восприятия разница неощутима. Но в автоматизированных пайплайнах, где запускаются тысячи контейнеров последовательно, это может дать небольшой накопительный эффект.</p><p><b>Потребление памяти.</b> Архитектура без демона означает отсутствие постоянно висящего в памяти dockerd. Это экономит от 50 до 100 МБ оперативки. На сервере с десятками гигабайт RAM — это капля в море. Однако для embedded-систем, edge-устройств или стесненных сред каждый мегабайт на счету.</p><p><b>Сетевой стек.</b> И Docker, и Podman в 2025 году используют CNI для настройки сети. Оба поддерживают rootless-сети через slirp4netns. Пропускная способность и задержки практически идентичны. Разницу можно заметить только в очень специфических сценариях с интенсивным сетевым трафиком.</p><p><b>Время сборки образов. </b>Здесь Docker с BuildKit пока сохраняет небольшое преимущество за счет кэширования и параллельного выполнения слоев. Podman тоже развивает свою систему сборки, но для очень больших образов разница может составлять 5-10%.</p><p>Вывод по производительности простой. Не она должна быть решающим фактором выбора. Разница не настолько велика, чтобы из-за нее менять инструмент. Гораздо важнее архитектурные особенности и экосистема.</p><h2>Экосистема: что вокруг них выросло</h2><p>Docker — это целая вселенная. Docker Hub, Docker Desktop, Docker Scout, BuildKit. Огромная инфраструктура для разработки, сканирования образов и управления уязвимостями.</p><p>Podman Desktop — относительно молодой проект для macOS и Windows. Он предлагает графический интерфейс для управления контейнерами и подами и в ближайшее время способен  догнать по базовой функциональности Docker Desktop. Но экосистема плагинов и интеграций пока скромнее.</p><figure><img src="https://media.tproger.ru/user-uploads/133848/2025-10-15/71a0ccb3-0b87-4ad5-8bdd-59b1a3f33a0e.png" alt="" /></figure><p>Docker Hub остаётся крупнейшим реестром образов. Podman легко с ним работает. При этом вокруг Podman уже выросла собственная инфраструктура. Проекты по сканированию образов, такие как trivy, интегрируются с Podman не хуже.</p><p>Если вы завязаны на конкретные сервисы Docker вроде Scout или Build Cloud, переход на Podman будет болезненным. Если вы используете только базовые функции, разницы не заметите.</p><h2>Поддержка Pod: группа контейнеров как единое целое</h2><p>Изначально Podman задумывался как инструмент для работы с подами. Pod — это группа контейнеров, которые разделяют общее сетевое пространство, volumes и другие ресурсы.</p><p>Концепцию популяризировал Kubernetes. Podman позволяет создавать и управлять подами на одной машине. Это мощный инструмент для локальной разработки под Kubernetes.</p><p>Вы можете описать pod в YAML и запустить его через podman play kube. Это ближе к продакшен-окружению, чем отдельные контейнеры через Docker Compose.</p><p>Docker не имеет нативной поддержки пода. Есть сторонние плагины, но они не стали мейнстримом. Если ваша цель — Kubernetes, Podman даёт более точную эмуляцию его поведения.</p><h2>Что выбрать в 2025 году: практические рекомендации</h2><p>Сложно сказать однозначно, какой инструмент лучше. Всё сводится к вашим задачам, окружению и философии.</p><p>Выбирайте Docker, если:</p><ul><li>ваша команда привыкла к нему — переобучение обойдётся дороже гипотетических выгод;</li><li>вы плотно используете Docker Desktop на macOS/Windows — его экосистема пока богаче;</li><li>ваши CI/CD пайплайны завязаны на специфические фичи Docker Engine или Docker Compose V2;</li><li>вы активно используете Docker Scout, Build Cloud и другие проприетарные сервисы вендора.</li></ul><p>Смотрите в сторону Podman, если:</p><ul><li>безопасность — ваш приоритет: rootless-архитектура из коробки более эффективна;</li><li>вы разрабатываете для Kubernetes: возможность работать с подами на локальной машине — ощутимый плюс;</li><li>вы работаете в средах, где недопустимы демоны с правами root (строгие корпоративные политики, госсектор);</li><li>вы используете RHEL, Fedora, CentOS Stream, где Podman предустановлен и считается стандартом де-факто;</li><li>вам нравится философия Unix-way: одна программа — одна задача.</li></ul><p>Гибридный подход тоже возможен. Разработчики используют Docker Desktop на ноутбуке, а на продакшен-серверах крутится Podman. Инструменты оркестрации вроде Kubernetes скрывают разницу между Docker и Podman. Платформа работает с обоими движками через стандартные интерфейсы, поэтому пользователю не нужно задумываться о выборе.</p><p>Комментирует Лев Прокопьев, технический директор <a href="https://privesc.ru">Privesc Technique</a>:</p><p><i>Таблетка:</i></p><ol><li><i>Пересмотрите необходимость каждой capability. Если контейнеру не нужен CAP_SYS_ADMIN — удалите её. Пройдитесь по списку и вычёркивайте всё лишнее — философия «минимальных прав» обязательна.</i></li><li><i>Бизнес-логика под нож. Любая операция, которая запрашивает информацию из внешних сервисов (за эксплуатацию которых вы платите), запускает исполняемые файлы, делает mounts или управляет сетью, — должна быть проверена на предмет злоупотреблений. Логика должна быть проста, предсказуема и проверяема. Если читали новости недавно, наверняка видели, как в недавнем голосовании за изображение на купюре массово эксплуатировали недостатки верификации пользователей на основном сайте ЦБ. Несложно догадаться, что именно сотрудники регулятора получили жёсткую обратную связь и теперь придётся тратить бюджет не только на устранение тривиальных уязвимостей, но и на антикризисный PR.</i></li><li><i>Сегментируйте сеть. Никаких «все входят ко всем». Сетевой доступ по принципу least-privilege: management-interfaces — только из доверенных подсетей через jump-hosts и VPN, не из контейнерной сети.</i></li><li><i>Запретите админ-панели в открытом доступе. Если сервис нужен только для админов — закройте его за IP-фильтрами, MFA и надёжными механизмами контроля доступа.</i></li><li><i>Проверьте supply-chain. Кто собирает образы, какие зависимости подтягиваются, есть ли секреты в CI-контексте. Подпишите и верифицируйте артефакты.</i></li><li><i>Runtime-защита и аудит. Включите SELinux/AppArmor, seccomp-профили, логирование действий пользователей и процессов. Аудит должен показывать, кто и что запустил.</i></li><li><i>Тестируйте логику, а не только окружение. unit/integration + fuzzing + SAST/DAST по бизнес-логике — баги в логике ищутся иначе, чем уязвимости в движке. Разберитесь уже с Burp Professional — Postman круто, но это инструмент QA-шника.</i></li><li><i>Не доверяйте подрядчику по умолчанию. Код сторонних разработчиков — предмет проверки, а не слепого доверия. Code review, dependency-pinning, CVE-сканирование образов.</i></li><li><i>Автоматизируйте инцидент-реакцию. Планы, playbooks, тестовые срабатывания. Чем быстрее вы сокращаете время обнаружения, тем меньше у атакующего «времени в руке».</i></li><li><i>Домашнее задание. Возьмите SAST, например semgrep, и напишите к нему MCP-оснастку; поставьте в Ollama условный Qwen3-Coder и натравите на ваш код в тестовой среде промптом. Его задача — не просто найти уязвимости и пройти ваш compliance, а буквально «раскурочить» код: найти все потенциальные недостатки, внешние библиотеки, которые можно заменить нативным кодом, проверить весь пользовательский ввод и то, как он фильтруется, сделать анализ конфигураций и переменных окружения. И ещё важный нюанс — LLM не должна опрашивать о задаче каждые n секунд: RAG должен передавать завершённую задачу в LLM.</i></li></ol><h2>Прогноз на 2026: универсализация и специализация</h2><p>Мир не стоит на месте. К 2026 году границы между инструментами продолжат размываться. Эти прогнозы — экстраполяция текущих трендов в развитии инструментов:</p><ol><li><b>Полная совместимость.</b> Podman добьёт оставшиеся проблемы с Docker Compose. Мы увидим почти прозрачную взаимозаменяемость для 95% сценариев. Стандарт OCI победит.</li><li><b>Рост Podman в корпоративном секторе.</b> Благодаря усилиям Red Hat и IBM, Podman будет все чаще появляться в крупных компаниях. Особенно там, где есть сильная команда Linux и требования безопасности.</li><li><b>Docker сосредоточится на SaaS.</b> Бизнес Docker будет смещаться в сторону платных облачных сервисов: реестры, сканирование уязвимостей, управление образами. Движок Docker Engine может стать более открытым и модульным.</li><li><b>Война за десктоп.</b> Podman Desktop будет активно развиваться, догоняя по удобству Docker Desktop. Возможно, появление новых GUI-инструментов, которые работают поверх обоих движков.</li><li><b>Ниша для новых игроков.</b> Появятся инструменты, созданные под специфические сценарии: WebAssembly-контейнеры (Wasm), крайне легковесные среды. Нишевые решения для edge-устройств и IoT.</li></ol><p>К 2026 году вопрос «Docker или Podman?» может потерять остроту. Как сегодня мы не спорим, использовать ли vim или nano. Инструменты станут взаимозаменяемыми кирпичиками в более крупных системах. Вашим основным интерфейсом будет не CLI docker или podman, а платформа оркестрации или платформа разработки.</p><p>Комментирует Лев Прокопьев, технический директор <a href="https://privesc.ru">Privesc Technique</a>:</p><blockquote>Вкратце: сложно не любить Podman и не кайфовать от rootless-режима из коробки, но если ваша архитектура и приложения позволяют “выйти наружу” — вы создаёте идеальные условия для тихой и долговременной компрометации. Можете ставить все даты деплоя в зеленый CI-статус — злоумышленник же ставит себе цель не «поймать красный билд», а жить в вашей сети месяцами, собирая деньги, данные и аргументы для дальнейшей эскалации. Не устраняете уязвимости и не режете привилегии — значит, вы просто откладываете неизбежное. Разберитесь с этим сейчас, иначе красивые диаграммы по стандартам станут вашим приговором.</blockquote><p>Самый правильный подход в 2025 году — знать оба инструмента. Поэкспериментировать с Podman в pet-проекте. Установить Podman Desktop рядом с Docker. Прочувствовать разницу.</p><p>Выбор контейнерного движка становится сугубо прагматичным решением, основанным на конкретных требованиях проекта, а не на трендах в сообществе. Будущее за стандартами, а не за имплементациями.</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему Next.js ломает архитектуру и мешает строить масштабируемые системы</title>
      <link>https://tproger.ru/news/pochemu-next-js-lomaet-arhitekturu-i-mewaet-stroit-maswtabiruemye-sistemy</link>
      <comments>https://tproger.ru/news/pochemu-next-js-lomaet-arhitekturu-i-mewaet-stroit-maswtabiruemye-sistemy?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/pochemu-next-js-lomaet-arhitekturu-i-mewaet-stroit-maswtabiruemye-sistemy</guid>
      <description><![CDATA[<p>Архитектор Харшал Патил критикует Next.js: жёсткая связность, отсутствие модульности и ограничения мешают строить масштабируемые системы</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/pochemu-next-js-lomaet-arhitekturu-i-mewaet-stroit-maswtabiruemye-sistemy">Почему Next.js ломает архитектуру и мешает строить масштабируемые системы</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 02 Oct 2025 03:28:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчик и архитектор Харшал Патил жестко <a href="https://blog.webf.zone/why-next-js-falls-short-on-software-engineering-d3575614bd08">раскритиковал</a> <b>Next.js</b>, назвав его <b>«инструментом рендеринга, притворяющимся фреймворком»</b>.</p><p>По его словам, система нарушает базовые принципы проектирования: <b>объединяет все режимы рендеринга</b> (SSR, CSR, SSG, ISR), но делает это <b>«магическими» способами</b>, из-за чего теряется ясность и усложняется поддержка.</p><h2>Жесткая связность</h2><p>Next.js строится на четырех опорах — <i>CLI</i>, <i>компилятор</i>, <i>роутер</i> и <i>рантайм</i>.</p><p>Но заменить или <b>расширить</b> любую часть почти невозможно: миграция с <b>Webpack</b> на <b>Vite</b> в одном из проектов заняла более полугода. Такая связность убивает гибкость и мешает инновациям.</p><h2>Нет модульности</h2><p>По словам Патила, Next.js не предоставляет плагинной архитектуры: даже простые интеграции <b>проникают в кодовую базу</b> и <b>ломают абстракцию</b>.</p><p>Проблемы есть и с переменными окружения — фреймворк смешивает их на этапе сборки и выполнения, что <b>противоречит 12-Factor-принципам</b> и мешает корпоративным пайплайнам.</p><h2>Ограничения для бизнеса</h2><p>Эксперт приводит реальные кейсы, где Next.js бессилен: динамическая смена тем в CRM, модульные платформы для разных команд, финансовые системы без пересборки Docker-образов, проекты с dual-licensing.</p><p>Во всех случаях фреймворк накладывал ограничения и мешал масштабированию.</p><blockquote>Сложность убивает. Я выбираю простоту. Next.js — это удобный инструмент для быстрых проектов, но не фундамент для устойчивой архитектуры.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Глава 1.1. Развертывание StarRocks — сборка из исходников</title>
      <link>https://tproger.ru/articles/glava-1-1--razvertyvanie-starrocks---sborka-iz-ishodnikov</link>
      <comments>https://tproger.ru/articles/glava-1-1--razvertyvanie-starrocks---sborka-iz-ishodnikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[StarRocks]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/glava-1-1--razvertyvanie-starrocks---sborka-iz-ishodnikov</guid>
      <description><![CDATA[<p>Как выбрать релиз StarRocks, настроить Docker и собрать из исходников (FE/BE и Broker): dev-env, build.sh, ACR image accelerator, containerd, советы по AVX2/ARM.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/glava-1-1--razvertyvanie-starrocks---sborka-iz-ishodnikov">Глава 1.1. Развертывание StarRocks — сборка из исходников</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 28 Sep 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Перед развертыванием StarRocks часто встает вопрос выбора версии. На GitHub доступны архивы исходных кодов всех релизов, а на официальном сайте публикуются готовые бинарные пакеты для x86 (CentOS 7+). Рекомендуем ориентироваться на следующие принципы:</p><ul><li>Тестовая среда: используйте последний стабильный релиз (например, 3.5.6; см. страницу Tags на GitHub).</li><li>Staging (предпроизводственная) и Production (производственная) среды: используйте последний минорный релиз предыдущей стабильной ветки.</li><li>Если требуется новый функционал или критическая фиксация, можно собрать из актуального кода ветки main, используя официальный Docker-образ сборочного окружения.</li><li>Компонент BE (Backend) требует CPU с поддержкой AVX2. Возможна сборка без AVX2 (работоспособно, но не рекомендуется — нет полноценного покрытия тестами).</li><li>Начиная с 1.19 StarRocks поддерживает ARM, но потребует самостоятельной сборки на ARM-хосте (официальные готовые бинарники под ARM пока не публикуются).</li></ul><p>Справочные ссылки:</p><ul><li>Страница Tags (например, 3.5.6, 4.0.0-rc01): <a href="https://github.com/StarRocks/starrocks/tags">https://github.com/StarRocks/starrocks/tags</a></li><li>Release Notes 1.19 (сообщество): <a href="https://forum.mirrorship.cn/t/topic/552">https://forum.mirrorship.cn/t/topic/552</a></li></ul><p>Ниже — пример сборки из актуального кода ветки main с использованием официального Docker-образа.</p><h2>1. Установка Docker и загрузка сборочного образа</h2><p>Для примера используется CentOS 7.6 в виртуальной машине (рекомендуется ≥2 vCPU и ≥4 ГБ RAM). Во время сборки требуется стабильное сетевое подключение.</p><h3>1.1 Установка Docker</h3><h3>1.2 Запуск Docker и автозапуск</h3><h3>1.3 Проверка установки</h3><p>При успешном выполнении отобразится сообщение “Hello from Docker!”.</p><h3>1.4 Ускорение загрузки образов (для нестабильных каналов)</h3><p>Если загрузка официальных образов Docker медленная/нестабильная, можно использовать сервисы Alibaba Cloud Container Registry (ACR). Важно: официальный <a href="https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images">ACR image accelerator</a> больше не синхронизирует последние образы. Если образ не скачивается или тег latest не содержит актуальную версию, воспользуйтесь альтернативами:</p><ul><li>Подписка в ACR на зарубежные исходные образы (subscription of overseas source images).</li><li>Использование GA (Global Accelerator) для ускорения прямого доступа к зарубежным реестрам.</li></ul><p>Рекомендация для Production: минимизируйте зависимость от Docker Hub из‑за сетевых рисков.</p><p>Если вы используете containerd:</p><ul><li>Убедитесь, что в /etc/containerd/config.toml задан config_path, например:
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"
</li><li>Уберите конфликтующие mirrors (если есть), перезапустите containerd:
sudo systemctl restart containerd
</li><li>При ошибке старта изучите вывод:
journalctl -u containerd
</li><li>Создайте файл /etc/containerd/certs.d/docker.io/hosts.toml:
server = "https://registry-1.docker.io"

[host."https://&lt;your-ACR-accelerator-address&gt;"]
  capabilities = ["pull", "resolve", "push"]
</li></ul><h3>1.5 Загрузка сборочного образа StarRocks</h3><p>Выбирайте тег образа в соответствии с веткой/версией исходников (для ветки main — тег main; для ветки 3.5 — тег 3.5 и т. п.):</p><h3>1.6 Просмотр локальных образов</h3><h2>2. Получение исходников StarRocks</h2><h3>2.1 Клонирование из GitHub или скачивание архива</h3><p>Стандартно:</p><p>Если из‑за сетевых ограничений возникают ошибки (например, EOF), можно:</p><ul><li>использовать зеркало GitHub (пример):
git clone https://github.com.cnpmjs.org/StarRocks/starrocks.git
</li><li>либо скачать архив кода из браузера:
<a href="https://github.com/StarRocks/starrocks">https://github.com/StarRocks/starrocks</a></li><li>архив конкретного релиза:
<a href="https://github.com/StarRocks/starrocks/tags">https://github.com/StarRocks/starrocks/tags</a></li></ul><p>Чтобы ускорить клонирование, добавьте --depth 1 (если не требуется полная история).</p><h3>2.2 Загрузка архива на сервер и распаковка (вариант с ZIP)</h3><h3>2.3 Запуск контейнера со сборочным окружением и монтированием кэшей</h3><p>Рекомендуется смонтировать локальный Maven-кэш (~/.m2) для ускорения повторных сборок.</p><p>(Опционально — подключите ccache, смонтировав ~/.ccache, если это поддерживается образом.)</p><h3>2.4 Проверка запущенных контейнеров</h3><h3>2.5 Вход в контейнер</h3><h3>2.6 Переход в каталог исходников</h3><h3>2.7 Сборка FE и BE</h3><p>Скрипт скачает зависимости и выполнит сборку (может занять значительное время). Благодаря монтированию ~/.m2 зависимости будут переиспользованы в следующих сборках.</p><p>Результаты сборки — в каталоге output/:</p><h3>Сборка без AVX2 (только при необходимости; не рекомендуется)</h3><p>Измените build.sh, чтобы принудительно отключить AVX2:</p><p>Измените сборку сторонней библиотеки в thirdparty/build-thirdparty.sh (блок croaring):</p><p>Повторно выполните ./build.sh. Учтите: такой вариант не имеет полноценного покрытия тестами.</p><p><b>Полезные опции build.sh</b></p><h3>2.8 Сборка Broker</h3><p>Broker не собирается шагом выше — его нужно собирать отдельно:</p><p>Готовые файлы появятся в</p><p>.</p><h3>2.9 Выход и повторный запуск контейнера при необходимости</h3><p>Так как каталог с исходниками смонтирован в контейнер, результаты сборки доступны на хосте.</p><h2>Примечания и рекомендации</h2><ul><li>FE (Frontend) и BE (Backend) — основные компоненты StarRocks, сборка которых выполняется скриптом build.sh.</li><li>Для воспроизводимости привязывайте тег сборочного Docker-образа к ветке/версии исходников (например, starrocks/dev-env:3.5 для ветки 3.5.x).</li><li>Для ускорения повторных сборок используйте кэш Maven (~/.m2) и, при возможности, ccache для C++.</li><li>ARM: официальный сборочный Docker-образ пока не рассчитан на ARM. Для ARM-сборки потребуется нативный ARM-хост и корректные версии зависимостей (JDK, CMake и др.).</li><li>Список актуальных релизов и тегов: <a href="https://github.com/StarRocks/starrocks/tags">https://github.com/StarRocks/starrocks/tags</a></li><li>Release Notes 1.19 (сообщество): <a href="https://forum.mirrorship.cn/t/topic/552">https://forum.mirrorship.cn/t/topic/552</a></li></ul><p>После этих шагов у вас будут собранные бинарные артефакты FE/BE и Broker, готовые к дальнейшему развертыванию кластера StarRocks.</p>]]></content:encoded>
    </item>
    <item>
      <title>5 сервисов для мониторинга всех метрик инфраструктуры</title>
      <link>https://tproger.ru/articles/5-servisov-dlya-monitoringa-vseh-metrik-infrastruktury</link>
      <comments>https://tproger.ru/articles/5-servisov-dlya-monitoringa-vseh-metrik-infrastruktury?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-servisov-dlya-monitoringa-vseh-metrik-infrastruktury</guid>
      <description><![CDATA[<p>Подборка сервисов для мониторинга метрик инфраструктуры: инструменты, которые позволяют отслеживать состояние систем в реальном времени и предотвращать сбои.
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-servisov-dlya-monitoringa-vseh-metrik-infrastruktury">5 сервисов для мониторинга всех метрик инфраструктуры</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Oracle]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 19 Sep 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Инфраструктура редко падает внезапно — почти всегда система заранее подает сигналы: растет нагрузка, замедляются запросы, перегреваются ресурсы. Чтобы не ловить проблемы по факту, а управлять ими заранее, нужны сервисы, которые собирают и визуализируют метрики в реальном времени. В этой подборке мы собрали инструменты, которые помогают держать руку на пульсе всей инфраструктуры и принимать решения на основе данных, а не догадок.</p><h2>1. 10-Страйк: Мониторинг Сети Pro</h2><p><a href="https://www.10-strike.ru/network-monitor/">10-Страйк: Мониторинг Сети Pro</a> — это российская программа для системных администраторов, которая позволяет контролировать состояние сетевых устройств, серверов, рабочих станций, коммутаторов, баз данных и других ресурсов инфраструктуры. Она отслеживает ключевые параметры — от свободного места на дисках и загрузки процессора до температуры оборудования — и в случае проблем отправляет уведомления по email, SMS или в мессенджеры. Система может не только сигнализировать о сбоях, но и автоматически устранять их, например, перезапуская службы или выполняя скрипты.</p><h3>Технические возможности</h3><p>Продукт поддерживает десятки видов сетевых проверок через ICMP, SNMP, HTTP, SQL, SSH и другие протоколы. Возможно мониторить серверы Windows и Linux, сетевые службы, видеокамеры, принтеры, СУБД и промышленное оборудование. Визуализация данных доступна на карте сети с графиками и индикаторами. В версии Pro предусмотрен распределённый мониторинг с несколькими серверами и аген­тами, а также веб-интерфейс для удалённого управления.</p><h3>Сценарии использования</h3><p>Для DevOps и системных администраторов 10-Страйк подходит как инструмент централизованного мониторинга с алертами и картой сети. IT-отделы предприятий используют его для контроля доступности каналов связи, серверов, баз данных и устройств. Руководители могут формировать отчёты по аптайму и SLA для анализа стабильности работы инфраструктуры.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-18/5654eec1-f0ae-4170-aa26-922420d13f4e.png" alt="" /></figure><h3>Особенности</h3><p>Программа выделяется простотой настройки проверок, наличием наглядной карты сети и гибкой системой сигнализации. Важное преимущество — возможность распределённого мониторинга в удалённых сетях и работы в круглосуточном режиме без участия администратора. Решение разработано в России и подходит под задачи импортозамещения.</p><h3>Тарифы и условия</h3><p>Продукт распространяется по лицензии с ограничением на число сенсоров: версия Pro на 100 сенсоров стоит 40 000 рублей, стандартная версия — 20 000 рублей. Для корпоративных лицензий действует ограничение на количество серверов мониторинга.</p><h2>2. Deckhouse Prom++</h2><p><a href="https://deckhouse.ru/products/prompp/?utm_source=web&amp;utm_medium=tproger&amp;utm_campaign=monitoring">Deckhouse Prom++ </a>— это Open Source-система мониторинга на базе Prometheus, которая потребляет до 10 раз меньше памяти. Она собирает метрики приложений, сервисов и инфраструктуры в реальном времени, хранит их во встроенной TSDB и поддерживает PromQL для анализа. Deckhouse Prom++ умеет формировать алерты и легко интегрируется с Grafana, оставаясь привычным для команд, которые уже работают с Prometheus.</p><h3>Технические возможности</h3><p>Deckhouse Prom++ может собирать любые инфраструктурные метрики напрямую или через экспортеры: состояние серверов, контейнеров, сетей, баз данных и приложений. Главная оптимизация по сравнению с «ванильным» Prometheus — переработка Write Ahead Log — позволяет снизить потребление памяти без ущерба производительности. Продукт полностью совместим с API и настройками Prometheus: дашборды, правила алертинга и интеграции продолжают работать без изменений. Prom++ уже используется на более чем 1000 кластеров и поддерживает до 10 млн активных метрик на кластер.</p><h3>Сценарии использования</h3><p>DevOps-инженеры и SRE могут использовать Deckhouse Prom++ для мониторинга Kubernetes и традиционной инфраструктуры. Архитекторы и CTO получают возможность сократить расходы на RAM без отказа от привычной экосистемы. Prom++ подходит и для on-prem, и для облачных окружений, а также уже встроен в Deckhouse Kubernetes Platform.</p><h3>Особенности</h3><p>Ключевое преимущество Deckhouse Prom++ — низкое потребление ресурсов: до 10 раз меньше памяти, чем у Prometheus, и до 3 раз меньше, чем у VictoriaMetrics. Сервис полностью совместим с экосистемой Prometheus, не создаёт вендорлока и распространяется под лицензией Apache 2.0. Поддержка осуществляется инженерами Deckhouse и сообществом через открытый Telegram-чат.</p><h3>Тарифы и условия</h3><p>Deckhouse Prom++ — полностью бесплатный Open Source-продукт. Ограничений по количеству пользователей или метрик нет.</p><p>Есть <a href="https://github.com/deckhouse/prompp/?tab=readme-ov-file#migrating-from-prometheus">инструкция по миграции</a>, потребуется только предварительная конвертация WAL-файлов. Вы также сможете без труда вернуться с Deckhouse Prom++ на Prometheus.</p><p>Инженеры Deckhouse и сообщество помогают пользователям в Telegram-чате <a href="https://t.me/+rj_YQgUQbY1lNmIy">Prom++ User Group</a>.</p><h2>3. GMONIT</h2><p><a href="https://gmonit.ru/cio/?utm_source=PR&amp;utm_medium=globalcio&amp;utm_campaign=CIO">GMONIT </a>— российская платформа класса Observability, которая собирает и анализирует метрики, логи, трассировки и бизнес-показатели в едином интерфейсе. Она даёт ИТ-командам полный обзор цифрового контура: от сетей, серверов, баз данных и контейнеров до пользовательских действий и бизнес-метрик. GMONIT помогает перейти от «реактивного» реагирования на инциденты к проактивному управлению ИТ, сокращая время диагностики и повышая стабильность сервисов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-28/a6f2924b-7955-4982-9985-c4e4fc89bd88.png" alt="" /></figure><h3>Технические возможности</h3><p>GMONIT поддерживает мониторинг сетей, серверов, виртуальных машин, баз данных, контейнеров, API, реальных пользователей в браузере или мобильном приложении и бизнес-процессов. Система строится на микросервисной архитектуре, легко масштабируется и формирует дашборды для разных ролей — от инженеров до CIO. В одном интерфейсе доступны ключевые показатели доступности, SLA, конверсии, скорость обработки заказов и другие бизнес-метрики. Платформа обеспечивает предиктивную аналитику, раннее выявление аномалий и ускоренное RCA (Root Cause Analysis — анализ первопричин): TTD (Time To Detect — время до обнаружения) — менее 10 минут, RCA — около 15 минут.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-28/71bdfc71-5ed6-43b1-959e-78a2dbd1f61a.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Разработчики используют GMONIT для отладки сервисов и мониторинга CI/CD, что ускоряет релизы и сокращает время устранения ошибок.</li><li>QA-команды применяют платформу при нагрузочных тестах и фиксации ошибок в продакшене.</li><li>DevOps и SRE получают централизованный мониторинг с алертами, предиктивной аналитикой и интеграцией в пайплайны.</li><li>PM и CIO работают с визуальными панелями SLA, аптайма и бизнес-метрик, чтобы видеть реальное влияние инфраструктуры на продажи и пользовательский опыт.</li><li>Поддержка сокращает время реакции на инциденты и устраняет сбои до того, как о них сообщают пользователи.</li></ul><h3>Особенности</h3><p>GMONIT строится как масштабируемая система с единым «окном наблюдения»: метрики инфраструктуры, пользовательского опыта в браузере, приложений, API; а также вызовы во внешние сервисы и бизнес-процессы отображаются на одном дашборде. Архитектура ориентирована на работу с большими объёмами данных, а визуализация адаптирована как под инженеров, так и под управленцев. Сервис интегрируется с CI/CD, мессенджерами и сторонними системами через API. Поддерживаются как on-prem, так и облачные сценарии.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-28/aba0df2d-17c7-4249-9a0b-88337d507985.png" alt="" /></figure><h3>Тарифы и условия</h3><p>Информацию о тарифах можно найти на<a href="https://gmonit.ru/prices"> официальном сайте GMONIT</a>. Ограничений по числу пользователей и метрик нет. API и SDK доступны, а интеграции гибко настраиваются под нужды заказчика.</p><h3>Управление и поддержка</h3><p>Управление осуществляется через веб-интерфейс и API. Поддержка организована через чат, систему тикетов, SLA и подробную документацию.</p><h2>4. Zabbix</h2><p><a href="https://www.zabbix.com/">Zabbix</a> — это платформа мониторинга корпоративного уровня, которая обеспечивает полную наблюдаемость IT- и OT-инфраструктуры. Решение ориентировано на крупные компании и поставщиков управляемых услуг, отличается низкой совокупной стоимостью владения и предсказуемой моделью поддержки без лицензионных сборов. Zabbix создан для долгосрочного использования: он масштабируем, безопасен «по конструкции» и подходит для критически важных систем.</p><h3>Технические возможности</h3><p>Платформа поддерживает мониторинг серверов, приложений, облачных сервисов, сетевых устройств и IoT, включая многоуровневые среды. Важной функцией выступает вложенное низкоуровневое обнаружение, позволяющее автоматически создавать иерархические правила для хостов и сервисов. Zabbix предлагает мастер создания хостов, встроенную проверку форм для сокращения ошибок, расширенные сетевые карты и новый виджет карточки товара для детальной визуализации метрик. Платформа может быть развернута локально, в облаке Zabbix или в сторонних облаках (AWS, Azure, Google Cloud).</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-18/073c838d-dc16-44ac-a912-5e51b1b9e8d5.png" alt="" /><figcaption>Панель управления Azure</figcaption></figure><h3>Сценарии использования</h3><p>Zabbix применяют IT-отделы и DevOps-команды для централизованного мониторинга инфраструктуры и соответствия требованиям безопасности. Поставщики управляемых услуг используют его как MSP-дружественное решение с многопользовательским доступом и возможностью масштабирования под клиентов. Платформа востребована в высокозащищённых и регулируемых отраслях, где важны автономность и полный контроль над данными.</p><h3>Особенности</h3><p>Ключевые преимущества Zabbix — это открытый исходный код и отсутствие лицензионных ограничений. Архитектура платформы масштабируется «под будущее» и интегрируется с системами управления конфигурацией. Пользователи получают полное владение данными, гибкость в развертывании (on-premise, облако, гибрид) и широкие возможности кастомизации визуализации.</p><h3>Тарифы и условия</h3><p>Zabbix распространяется как решение с открытым исходным кодом и не требует лицензионных платежей. Стоимость формируется только за счет технической поддержки, которая предоставляется по фиксированным тарифам в зависимости от уровня сервиса.</p><h2>5. LibreNMS</h2><p><a href="https://www.librenms.org/">LibreNMS</a> — это система мониторинга сетевой инфраструктуры с автоматическим обнаружением устройств и сервисов. Она ориентирована прежде всего на мониторинг сетей по SNMP, но также поддерживает серверы на Windows, Linux и FreeBSD через собственные агенты. Решение работает на базе PHP и MySQL, имеет удобный веб-интерфейс, мобильные приложения и широкий набор встроенных метрик, которые не требуют ручной настройки.</p><h3>Технические возможности</h3><p>Система автоматически обнаруживает топологию сети с помощью протоколов CDP, FDP, LLDP, OSPF, BGP, SNMP и ARP. Поддерживается интеграция с NfSen, collectd, SmokePing, RANCID и Oxidized. Встроенный API позволяет управлять установкой, строить графики и выгружать данные. Реализована гибкая система оповещений с поддержкой email, IRC, Slack и других сервисов, а также встроенная биллинговая система для учета использования полосы пропускания. LibreNMS поддерживает различные методы аутентификации, включая LDAP, Radius и Active Directory, и обновляется автоматически.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-18/7d288b2e-8981-40f2-9ae2-3624f57392e0.png" alt="" /></figure><h3>Сценарии использования</h3><p>LibreNMS выбирают компании, которым важно быстрое развертывание мониторинга сети без сложной ручной настройки. Решение подходит интернет-провайдерам и корпоративным IT-отделам для учета трафика и выставления счетов, а также администраторам, которым нужен автоматический контроль устройств и серверов с оповещениями в удобных каналах. Благодаря мобильным приложениям и демо-версии система подходит для тестирования и удаленной работы.</p><h3>Особенности</h3><p>Ключевыми преимуществами LibreNMS выступают простота запуска и поддержка практически всех популярных сетевых устройств «из коробки». Автоматическое обнаружение и распределенный опрос упрощают масштабирование, а встроенный биллинг и интеграции делают систему полезной не только для мониторинга, но и для коммерческих задач.</p><h3>Тарифы и условия</h3><p>LibreNMS распространяется как проект с открытым исходным кодом и бесплатен для использования. Доступна онлайн-демонстрация (<a href="https://demo.librenms.org">https://demo.librenms.org</a>, логин: demo, пароль: demouser).</p>]]></content:encoded>
    </item>
    <item>
      <title>Где развернуть бота или API — подборка VPS, которые не тормозят</title>
      <link>https://tproger.ru/articles/gde-razvernut-bota-ili-api---podborka-vps--kotorye-ne-tormozyat</link>
      <comments>https://tproger.ru/articles/gde-razvernut-bota-ili-api---podborka-vps--kotorye-ne-tormozyat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/gde-razvernut-bota-ili-api---podborka-vps--kotorye-ne-tormozyat</guid>
      <description><![CDATA[<p>Мы собрали подборку провайдеров VPS, где можно быстро поднять сервис — от тестового окружения до продакшн-нагрузки. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/gde-razvernut-bota-ili-api---podborka-vps--kotorye-ne-tormozyat">Где развернуть бота или API — подборка VPS, которые не тормозят</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Быстрый старт]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 04 Sep 2025 08:25:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Где держать бота или API, чтобы они не падали под нагрузкой? Условий для этого всего несколько: предсказуемые ресурсы, удобное управление и стабильная инфраструктура.</p><p>Мы собрали подборку провайдеров VPS, где можно быстро поднять сервис — от тестового окружения до продакшн-нагрузки. Каждый вариант отличается своим подходом: где-то ставка на скорость запуска, где-то на бэкапы и приватные сети, а где-то на инфраструктурные гарантии.</p><h2>KoaraCloud</h2><h3>Железо и минимальный порог входа</h3><p>Бесплатных тестовых периодов <a href="https://koara.cloud/?from=7957&amp;utm_source=tproger&amp;utm_medium=article&amp;utm_campaign=botapi&amp;utm_content=link" rel="nofollow">провайдер</a> не предоставляет, но минимальный тариф обойдётся в 279 рублей в месяц. За эти деньги выдают машину на базе процессора Ryzen 9 3900 с 1 vCPU, 1 ГБ оперативной памяти и диском на 15 ГБ. Ресурсы честно изолированы с помощью аппаратной виртуализации KVM, поэтому соседи по серверу не смогут забрать ваше процессорное время.</p><p>К каждому серверу бесплатно идёт выделенный IPv4, а если для архитектуры API требуется IPv6, адрес выдают по отдельному запросу. Мощностей стартового тарифа обычно хватает, чтобы развернуть легковесное API или Telegram-бота без серьезных нагрузок. Для тех, кто пишет бэкенд на PHP, предусмотрена установка окружения с ISPmanager в один клик прямо из панели управления.</p><h3>Практика: как держит нагрузку</h3><p>Отклик серверов площадки до дата-центров Telegram составляет около 10 мс. В качестве примера из реальной практики: на мощностях провайдера крутится развлекательный Telegram-бот, который обслуживает аудиторию более 10 000 чатов. Он работает на тарифе START-2 — это аналог базового сервера, но с увеличенным объемом диска и 2 ГБ RAM.</p><p>За пять месяцев непрерывного аптайма просадок по производительности железа не фиксировалось. Случились лишь две потери связности по сети, но это были глобальные сбои, о которых провайдер заранее выпускал уведомления.</p><h3>Саппорт и решение инцидентов</h3><p>Штат технической поддержки работает круглосуточно. Часть рутинных задач площадка закрывает автоматически с помощью ИИ, но при необходимости к тикету подключается живой инженер — среднее время ответа составляет 5–10 минут. Технические неполадки обычно носят очень локальный характер и затрагивают лишь несколько серверов клиентов. Информацию о таких сбоях сразу публикуют в специальном канале, а на само решение уходит от 5 до 20 минут.</p><p>Связаться с техподдержкой можно в личном кабинете на сайте. Для общих вопросов предусмотрены Telegram-бот, чат на сайте и отдельный чат комьюнити.</p><h2>2. Beget: VPS с посуточной тарификацией и готовыми сборками</h2><p><a href="https://beget.com/ru/vps">Beget</a> предлагает виртуальные серверы с посуточной тарификацией и запуском за секунды. Для разработчиков это значит, что можно развернуть бота или тестовый API с ходу, а потом уже решать, насколько масштабировать проект. В придачу — встроенные сборки популярных инструментов, автоматические бэкапы и мониторинг, который сам предупредит о проблемах.</p><h3>Базовая конфигурация</h3><p>Минимальный тариф начинается с 1 CPU (Intel Xeon Scalable или AMD Epyc 3–3.3 ГГц), 1 ГБ RAM и 10 ГБ NVMe-диска. Стоимость — 7 ₽ в день. В линейке есть варианты до 8 CPU и 16 ГБ RAM, что позволяет поднимать проекты разного масштаба. Подключение занимает меньше минуты, а тариф можно «докрутить» на ходу.</p><h3>Сценарии для ботов и API</h3><p>На минимальном тарифе можно без проблем держать телеграм-бота или внутренний API для небольшой команды: авторизация, опросники, простые интеграции. Для проектов с нагрузкой в несколько тысяч запросов в сутки хватает даже пары ядер. Если требуется больше (например, API с долгоживущими соединениями или сервисы с видеоконференциями), конфигурацию можно нарастить буквально за минуту.</p><h3>Функции для разработчиков</h3><ul><li>Поддержка Docker «из коробки», что удобно для микросервисов и API;</li><li>Более 50 готовых сборок: от Ubuntu 24.04 и Hestia CP до BitrixVM и FASTPANEL;</li><li>Автоматические бэкапы, которые можно восстановить на другой сервер или развернуть отдельные файлы без остановки работы;</li><li>Приватные сети с пропускной способностью 1 Гб/сек для балансировки нагрузки и выноса базы данных;</li><li>Интеграция с Telegram: уведомления о превышении лимитов CPU/RAM/SSD приходят прямо в чат.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-09-02/e515250b-82da-4e0c-b91e-ff3528e61944.png" alt="" /></figure><h3>Панель и управление</h3><p>Управление серверами и доменами объединено в одном дашборде: там же доступны DNS-хостинг, почта на домене и файловый менеджер. Есть встроенный VNC-терминал с вкладками и возможность мониторинга ресурсов в реальном времени.</p><h3>Стабильность и инфраструктура</h3><p>Сервера работают на KVM без оверселлинга, то есть ресурсы действительно выделены. Дата-центры в России, Казахстане и Европе соответствуют Tier III: профилактика и ремонты проходят без остановки сервисов. Плюс встроенная защита от DDoS на сетевом уровне.</p><h3>Поддержка</h3><p>Круглосуточная помощь по вопросам VPS, DNS и доменов. Без навязывания апгрейдов, но с разбором проблем — полезно, если ночью упал какой-то сервис и нужно быстро понять, где слабое место.</p><p>Beget — это вариант для тех, кому важен быстрый старт (сервер за минуту) и готовая экосистема — от Docker и панелей до приватных сетей и автоматических бэкапов. Подходит для ботов и API, где нужна предсказуемость ресурсов без оверселлинга и удобный мониторинг с уведомлениями.</p><h2>3. Спринхост — VDS в формате «Спринтбокс»</h2><p><a href="https://sprinthost.ru/tariffs/vds">VDS здесь продаются в виде боксов</a>, которые можно запустить за пару секунд и остановить, если проект временно не нужен. Это ближе к модели «завёл — работает, выключил — не платишь», что удобно для тестовых окружений или сервисов с непостоянной нагрузкой.</p><h3>Конфигурации и цены</h3><ul><li>Джун: 1 CPU, 512 МБ RAM, 10 ГБ NVMe — от 91 ₽ в месяц</li><li>Мидл: 2 CPU, 2 ГБ RAM, 30 ГБ NVMe — от 691 ₽ в месяц</li><li>Сеньор: 4 CPU, 6 ГБ RAM, 70 ГБ NVMe — от 2 291 ₽ в месяц</li></ul><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-09-02/ad528e10-e059-432d-aa0c-8126664f69e5.png" alt="" /></figure><p>Все тарифы идут с портом на 10 Гбит/с и безлимитным трафиком.</p><h3>Сценарии для ботов и API</h3><p>Минимальная конфигурация подойдёт для лёгких телеграм-ботов или микросервисов с парой сотен пользователей в день. Если нагрузка растёт, «Мидл» или «Сеньор» уже позволяют держать полноценный API с тысячами запросов и несколькими интеграциями. Отдельный плюс — IPv4 и целая подсеть IPv6 в комплекте, что полезно для сервисов с большим количеством соединений.</p><h3>Что выделяет Спринтбокс</h3><ul><li>10 Гбит/с порт даже на минимальном тарифе — редкость для сегмента VDS;</li></ul><ul><li>Автоматические бэкапы за последние 30 дней хранятся отдельно и не съедают дисковое место;</li></ul><ul><li>Управление через телеграм-бота — мониторинг и базовые операции доступны прямо в мессенджере;</li></ul><ul><li>Большое количество готовых образов: можно поднять сервер с чистой ОС или сразу с приложением.</li></ul><h3>Инфраструктура и поддержка</h3><p>Сервера размещаются в двух Tier III дата-центрах («АТОМДАТА Xelent» и «Ростелеком-ЦОД»). Используется QEMU-KVM, так что ресурсы предсказуемо закреплены за пользователем. Поддержка отвечает круглосуточно и может помочь с переносом виртуальной машины, если она тоже на KVM.</p><p>Спринтбокс подойдёт для тех случаев, когда нужна скорость запуска, гибкая тарификация по дням и возможность управлять инфраструктурой через Telegram. Хороший вариант для ботов и API, где нагрузка может меняться, а быстрый масштаб или пауза в работе — часть рутинного сценария.</p><h2>4. Рег.ру — VPS с почасовой оплатой и API для управления</h2><p><a href="https://www.reg.ru/vps/">Услуга построена на KVM-виртуализации</a>, что даёт предсказуемое поведение серверов — работать с ними можно так же, как с полноценным физическим железом. Создание нового VPS занимает около минуты, после чего сразу можно переходить к настройке.</p><h3>Конфигурация и тарифы</h3><p>Пример минимального тарифа:</p><ul><li>1 vCPU (2.8 ГГц)</li><li>1 ГБ RAM DDR4</li><li>10 ГБ NVMe SSD</li><li>1 плавающий IP</li></ul><p>Стоимость: от ~0,94 ₽/час (~630 ₽ в месяц). Минимальный платёж — 100 ₽.</p><p>Есть и другие тарифы, которые масштабируются по CPU, памяти и дискам. Оплата почасовая, что удобно для тестов, обучения или временных проектов.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-09-02/4619912c-b62e-4398-bf22-15548a9aa8fe.png" alt="" /></figure><h3>Сценарии использования для ботов и API</h3><p>Минимальная конфигурация подходит для учебных API, внутренних ботов в команде или тестовых окружений. На тарифах постарше уже можно держать продакшн-сервисы с постоянной нагрузкой: инфраструктура выдерживает тысячи запросов и умеет справляться с сетевыми атаками. Поддержка популярных шаблонов (LAMP/LEMP, Node.js, Django, Docker) позволяет развернуть готовый стек из коробки.</p><h3>Что выделяет Reg.ru</h3><ul><li>Автоматические бэкапы и снэпшоты: до четырёх копий в неделю + ежедневные сохранения при почасовой оплате.</li><li>API для управления VPS: удобно интегрировать в CI/CD или собственные панели.</li><li>Сетевая изоляция: клиенты не делят один широковещательный домен, что снижает риски и повышает стабильность.</li><li>Резервные серверы «на подхвате»: при поломке железа диски переносятся на запасной сервер за 15–20 минут.</li><li>Защита от DDoS (L3/L4) включается автоматически при первых признаках атаки.</li></ul><h3>Дата-центры</h3><p>Сервера расположены в Москве (Курчатовский институт), Санкт-Петербурге (Tier III ЦОД), и Тольятти («Жигулевская долина», сертифицированный Tier Facility). Это значит, что проекты разворачиваются ближе к пользователям и имеют запас по надёжности.</p><h3>Поддержка и документация</h3><p>Есть круглосуточная поддержка и база знаний на русском. Для администрирования можно выбрать как коммерческую (ispmanager), так и бесплатную панель (FastPanel).</p><p>Reg.ru подойдёт, если нужны предсказуемость работы и инфраструктурные страховки: изоляция сетей, резервные серверы и защита от DDoS. Удобно для API и ботов, которые должны работать стабильно и без простоев, даже если что-то ломается на железном уровне.</p><h2>5. Евробайт</h2><p><a href="https://eurobyte.ru/?utm_source=tproger&amp;utm_medium=article&amp;utm_campaign=rating&amp;utm_term=gde+razvernut+bota+ili+api"><b>Евробайт</b></a>
предлагает VPS с упором на стабильность и гибкость, что делает их удобным
решением для запуска ботов и API. Минимальный тариф начинается от 145 ₽ в месяц
и включает 1 ядро CPU, 512 MB RAM и 10 GB NVMe-диска. Доступна также посуточная
аренда от 5 дней, что подходит для тестов или краткосрочных проектов.</p><h2>Что выделяет Евробайт</h2><p>На практике серверы выдерживают работу
Telegram-бота с нагрузкой до 600 активных пользователей одновременно и
скоростью до 130 запросов в секунду без лагов. Среднее время отклика составляет
90–120 мс, аптайм — 99,7% при стабильном ping и отсутствии потерь пакетов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-02/aedd25dc-166b-4928-a706-9d9767b9af81.png" alt="" /><figcaption>скриншот интерфейса</figcaption></figure><h2>Инфраструктура хостинга</h2><p>Инфраструктура построена на быстрых NVMe
SSD и канале в 1,5 Тбит/с, дата-центры уровня Tier III расположены в Москве и
Нидерландах, а защита от DDoS обеспечивает бесперебойную работу. Есть
root-доступ, SSH, выбор ОС и готовые окружения с Python, что удобно для
разработчики скриптов, парсеров и Telegram-ботов.</p><h2>Тарифы и поддержка</h2><p>Все тарифы включают безлимитный трафик,
выделенный IP, бесплатный SSL и удобные панели управления (ispmanager или
FastPanel). В любой момент можно увеличить ресурсы без потери данных. Поддержка
работает 24/7 через тикеты, телефон, чат, Telegram и соцсети — среднее время
ответа не превышает 10 минут.</p><h2>6. PSB HOSTING</h2><p><a href="https://psb.hosting/">PSB HOSTING</a> — это хостинговое решение для быстрой и стабильной работы проектов, построенное на современном оборудовании с акцентом на производительность и надежность. В основе инфраструктуры — процессоры AMD и Intel, оперативная память DDR5, NVMe SSD и выделенные каналы до 10 Гбит/с. Все серверы размещены в дата-центрах уровня Tier III+ и Tier IV, что гарантирует стабильный трафик и доступность до 99,99%.</p><h2>Особенности решения</h2><p>Провайдер предлагает аренду виртуальных серверов (VPS) в Европе и США. Доступны как стандартные конфигурации, так и High-CPU VPS на базе AMD Ryzen 7950X для задач, требующих максимальной вычислительной мощности. Используется виртуализация KVM, обеспечивающая полную изоляцию ресурсов и стабильную работу.</p><p>Возможна предустановка популярных окружений и программ: Docker, LAMP, Node.js, Wordpress, Django, FastPanel, Keitaro, OpenVPN, Wireguard, Bitrix и другие. Все серверы создаются моментально после оплаты, достаточно дождаться установки выбранной ОС.</p><h2>Кому может быть полезен</h2><p>PSB HOSTING подходит для разработчиков и компаний, которым нужны быстрые VPS в зарубежных локациях, поддержка Windows, Linux и FreeBSD, а также гибкие настройки окружения под задачи. Благодаря неограниченному трафику и поддержке современных решений, сервис удобен как для веб-проектов и приложений, так и для разворачивания корпоративных сервисов, тестирования или запуска приложений с высокой нагрузкой.</p><h2>Стоимость</h2><p>Цены стартуют от $6 в месяц (1 vCPU, 2 GB RAM, 30 GB SSD NVMe). Оплата возможна банковскими картами, через Qiwi, а также криптовалютами (BTC, ETH, USDT, TON и др.). Для всех услуг действует возврат средств в течение 72 часов, если качество не соответствует ожиданиям.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-02/b66b4c4d-3c65-4d68-bc9a-c2a04d0dbc8f.png" alt="" /><figcaption>скриншот тарифов</figcaption></figure><h2>Как выбрать VPS</h2><p>Выбор VPS для бота или API в 2025 году зависит от вашего сценария:</p><ul><li>если нужен быстрый запуск с готовыми сборками и уведомлениями в Telegram, подойдёт Beget с посуточной тарификацией и приватными сетями для балансировки нагрузки;</li><li>для тестовых проектов с паузами в работе — Спринтхост с портом 10 Гбит/с и безлимитным трафиком, где даже минимальный тариф выдерживает сотни пользователей;</li><li>если важна почасовая оплата и API для CI/CD — Рег.ру с автоматическими бэкапами и защитой от DDoS, обеспечивающими стабильность при пиковых запросах;</li><li>для простых ботов с root-доступом и поддержкой Python — Евробайт с аптаймом 99,7% и скоростью отклика 90–120 мс под нагрузкой до 130 запросов в секунду;</li><li>для международных проектов с высокой мощностью — PSB HOSTING с DDR5 и NVMe в Tier III+ дата-центрах, где трафик неограничен, а возврат средств возможен в 72 часа.</li></ul><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>Почему без знания Linux, Kubernetes останется для вас магией</title>
      <link>https://tproger.ru/news/pochemu-bez-znaniya-linux--kubernetes-ostanetsya-dlya-vas-magiej</link>
      <comments>https://tproger.ru/news/pochemu-bez-znaniya-linux--kubernetes-ostanetsya-dlya-vas-magiej?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/pochemu-bez-znaniya-linux--kubernetes-ostanetsya-dlya-vas-magiej</guid>
      <description><![CDATA[<p>Kubernetes строится на Linux-механизмах вроде namespaces, cgroups и eBPF, поэтому без знаний Linux его работа остаётся «магией</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/pochemu-bez-znaniya-linux--kubernetes-ostanetsya-dlya-vas-magiej">Почему без знания Linux, Kubernetes останется для вас магией</a>»</p>]]></description>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 18 Aug 2025 04:10:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Kubernetes принято считать мощным инструментом для оркестрации контейнеров, но все его «волшебство» построено на фундаментальных механизмах Linux.  Об этом идет речь в свежем <a href="https://medium.com/@anishnarayan/learn-linux-before-kubernetes-60d27f0bcc09">посте</a> на платформе Medium.</p><p>Если не разбираться в этих технологиях, работа Kubernetes выглядит как магия: создаешь под и вдруг у него есть собственная сеть, ограничения по CPU и память, отдельная файловая система и даже правила безопасности.</p><p>Под капотом же работают вполне конкретные компоненты ядра Linux: <b>namespaces, cgroups, iptables/nftables, seccomp/AppArmor, OverlayFS </b>и<b> eBPF</b>.</p><p>Именно они отвечают за изоляцию, контроль ресурсов, сетевые правила, безопасность и файловые слои.</p><h2>Как Kubernetes использует Linux</h2><ul><li><b>Namespaces</b> изолируют процессы, сеть, файловые системы, пользователей и IPC. Именно они позволяют подам работать как будто в собственном окружении.</li><li><b>cgroups</b> управляют ресурсами: когда в поде прописаны resources.requests и resources.limits, Kubernetes через cgroups регулирует доступ к CPU и памяти.</li><li><b>iptables / nftables</b> обеспечивают сетевые возможности: от NAT для ClusterIP-сервисов до реализации сетевых политик.</li><li><b>OverlayFS</b> делает возможной архитектуру Docker-образов и быструю работу контейнеров: базовый слой остается неизменным, поверх накладывается writable-слой.</li><li><b>eBPF</b> открывает новый уровень сетевой безопасности и наблюдаемости. Например, Cilium заменяет iptables и использует eBPF для реализации политик безопасности на уровне L3–L7, а также для трассировки трафика и сервисов.</li></ul><h2>Зачем это знать</h2><p>Kubernetes и Docker — это всего лишь удобные обертки над возможностями Linux.</p><p>Чтобы понимать, что реально происходит с контейнерами, уметь оптимизировать их работу и грамотно устранять проблемы, нужно знать, как работают <b>Linux namespaces, cgroups, сетевые фильтры </b>и <b>файловые подсистемы</b>.</p><p>Именно понимание Linux превращает Kubernetes из «магического» инструмента в предсказуемый и управляемый механизм.</p><p><b>А значит, вывод здесь может быть лишь один</b>: сначала стоит разобраться в Linux и тогда Kubernetes и Docker перестанут быть магией и станут мощным инструментом в ваших руках.</p>]]></content:encoded>
    </item>
    <item>
      <title>Куда двигаться после изучения Django: советы для Python-разработчиков</title>
      <link>https://tproger.ru/articles/kuda-dvigatsya-posle-izucheniya-django--sovety-dlya-python-razrabotchikov-257299</link>
      <comments>https://tproger.ru/articles/kuda-dvigatsya-posle-izucheniya-django--sovety-dlya-python-razrabotchikov-257299?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгения Епихина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kuda-dvigatsya-posle-izucheniya-django--sovety-dlya-python-razrabotchikov-257299</guid>
      <description><![CDATA[<p>В статье разбираемся, почему Django — далеко не финиш в карьере, и в каких направлениях можно двигаться Python-разработчику.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kuda-dvigatsya-posle-izucheniya-django--sovety-dlya-python-razrabotchikov-257299">Куда двигаться после изучения Django: советы для Python-разработчиков</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Парсинг]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Raspberry Pi]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Асинхронное программирование]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[NoSQL]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Neo4j]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 12 Aug 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Django — это веб-фреймворк на языке Python, который позволяет быстро создавать сложные веб-приложения. Он включает в себя готовые компоненты для работы с базами данных, маршрутизацией URL, обработкой форм, аутентификацией пользователей и админ-панелями, что значительно ускоряет разработку и упрощает поддержку проектов.</p><p>Владение Django — это старт, а не финиш. Чтобы оставаться востребованным, нужно постоянно расширять знания и навыки. В этой статье разберем пути и направления для улучшения своих компетенций.</p><h2>Почему владение Django — не предел для разработчика</h2><h2>Особенности Django</h2><p>Django используют для разработки веб-приложений разной сложности: при работе с большими базами данных, для создания сервисов, способных обслуживать большое количество пользователей. На нём создают соцсети, новостные сайты, веб-версии приложений, онлайн-магазины.</p><p>Основные плюсы:</p><ul><li><b>Полноценный стек</b>: ORM для работы с базой, мощная система маршрутизации URL, шаблоны для рендеринга, встроенная админка, формы, система аутентификации и авторизации.</li><li><b>Архитектура MTV (Model-Template-View)</b>: похожа на классический MVC, но с особенностями, которые упрощают разделение логики, представления и данных.</li><li><b>Безопасность</b>: Django автоматически защищает от CSRF, XSS, SQL-инъекций и других распространенных атак. Не нужно писать много дополнительного кода.</li><li><b>Активное сообщество и экосистема</b>: тысячи сторонних пакетов, расширений и готовых решений.</li><li><b>Поддержка нескольких баз данны</b>х: PostgreSQL, MySQL, SQLite, Oracle и др.</li></ul><p>Ограничения:</p><ul><li><b>Синхронная природа Django</b>.</li><li><b>Монолитность</b>: архитектура фреймворка ориентирована на создание крупных приложений, но в микросервисах может быть избыточна.</li><li><b>Ограниченная гибкость ORM</b>: нестандартные SQL-запросы иногда сложно выразить средствами ORM, приходится использовать raw SQL или сторонние библиотеки для запросов.</li><li><b>Строгие правила организации кода</b>: требуют дисциплины и могут ограничивать свободу в архитектурных решениях.</li><li><b>Недостаточная производительность</b>: уступает лёгким асинхронным фреймворкам (например, FastAPI), особенно под высокими нагрузками. Но для большинства проектов пока это не критично.</li></ul><h2>В каком направлении двигаться после изучения Django</h2><blockquote>Задача — создавать продукт, который будет нужен конечному потребителю.</blockquote><h3>Первое направление для развития — расширить инструментарий для решения разных задач в веб-разработке</h3><p>Возможные пути:</p><ul><li>Изучить другие веб-фреймворки (Flask, FastAPI)</li><li>Углубиться в асинхронное программирование (asyncio, aiohttp)</li><li>Работать с API и микросервисами</li></ul><h4>Flask и FastAPI</h4><p>Flask — минималистичный микрофреймворк, даёт полную свободу в выборе компонентов. Используют для небольших приложений и микросервисов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-12/bbe7c040-14de-426d-9a10-c556f7319bee.png" alt="" /><figcaption>Пример простой команды на Flask</figcaption></figure><p>FastAPI — современный асинхронный фреймворк, ориентирован на создание высокопроизводительных API. Поддерживает стандарт OpenAPI и автоматическую генерацию документации. Он быстрее Flask и Django благодаря asyncio и Pydantic.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-12/33a27277-5136-4a03-8af2-f436db42fa99.png" alt="" /><figcaption>Пример простого API на FastAPI</figcaption></figure><h4>Асинхронное программирование</h4><p>Веб-разработка всё активнее использует асинхронные технологии. Django не всегда справляется с задачами высокой конкурентной нагрузки.</p><p>Поэтому изучение asyncio — стандартной библиотеки Python для асинхронного программирования — откроет перед вами новые возможности. Вместе с aiohttp или тем же FastAPI вы сможете создавать приложения, которые обрабатывают тысячи одновременных соединений. Это особенно важно для real-time сервисов, чат-приложений и систем с интенсивным обменом данными.</p><h3>Второе направление — расширить навыки в смежных областях</h3><p>Можно пойти по пути расширения компетенций за пределы основной специализации. Важно не только уметь писать код, но и понимать, как приложения разворачиваются и работают в продакшене. Знание DevOps-практик помогает наладить эффективное взаимодействие между разработкой и эксплуатацией.</p><h4>Изучение DevOps и контейнеризации</h4><p>Контейнеры позволяют запускать приложения в изолированной среде, это упрощает настройку и развертывание. Например, Docker помогает упаковать приложение с зависимостями в один контейнер, а Kubernetes — управлять такими контейнерами в продакшене. Знание этих технологий улучшит взаимодействие с операционной командой и ускорит выпуск новых версий приложений.</p><h4>CI/CD и автоматизация процессов</h4><p>Непрерывная интеграция (Continuous Integration) и непрерывное развертывание (Continuous Deployment) — ключевые практики современной разработки ПО. Они позволяют автоматизировать сборку, тестирование и доставку приложений, масштабировать процессы.</p><p>Инструменты CI/CD (например, Jenkins, GitLab CI/CD, GitHub Actions) помогают настроить автоматические пайплайны, которые обеспечивают быструю обратную связь и минимизируют человеческий фактор в релизах. Автоматизация процессов снижает количество ошибок и позволяет сосредоточиться на разработке новых функций.</p><p>Настройка непрерывной интеграции и доставки (Continuous Integration / Continuous Delivery) снижает поток ошибок при релизах и экономит время. Пример: GitHub Actions для автоматического запуска тестов и сборки проекта при каждом коммите.</p><h4>Больше знаний в области баз данных</h4><p>Помимо классических реляционных баз данных (PostgreSQL, MySQL), современные приложения часто используют NoSQL для специфичных задач. MongoDB, Redis, Cassandra обеспечивают гибкость в хранении данных, горизонтальное масштабирование и высокую производительность при работе с большими объемами информации.</p><p>Графовые базы данных (Neo4j, ArangoDB) предназначены для эффективного хранения и анализа связей между объектами, что важно для социальных сетей, рекомендательных систем и других приложений с богатой структурой.</p><p>Так, Redis хорошо подходит для кэширования данных, а Neo4j — для сложных связей между объектами.</p><h3>Третье направление — переход к другим аспектам Python-разработки</h3><p>Рассмотрим четыре варианта карьерного развития для Python-программиста: Data Science и машинное обучение, автоматизация бизнес-процессов, разработка десктопных приложений и встраиваемые системы (IoT).</p><p>Почему стоит попробовать?</p><ul><li>Высокий спрос на специалистов. Они востребованы в банках и инвестиционных компаниях, в сфере медицины и биотехнологии, в консалтинге,  автомобильной промышленности и т.д..</li><li>Широкий набор библиотек: pandas, NumPy, scikit-learn, TensorFlow, PyTorch.</li><li>Возможность работать с реальными задачами: от бизнеса до науки.</li></ul><h4>Автоматизация и скрипты для бизнеса</h4><p>Python часто используется для автоматизации рутинных задач: парсинга данных, обработки файлов, интеграции систем, генерации отчетов. Создание скриптов для автоматизации бизнес-процессов помогает повысить эффективность работы и снизить количество ошибок.</p><p>Знание таких библиотек, как openpyxl (работа с Excel), requests (HTTP-запросы), BeautifulSoup и Scrapy (парсинг веб-страниц), а также умение писать скрипты под конкретные задачи, делают разработчика ценным специалистом в корпоративной среде.</p><p>Примеры задач:</p><ul><li>Автоматическая загрузка данных из Excel и их преобразование</li><li>Скрипты для отправки email-рассылок</li><li>Интеграция с CRM и другими сервисами через API</li></ul><h4>Разработка десктопных приложений (PyQt, Kivy)</h4><p>Хотя сейчас популярность уходит к вебу и мобильным платформам, десктопные приложения на Python востребованы в таких сферах: инструменты для анализа, редакторы, утилиты.</p><p>Инструменты для создания:</p><ul><li>PyQt — мощный фреймворк для создания кроссплатформенных GUI.</li><li>Kivy — библиотека для разработки приложений с поддержкой сенсорных экранов.</li></ul><p>Этот путь подходит тем, кто хочет создавать удобные инструменты с графическим интерфейсом для пользователей на Windows, macOS или Linux.</p><h4>Встраиваемые системы и IoT</h4><p>В области IoT и встроенных систем Python набирает популярность благодаря легкости освоения и поддержке на маломощных устройствах. Помогают в этом  платформы по типу Raspberry Pi и MicroPython.</p><p>Изучение этого направления открывает возможности работы с аппаратным обеспечением, созданием прототипов и внедрением инновационных решений в промышленности и бытовой технике.</p><p>Например, с помощью Python на Raspberry Pi можно  разрабатывать датчики для мониторинга состояния оборудования на производстве и разрабатывать прототипы носимых устройств для сбора данных о здоровье.</p><blockquote>Если рассматривать профессию “Python-разработчик на Django”, то сразу получится сужение до конкретной библиотеки на конкретном языке. Если же в резюме у специалиста стоит, что он “разработчик Python”, возможностей сильно больше. Если написать про себя “разработчик”, будет не понятно, разработчик чего. Но изменив резюме на “DevOps инженера”, становится понятен карьерный трек.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>5 VPS-хостингов в 2025, которые держат нагрузку: кейсы, стоимость, метрики</title>
      <link>https://tproger.ru/articles/5-vps-hostingov-v-2025--kotorye-derzhat-nagruzku--kejsy--stoimost--metriki</link>
      <comments>https://tproger.ru/articles/5-vps-hostingov-v-2025--kotorye-derzhat-nagruzku--kejsy--stoimost--metriki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-vps-hostingov-v-2025--kotorye-derzhat-nagruzku--kejsy--stoimost--metriki</guid>
      <description><![CDATA[<p>Сравниваем 5 VPS-провайдеров, которые стабильно работают под нагрузкой в 2025 году. Разбираем стоимость, примеры использования, производительность и uptime. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-vps-hostingov-v-2025--kotorye-derzhat-nagruzku--kejsy--stoimost--metriki">5 VPS-хостингов в 2025, которые держат нагрузку: кейсы, стоимость, метрики</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Быстрый старт]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[ВКонтакте]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Windows Server]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Техподдержка]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[AMD]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 Aug 2025 06:10:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году выбирать VPS по принципу дешево и сердито уже не работает. Любой рабочий или MVP-проект — от API для мобильного приложения до интернет-магазина  сталкивается с пиками нагрузки, которые нужно выдержать. Ошибки на старте обходятся дороже простоя в продакшне.</p><p>Собрали пять VPS-хостингов, которые показывают, как должны выглядеть выжившие серверы под нагрузкой: современное железо, каналы без счётчиков трафика, живая поддержка инженеров и опыт клиентов. Ниже — конфигурации, цены и метрики, чтобы вы подобрали сервер под свой сценарий.</p><h2>1. ИХЦ (Интернет ХостингЦентр): конфигурации под нагрузку с NVMe, CPU до 5 ГГц и трафиком без ограничений</h2><p>Один из самых гибких по конфигурациям хостеров в обзоре. Работает с 2009 года. Поддерживает разные типы виртуализации (KVM и Virtuozzo), предлагает линейки с SSD и NVMe, российские и европейские площадки, разные уровни мощности — от базовых до высоконагруженных.</p><h3>Линейки VPS и конфигурации</h3><ol><li>ssdVPS — базовая линейка для России. Позволяет собирать конфигурации от 1 до 32 ГБ оперативной памяти, от 1 до 10 виртуальных CPU и от 20 до 300 ГБ SSD-диска.</li><li>NVMe/ — линейка на базе KVM с более высокой производительностью ввода-вывода. Доступны конфигурации от 1 до 24 ГБ RAM, от 1 до 12 vCPU, SSD от 15 до 300 ГБ.</li><li>EU-NVMe/ — аналог NVMe-линейки, но размещённый в Амстердаме. Конфигурации расширены: от 1 до 64 ГБ оперативной памяти, от 1 до 18 CPU, от 15 до 1000 ГБ SSD, скорость порта — от 200 до 500 Мбит/с.</li><li>VPS 5 ГГц — отдельная линейка на KVM, ориентированная на проекты с высокой частотной нагрузкой, до 5 ГГц на ядро, порт до 1000 Мбит/с.</li></ol><p>VPS Windows — выделенная категория для задач на Windows.</p><h3>Особенности и инфраструктура</h3><p>В <a href="https://www.ihc.ru/vps.html">ИХЦ</a> можно выбрать между двумя видами виртуализации: <b>KVM</b> и <b>Virtuozzo</b>. Виртуализация KVM подходит для задач, где нужна изоляция ресурсов, стабильность под нагрузкой и совместимость с Linux и Windows. Virtuozzo — более экономный вариант с быстрой настройкой, но с возможной перераспределённой нагрузкой между соседними VPS.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/d8f9548f-7bd8-4eef-a4aa-6d50b0e424a2.png" alt="" /><figcaption>Дата-центры провайдера есть в Москве и Амстердаме.</figcaption></figure><p>Связь с поддержкой доступна через тикеты, онлайн-чат на сайте, телеграм-бота, телефон и сообщения ВКонтакте. Поддержка работает 24/7. На всех тарифах включена базовая <b>DDoS-защита</b>.</p><h3>Примеры использования VPS от IHC</h3><p>Компания предоставляет конкретные кейсы. Примеры:</p><ul><li>Проект 1: VPS NVMe/24 (24 ГБ RAM, ~200 ГБ SSD) используется под бэкенд iOS-приложения. Стек: nginx, PHP, MySQL. Нагрузка: 12 000 уникальных пользователей в сутки. Утилизация CPU — 25%.</li><li>Проект 2: VPS NVMe/12 (12 ГБ RAM, ~120 ГБ SSD) для развлекательного сайта. Стек: nginx, Docker, Node.js. Нагрузка: 7 000 уникальных пользователей в сутки, загрузка CPU — около 20%.</li></ul><p>Серверы стабильно держат среднюю и высокую нагрузку — даже с трафиком в 10–12 тысяч пользователей в сутки остаётся запас по ресурсам.</p><h3>Дополнительные опции</h3><p>ИХЦ предлагает <b>тестовый период в 3 дня</b>, <b>безлимитный трафик</b>, <b>бесплатный первый месяц ispmanager 6</b> в подарок, а также предустановку панелей управления (ispmanager, FastPanel) или VPN-шаблонов по выбору при заказе. Также доступны бэкапы, SLA и автоснапшоты.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/e5730a1c-375b-4b91-a238-6a52a51df67a.png" alt="" /></figure><h3>Цены</h3><p>Что касается ценовой политики, стоимость VPS в России (линейка «ssdVPS») начинается <b>от 380 руб/мес</b> или 3800 руб/год (12 месяцев по цене 10). Европейские VPS («EU-NVMe/») и VPS на KVM («NVMe/») стартуют <b>от 440 руб/мес</b> или 4400 руб/год, а каждый дополнительный гигабайт памяти стоит 6 рублей.</p><h2>2. FirstVDS: мощные VDS на AMD EPYC и Ryzen</h2><p><a href="https://firstvds.ru/">FirstVDS</a> — хостинг-провайдер с опытом на рынке более 20 лет. Предлагают VPS и VDS с виртуализацией KVM для проектов любого размера. Все серверы работают на современном оборудовании. Трижды победитель в номинации «Хостер года» Национальной премии «ЦОДы.РФ».</p><p>Есть VPS для разных сценариев нагрузки — от стандартных сайтов до тяжёлых веб-приложений и проектов с высокими требованиями к CPU и отказоустойчивости. Отдельные решения для Битрикс, установка ОС семейства Linux, FreeBSD и Windows Server.</p><h3>Линейки VPS: от базовой мощности до кластера Ceph</h3><p>FirstVDS предлагает три основные линейки, которые отличаются архитектурой и назначением:</p><ol><li>VDS Форсаж — гибкая конфигурация сервера на базе AMD EPYC, до 128 ядер (до 3,7 ГГц), до 512 Гб оперативной памяти и до 4 000 Гб быстрого NVMe-накопителя. Локации Москва и Амстердам. Стартовая стоимость такой конфигурации составляет от 749 руб/мес.</li><li>Для нагруженных проектов — CPU.Турбо — гибкая конфигурация сервера на базе AMD Ryzen с частотой до 5,7 ГГц, DDR5 и с быстрыми NVMe-накопителями. Идеально для Битрикс. Локация Москва. Начальная цена CPU.Турбо — от 624 руб/мес. При покупке лицензии Битрикс (1С-Битрикс: Управление сайтом или Битрикс24) есть дополнительная скидка 30% на 3 месяца аренды этого тарифа.</li><li>Отказоустойчивый VDS Атлант — гибкая конфигурация сервера на базе AMD EPYC — до 192 ядер (до 3,5 ГГц), до 768 Гб оперативной памяти и до 8 Тб быстрого NVMe-накопителя. Репликация данных между узлами кластера Ceph и дублирование сетевого оборудования. Локация Москва. Его стартовая стоимость от 1619 руб/мес, при этом бесплатные автобэкапы уже включены.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/3490237d-3e99-49c5-9d90-10e3849765ed.png" alt="" /></figure><p>Компания использует два центра обработки данных в <b>Москве</b>: <b>IXcellerate (уровень Tier III)</b> и Web DC. Для тарифа Форсаж и готовых тарифов также доступен ЦОД <b>euNetworks (уровень Tier III) в Амстердаме</b>.</p><h3>Сетевые возможности, трафик и безопасность</h3><p>В стоимость каждого сервера входит бесплатный выделенный IP-адрес. Клиенты могут выбрать между 100 Мбит/с с безлимитным трафиком или портом 1 Гбит/с с включёнными 32 Тб трафика.</p><p>Защита от DDoS-атак и система безопасности BitNinja для сервера и сайта доступны как подключаемые опции. Также предоставляются объектное хранилище S3, автобэкапы и Кибер-бэкап. Для безопасности коммуникаций используются SSL-сертификаты GlobalSign.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/7d36ac0d-4832-402b-b0b0-9d7955963916.png" alt="" /></figure><h3>Управление, ПО и поддержка</h3><p>При заказе сервера клиент получает лицензию ispmanager 6  lite: первый месяц панель предоставляется бесплатно, дальше оплачивается по тарифу самой панели. Предлагается гибкий выбор операционных систем, включая Linux, FreeBSD и Windows Server. Под разовые задачи доступны готовые рецепты установки — от Битрикс и GitLab до TeamSpeak, LAMP‑стека и других популярных наборов ПО.</p><p>Для установки и решения любых вопросов — доступна живая круглосуточная техническая поддержка 24/7 через чат на сайте, в личном кабинете и по телефону, без использования чат-ботов. Для самостоятельного решения вопросов предусмотрена обширная база знаний.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/7fc897fc-5d2d-4f28-9047-834a8b0202b1.png" alt="" /></figure><h3>Клиентские бонусы и программы</h3><p>Есть тестовый период до 3 дней. Регулярно проводятся акции и предоставляются скидки, в том числе на тарифы для нагруженных проектов.</p><p>1) При переходе от другого хостера FirstVDS бесплатно переносит до 10 сайтов. Дополнительно предоставляется скидка 40% на первый месяц аренды VPS при оплате сервера на 1, 3 или 6 месяцев, либо 3 месяца бесплатной аренды VPS при оплате на год.</p><p>2) Клиенты с возрастом аккаунта от 5 лет получают постоянную скидку на аренду VPS, начиная от 5% и увеличиваясь ежегодно до 20%.</p><p>3) Действует реферальная программа, по которой партнёр получает 10% от расходов привлечённых клиентов, а привлечённый пользователь — скидку 25% на первый месяц аренды VPS.</p><p>4) Стоимость продления домена у FirstVDS равна актуальной стоимости его регистрации.</p><h2>3. InCloud: VPS‑площадки для бизнеса, где важен SLA</h2><p><a href="https://incloud.ru/">InCloud</a> продаёт виртуальные серверы, работающие в отказоустойчивом кластере на базе enterprise хранилищ NetApp и HPE 3PAR. Позиционируется как решение для 1С, малого/среднего бизнеса и аутсорс компаний, которым нужны предсказуемые ресурсы и техподдержка профессиональных инженеров, а не чат‑ботов.</p><h3>Тарифные планы и ценообразование</h3><p>InCloud предлагает две основные линейки тарифов:</p><ol><li>Стандартный тариф: внутри процессоры Intel Xeon 2600v4 2ГГц и оперативная память DDR4 2400 МГц.Стоимость: 1 CPU – 200 рублей, 1 Гб RAM – 200 рублей.</li><li>Производительный тариф: использует процессоры AMD EPYC до 3.8 ГГц и оперативной памяти DDR5 4800 МГц. Стоимость: 1 CPU – 250 рублей, 1 Гб RAM – 250 рублей.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/c484688e-fd3f-48ca-b743-616c21699ac4.png" alt="" /></figure><p><b>Стоимость дискового пространства</b>: SATA диски: <b>3 рубля за 1 Гб</b>. SSD и NVMe диски: <b>13 рублей за 1 Гб</b>.</p><h3>Архитектура и поддержка</h3><p>Теперь про то, что упрощает жизнь и добавляет надежности нашим развернутым сервисам:</p><ul><li>Ежедневные бэкапы: данные ваших серверов будут копироваться каждый день, и храниться они могут до 30 дней.</li><li>Удобная панель управления: через нее можно делать снапшоты  и клонировать серверы. Для разработчиков это просто золото – быстро накатить тестовую среду, попробовать новую фичу, а потом откатиться или создать идентичные рабочие среды.</li><li>SLA-договор: есть возможность заключить SLA-договор, чтобы получить гарантированный уровень доступности услуг.</li><li>Новейшие мощные серверы — на базе AMD EPYC 4 поколения.</li></ul><p>Одна из фишек – это возможность напрямую проконсультироваться с сертифицированными инженерами InCloud по сложным проектам.</p><h3>А что с клиентскими кейсами</h3><ol><li><b>Кейс Vamkamin</b>: производственная компания, которая ускорила работу своей системы 1С и сократила IT-расходы на 35%. У них была проблема с медленной работой 1С при одновременном доступе бухгалтерии, склада и отдела продаж, а также с частыми простоями на локальных серверах. InCloud предложил перенести все сервисы в облако, используя серверы на базе AMD EPYC 9554, что обеспечило прирост производительности более 40% по сравнению с предыдущими решениями. Также были внедрены гибкое масштабирование ресурсов и ежедневное резервное копирование.</li><li><b>Кейс Веб-студии 100UP</b>: компания занимается разработкой и поддержкой сайтов для крупных торговых сетей и e-commerce проектов. 100UP переехала к облачному провайдеру InCloud, выбрав тарифы на базе AMD EPYC 9554 с высокой тактовой частотой и большим количеством ядер. Благодаря разнообразию тарифов команда легко распределила проекты по нужным по производительности виртуальным серверам. После переезда 100UP смогла сократить время отклика клиентских сайтов в среднем на 45%, обеспечить бесперебойную работу даже в периоды высокой сезонной нагрузки, ускорить запуск новых проектов, фокусироваться на разработке и маркетинге и улучшить качество предоставляемых услуг.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/c0b63a9f-bb39-4b44-9363-45cefd4c2f62.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/9f98fda8-0b7a-408a-9a82-00f063ee0d88.png" alt="" /></figure><h2>4. SmartApe: быстрые VPS на NVMe‑SSD</h2><p><a href="https://www.smartape.ru/ssd-vps">SmartApe</a> подойдет проектам, где дисковая подсистема и CPU работают без простоя: интернет‑магазины, порталы с большим количеством контента, внутренние корпоративные системы, высоконагруженные API. Если нужен быстрый старт — сервер создаётся за одну‑две минуты; если понадобится масштабирование, тариф можно увеличить без миграции.</p><h3>Преимущества этих VPS</h3><p>Используются современные серверные NVMe SSD диски в RAID массиве, которые в 600 раз быстрее обычных HDD. Скорость чтения достигает 8000 Мбайт/с, а записи — 2000 Мбайт/с.</p><p>Серверы работают на мощных процессорах Intel Xeon Gold или AMD EPYC (до 3.7 ГГц) и быстрой памятью DDR4. Используется полноценная виртуализация KVM с выделенными ресурсами для гарантии их предоставление. Дата-центры уровня TIER-III и TIER-IV обеспечивают Uptime 99.982%. Данные хранятся в хранилище RAID-10.</p><p>Дополнительно клиенты получают полный root-доступ (по SSH для Linux и RDP для Windows), возможность установки любых операционных систем (более 20, включая Ubuntu, CentOS, Debian, Windows Server) и ПО, а также полную изоляцию от других клиентов.</p><h3>Удобство и поддержка</h3><ul><li>Бесплатная панель управления (Hestia) или платная ISPmanager для простого управления сервером.</li><li>Бесплатное базовое администрирование и помощь в переносе сайтов.</li><li>Круглосуточная квалифицированная поддержка 24/7.</li><li>Бесплатный тестовый период 10 дней без оплаты и ввода карты.</li><li>Защита от DDoS-атак включена в стоимость.</li><li>Выделенный внешний IP-адрес (возможность купить до 10 IP).</li></ul><p>Перед покупкой дают десять дней теста без привязки карты; если сервис не подойдёт, в течение тридцати дней можно вернуть деньги за неиспользованный период.</p><h4>Пример использования: интернет‑магазин</h4><p>VPS c 2 vCPU, 4 ГБ RAM, 80 ГБ SSD и портом 100 Мбит/с; при обычном трафике сайт обслуживает 300–500 уникальных посетителей в день, одновременно на страницах бывает 10–20 человек, а в пиковую распродажу до 50; средняя нагрузка 5–10 запросов в секунду, короткими всплесками до 20; заявленный аптайм 99,982 %, реальные замеры отклика после кэширования — 200–300 мс; счёт за такой сервер выходит около 1 300 рублей в месяц.</p><h4>Пример использования: API на Node.js</h4><p>4 vCPU, 8 ГБ RAM, 160 ГБ NVMe и канал 200 Мбит/с; сервис стабильно обрабатывает 50–100 запросов в секунду, на пике достигает 200, одновременно подключены 500–1 000 клиентов, максимум 2 500; трафик близок к 200 ГБ в месяц; при том же аптайме 99,982 % средняя задержка ответа укладывается в 50–100 мс; ежемесячная стоимость в зависимости от опций колеблется в диапазоне 2 600–3 000 рублей.</p><p>SmartApe имеет смысл брать, когда дисковая скорость и гарантированные ресурсы важнее высокого GUI и почасовой тарификации, для расчёта стоимости есть калькулятор конфигураций на сайте и оперативная техподдержка.</p><h2>5. PSB Hosting: что даёт их VPS‑платформа</h2><p><a href="https://psb.hosting/vps">PSB Hosting</a> продвигает VPS-хостинг как решение для сайтов, приложений и SaaS-сервисов, которым нужна предсказуемая мощность и высокий SLA. Провайдер делает упор на новое оборудование, пропускную способность без ограничений и инфраструктуру уровня Tier III+.</p><h3>Локации и тарификация</h3><p>Серверы разворачиваются в четырёх точках: Нидерланды, США, Германия и Финляндия. Для каждой площадки доступен одинаковый конструктор конфигураций. Базовый план NL‑100, который включает 1 vCPU, 2 ГБ RAM и 30 ГБ SSD, стоит 6 долларов в месяц. Линейка поднимается ступенчато:</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/62dfc578-ede9-4533-bfb8-bca1a1a26688.png" alt="" /></figure><p>Слайдеры позволяют довести параметры до 32 ядер, 64 ГБ RAM и 510 ГБ SSD; верхняя планка оплаты — 220 $ в месяц.</p><p>Трафик безлимитный на любых конфигурациях — дополнительной оплаты за гигабайты нет.</p><h3>Аппаратная платформа, ОС и предустановки</h3><p>В хост-узлах применяются процессоры последних линеек AMD и Intel. Оперативная память — DDR5, что снижает задержки при обращении к ОЗУ. Дисковая подсистема полностью на NVMe, объединена в RAID 10: чтение и запись выше, чем у классических SSD, а отказ одного накопителя не выводит хранилище из строя. К каждому VPS подключён выделенный канал с пропускной способностью до 10 Гбит/с.</p><p>Сервер можно поднять сразу с Windows Server, Ubuntu, Debian, CentOS или FreeBSD. Для быстрого старта доступны готовые образы: Bitrix, Django-стек, Docker, FastPanel, Hestia CP, Keitaro, LAMP, Node, OpenVPN, Outline, Portainer, Vesta CP и другие.</p><h3>Управление и поддержка</h3><p>Провайдер обещает круглосуточную техническую поддержку, резервные копии (бэкапы) и автоснапшоты. Для автоматизации предусмотрен API; в панели управления можно масштабировать ресурсы, перезагружать сервер и следить за статистикой.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/fabfe43d-7891-4129-8ad5-e87f45b087ef.png" alt="" /></figure><h2>Как выбрать VPS под свой проект</h2><p>Для сайта с пиковыми нагрузками подойдёт SmartApe, где дисковая подсистема на NVMe-SSD в RAID-10 обеспечивает скорость чтения до 8000 Мбайт/с и записи до 2000 Мбайт/с, а сайт на конфигурации с 2 vCPU, 4 ГБ RAM и 80 ГБ SSD выдерживает 300–500 уникальных посетителей в день с пиком до 50 одновременных пользователей и нагрузкой 5–10 запросов в секунду (короткими всплесками до 20).</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/bc98805d-7f7f-471d-a2a2-1df68139c637.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/204e63be-985f-449d-a37c-37ca9993d335.png" alt="" /></figure><p>Если проект включает высоконагруженный API, например, на Node.js, то оптимален SmartApe с конфигурацией 4 vCPU, 8 ГБ RAM и 160 ГБ NVMe, которая стабильно обрабатывает 50–100 запросов в секунду (пики до 200) при 500–1000 одновременных подключениях (максимум 2500) и трафике до 200 ГБ в месяц.</p><p>Для задач с 1С, где важна стабильность и сокращение IT-расходов, выбирайте InCloud на базе AMD EPYC 9554: в кейсе Vamkamin это ускорило работу системы на 40%, сократило расходы на 35% и минимизировало простои, с ежедневными бэкапами до 30 дней и SLA-договором.</p><p>Если нужен VPS для Битрикс с высокой частотой CPU, подойдёт FirstVDS на AMD Ryzen (CPU.Турбо) с частотой до 5,7 ГГц и DDR5: скидка 30% на 3 месяца при покупке лицензии Битрикс, плюс отказоустойчивость на кластере Ceph с репликацией данных.</p><p>Для веб-студий с разработкой и поддержкой сайтов для e-commerce, где требуется распределение проектов по производительности и бесперебойная работа в сезонные пики, подойдёт InCloud на AMD EPYC 9554: в кейсе 100UP это сократило время отклика на 45% и обеспечило стабильность под высокой нагрузкой.</p><p>Если проект ориентирован на международный трафик с предсказуемыми ресурсами и высоким SLA, выбирайте PSB Hosting с локациями в Нидерландах, США, Германии или Финляндии, безлимитным трафиком и каналом до 10 Гбит/с на DDR5 и NVMe в RAID 10.</p><p>Для бэкенда мобильного приложения с нагрузкой до 12 000 уникальных пользователей в сутки (утилизация CPU 25%) подойдёт ИХЦ на NVMe/24 с 24 ГБ RAM и ~200 ГБ SSD, стеком nginx, PHP, MySQL.</p><p>Если развлекательный сайт с более чем 5000 уникальных пользователей в сутки (загрузка CPU ~20%), то подходит ИХЦ на NVMe/12 с 12 ГБ RAM и ~120 ГБ SSD, стеком nginx, Docker, Node.js. Он обеспечит стабильность с безлимитным трафиком и DDoS-защитой.</p><p>Выбор сводится к трём вопросам: где ваши<br />пользователи, какую пиковую нагрузку вы ждёте и нужен ли формальный SLA.<br />Сформулируйте эти требования заранее — и любой из пяти хостингов закроет задачу<br />без проблем в продакшне. Добавить свои рекомендации VPS хостингов — вы всегда<br />можете в комментариях, желательно описывать короткие кейсы.</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>Что еще есть в терминале Linux: 7 команд, которые экономят кучу времени</title>
      <link>https://tproger.ru/articles/chto-eshhe-est-v-terminale-linux--7-komand--kotorye-ekonomyat-kuchu-vremeni</link>
      <comments>https://tproger.ru/articles/chto-eshhe-est-v-terminale-linux--7-komand--kotorye-ekonomyat-kuchu-vremeni?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-eshhe-est-v-terminale-linux--7-komand--kotorye-ekonomyat-kuchu-vremeni</guid>
      <description><![CDATA[<p>Семь советов для ускорения работы в терминале Linux. Как быстро обработать файлы, отладить Bash-скрипт и редактировать длинные пути в Линукс.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-eshhe-est-v-terminale-linux--7-komand--kotorye-ekonomyat-kuchu-vremeni">Что еще есть в терминале Linux: 7 команд, которые экономят кучу времени</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Отладка]]></category>
      <category><![CDATA[Регулярные выражения]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Jul 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Сколько статей про «полезные команды Linux» вы уже прочитали?</b> Алиасы, history, базовые горячие клавиши — факты для джунов, которые опытным админам уже снятся. Если свободно пользуетесь grep и awk, создаете циклы, применяете регулярные выражения — эта статья для вас.</p><p>Рассказываем про 7 команд, влияющие на скорость работы в терминале. Вы узнаете:</p><ul><li>про встроенные bash-операции, которые заменяют пайплайны,</li><li>про способы работы с файловыми дескрипторами,</li><li>про wildcards, которые избавляют от сложных конструкций с find.</li></ul><p>Каждая команда в подборке решает конкретную проблему:</p><ul><li>массовая обработка файлов,</li><li>отладка скриптов,</li><li>работа с длинными путями.</li></ul><h2>1. Bash variable expansions</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-10/b5f2b475-b18e-49cb-a00c-9197ab87b9f4.jpg" alt="" /></figure><p>Вместо <i>basename</i>, <i>cut </i>для простых операций со строками можно использовать встроенные возможности Bash:</p><p><b>%</b> режет справа до первого совпадения, <b>%%</b> — до последнего. Символ <b>#</b> работает слева направо.</p><p>В реальной работе это помогает при массовой обработке файлов. Например, есть 1000 логов, и нужно каждый переименовать.</p><p>Если использовать <i>basename</i>, запустится 1000 отдельных процессов. <b>Variable expansions</b> работают без <i>fork/exec</i>, без задержек на создание процессов.</p><p>Bash variable expansions используют в циклах с файлами и при работе с массивами. Когда скрипт обрабатывает сотни файлов, разница в скорости становится заметной. Еще и код выглядит чище.</p><h2>2. Here-string (&lt;&lt;&lt;)</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-10/ef72e05d-6f80-49aa-842b-32c209d8b724.jpg" alt="" /></figure><p>Here-string упрощает передачу строковых данных в команды без создания временных файлов или использования echo с пайпом.</p><p>Реальная экономия времени проявляется при отладке и модификации скриптов. Например, когда SQL-запрос или конфигурация зашиты в <i>here-документ</i>. С <b>here-string </b>данные собраны в одном месте, легко редактируются и переиспользуются.</p><p>Работает не только с базами данных. Отправка в API, конфигурирование сетевых устройств через expect, передача команд в Docker — через &lt;&lt;&lt; код будет понятнее, а сопровождение проще.</p><h2>3. /proc/$$/fd</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-10/f314de69-9459-4ecb-ab62-2c7b5c7b54f3.jpg" alt="" /></figure><p>Каждый процесс имеет стандартные дескрипторы <b>0</b> (stdin), <b>1</b> (stdout), <b>2</b> (stderr), которые представлены как символические ссылки. Директория <b>/proc/$$/fd </b>предоставляет доступ к файловым дескрипторам текущего процесса:</p><p>Переменная <b>$$</b> содержит PID текущего процесса, поэтому /proc/$$/fd ведет к дескрипторам именно вашего шелла.</p><p>Практическое применение — отладка перенаправлений и работа с дескрипторами в сложных скриптах:</p><h2>4. Wildcards с диапазонами</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-10/08dbc2a0-5e2e-49a3-9486-a042a0480369.jpg" alt="" /></figure><p>Про <b>*</b> и <b>?</b> говорят чаще, чем про диапазоны в квадратных скобках. Такие маски используют реже, а зря — они решают массу задач по отбору файлов.</p><p>Wildcards автоматически раскрываются шеллом в список подходящих файлов — это их основная функция. Кавычки нужны только когда передаете символы [, ] как литеральные:</p><p>Экономия времени заметна при работе с логами, бэкапами и в скриптах автоматизации. Например, для архивации файлов с определенными номерами, очистки временных файлов с нужными паттернами.</p><h2>5. sudo !!</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-10/9434c945-925f-40b3-9062-994fce2091c6.jpg" alt="" /></figure><p>Набрали длинную команду, нажали Enter, получили «<b>Permission denied</b>». Рука на рефлексе тянется к стрелке вверх и Home, чтобы добавить sudo в начало.</p><p>Вот способ в разы быстрее:</p><p>Двойное восклицание <b>!!</b> — это ссылка на предыдущую команду целиком. Bash подставит всю строку со всеми аргументами и ключами. Кажется мелочью, но для админа, который 10 раз в день забывает sudo, это серьезная оптимизация.</p><p>Двойное восклицание универсально и работает не только с sudo:</p><ul><li><b>time !!</b> для замера времени выполнения,</li><li><b>nohup !! &amp;</b> для запуска в фоне,</li><li><b>strace !!</b> для отладки.</li></ul><p>Если между командой и sudo !! выполнялись другие команды, восклицание сработает для последней из них. Для поиска конкретной команды в истории используйте <b>!строка</b>.</p><h2>6. ^старое^новое</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-10/1888b625-8ae5-4d0e-a73d-25260ff7d893.jpg" alt="" /></figure><p>Основной способ исправления опечатки — стрелка вверх, поиск ошибки, исправление. Смотрите, как можно сделать это побыстрее:</p><p>Символ <b>^</b> ищет первое вхождение слова и заменяет его. Работает с последней командой.</p><p>Заменяется только первое вхождение. Если ошибочное слово встречается несколько раз, способ не сработает. В таких случаях придется использовать классическое редактирование или <i>history expansion</i>.</p><h2>7. Alt+.</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-10/4d1c03bb-66b2-4cb0-8c3e-ce80c3406ec5.jpg" alt="" /></figure><p>Создали файл с длинным именем — теперь его нужно отредактировать, переместить, изменить права. Каждый раз перепечатывать путь утомительно и чревато ошибками.</p><p>Комбинация <b>Alt+.</b> (Alt + точка) вставляет последний аргумент предыдущей команды в текущую позицию курсора. Повторное нажатие перебирает аргументы из более ранних команд.</p><p>Экономия времени проявляется при работе с файлами и директориями. Например: распаковали архив, теперь нужно зайти в созданную папку, затем посмотреть содержимое, потом изменить права. Вместо того, чтобы 3 раза печатать один путь, можно 3 раза нажать Alt+.</p><p>Еще этой комбинацией вставляются:</p><ul><li>имена пользователей,</li><li>IP-адреса,</li><li>названия сервисов,</li><li>параметры конфигурации.</li></ul><p>Alt + точка работает в большинстве шеллов. Привыкнув к ней, начинаешь использовать на автомате.</p><h2>Что запомнить</h2><ul><li><b>${filename%.*} </b>и встроенные операции со строками работают быстрее внешних утилит. % режет справа, # — слева. Полезно при работе с циклами для массовой обработки файлов.</li><li><b>&lt;&lt;&lt;</b> — here-string удобен для передачи коротких строковых данных в команды. С многострочными данными лучше использовать here-document или переменные.</li><li><b>/proc/$$/fd</b> — доступ к файловым дескрипторам текущего процесса. Ускоряет отладку перенаправлений и работу с дескрипторами.</li><li><b>file[1-5] и [^b]* </b>— диапазоны в wildcards для точного отбора файлов. Кавычки нужны только для передачи литеральных символов.</li><li><b>sudo !!</b> — повторяет последнюю команду с sudo. Также работает с time !!, nohup !! &amp;. Если между нужной командой и !! выполнялись другие операции, используйте !строка для поиска конкретной команды в истории.</li><li><b>^старое^новое</b> — заменяет первое вхождение в предыдущей команде. Работает только с последней командой и заменяет первое совпадение.</li><li><b>Alt+. </b>— вставляет последний аргумент предыдущей команды. Повторное нажатие перебирает аргументы из истории команд. Экономит время при работе с длинными путями.</li></ul>]]></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>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>Безопасное исполнение ненадёжного кода</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>n8n: установка, настройка и интеграция с Python, Node.JS и PHP</title>
      <link>https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php</link>
      <comments>https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Кирилл Косолапов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php</guid>
      <description><![CDATA[<p>Подробный туториал по установке и настройки n8n. Примеры интеграции с Python, Node.JS и PHP и взаимодействия с LLM Mistral AI.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php">n8n: установка, настройка и интеграция с Python, Node.JS и PHP</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Opera]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 29 Jun 2025 09:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>n8n — open-source платформа для автоматизации рабочих процессов (workflow), позволяющая создавать сложные цепочки задач без глубоких знаний программирования.</p><p><b>В статье рассмотрим:</b></p><p>- Установку локально и в облаке;</p><p>- Интеграцию с Python, Node.js и PHP;</p><p>- Примеры автоматизаций;</p><p>- Интеграцию с AI Mistral.</p><h2>Установка n8n</h2><h3>Локальная установка</h3><p>Нам потребуется Docker, проверьте установку:</p><p><b>Шаги установки:</b></p><p>1. Создайте том данных:</p><p>2. Запустите контейнер:</p><p>После запуска откройте: `http://localhost:5678`</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/32713acd-811d-40dc-8141-4fb625cd4216.png" alt="" /></figure><h3>Установка на удаленном сервере</h3><p>Развертывание мы произведем в облаке <a href="https://amvera.ru/n8n">Amvera</a>, так как в нем n8n предоставляется как преднастроенный сервис с бесплатным доменом (он нам нужен), настроенными переменными и проксированием до заблокированных в РФ LLM (OpenAI, Gemini, Claude и др.).</p><p>1. Регистрируемся на <a href="https://amvera.ru/n8n">Amvera</a>;</p><p>2. Выбираем n8n в плитке на главной странице;</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/e74d96ee-5f96-4c61-bf7a-562a38edc703.png" alt="" /></figure><p>3. Вводим название для проекта и выбираем тариф.</p><p><b>Готово, через 30 секунд запустится n8n с выделенным доменом и настроенными основными переменными.</b></p><h2>Настройка n8n</h2><h3>Первоначальная настройка</h3><p>1. Откройте n8n (локально: `localhost:5678`, в облаке: ваш домен)</p><p>2. Заполните данные администратора:</p><ul><li>Email</li></ul><ul><li>Имя/Фамилия</li></ul><ul><li>Пароль</li></ul><p>3. По желанию вы можете получить бесплатный лицензионный ключ:</p><ul><li>Введите email → "Send me a free license key"</li></ul><ul><li>Активируйте в разделе Settings → Usage</li></ul><h3>Настройка для HTTP</h3><p>1. Создайте новый <b>workflow</b> → Start from scratc</p><p>2. Добавьте триггер: <b>Webhook</b> - <b>On webhook call</b></p><p>3. Настройте:</p><ul><li>HTTP Method: POST</li></ul><ul><li>Path: `/n8n` (пример)</li></ul><ul><li>Respond Mode: Using 'Respond to Webhook' node</li></ul><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/6e51fb08-a901-408c-833e-eb27c3ab1f17.png" alt="" /></figure><p>4. Добавьте обработчик: <b>Core</b> → <b>Respond to Webhook</b></p><p>5. Настройте ответ:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/37a5add7-0873-42e1-9004-d33a228d828b.png" alt="" /></figure><h2>Примеры использования</h2><h3>Пример на Python</h3><p>В примере на Python мы сделаем калькулятор. Суть: отправляем выражение через POST,  n8n делает вычисление, возвращаем результат.</p><p><b>Workflow</b>:</p><p>1. Добавьте <b>Core</b> → <b>Code node</b> между Webhook и Respons:</p><p><b>Клиент (Python):</b></p><p>Запустим код и посмотрим результат:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/c9a2bd14-0a7e-4c6f-8544-e4a098a5cd5e.png" alt="" /></figure><h3>Пример на PHP</h3><p>В примере на PHP мы сделаем валидацию данных. Суть: отправляем данные через POST, n8n проверяет данные, возвращает результат.</p><p><b>Workflow (Code node):</b></p><p><b>Клиент (PHP):</b></p><p>Можем зайти на нашу страницу, все работает нормально:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/722241bc-9794-41eb-9d32-8d73d7147800.png" alt="" /></figure><h3>Пример на Node.js</h3><p>Примером на node.js будет фильтр запрещенных слов. Суть: отправляем текст, n8n проверяет на наличие плохих слов, возвращает результат.</p><p><b>Workflow (Code node):</b></p><p><b>Клиент (Node.js):</b></p><p>Перед запуском установим библиотеку командой `npm install axios`</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/c56f275a-8c74-49bf-80e5-22d5becd222a.png" alt="" /></figure><h3>Интеграция n8n с Mistral AI</h3><p>Мы интегрируем нейросеть Mistral в телеграмм-бота на C# с помощью n8n. Перед тем как начать, нам нужно получить токен.</p><p>1. Зарегистрируйтесь на <a href="https://mistral.ai/">Mistral</a></p><p>2. Создайте агента <b>Сreate an agent</b></p><p>3. Перейдите в раздел <b>API Keys</b></p><p>4. Создайте и скопируйте API-ключ (звездочки наложены):</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/7bb95f2e-0ebe-47af-9089-5e10ee2822cf.png" alt="" /></figure><p>Теперь нужно создать credentials для работы с созданной моделью. Для этого в правом верхнем углу нажмите <b>Create credentials</b>. В списке найдите <b>Mistral Cloud API</b>. В открывшемся окне вставьте скопированный ключ и сохраните.</p><p>Осталось настроить workflow.</p><p>1. Добавляем <b>Webhook</b>:</p><ul><li>Method: POST</li></ul><ul><li>PATH: n8n</li></ul><ul><li>Respond: Using 'Respond to Webhook' Node</li></ul><p>2. Добавляем <b>AI Agent</b>:</p><ul><li>Source for Prompt: Define below</li></ul><ul><li>Prompt: `{{ $json.body.text }}`</li></ul><p>3. Подключаем <b>Chat Model </b>к созданному агенту:</p><ul><li>Credential to connect with: Mistral Cloud API</li></ul><ul><li>Model: mistral-large-2411</li></ul><p>4. Добавляем <b>Respond to Webhook</b></p><p>Вот так выглядит готовый workflow:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/b2618a94-f3eb-4055-9061-ab185aca9d9d.png" alt="" /></figure><p>Можем приступить к созданию бота. Для начала введите эти команды по очередности:</p><p>Переходим в папку с кодом и редактируем файл `Program.cs`:</p><p>Запустите бота с помощью команды `dotnet run`.</p><h3>Автоматизируем с помощью n8n</h3><p>В примере автоматизации мы сделаем бота, который будет отправлять уведомления при заполнении формы, полностью без кода.</p><p>Для работы с <b>Telegram Node</b> понадобиться создать credentials <b>Telegram API</b>. Туда вставляем токен бота, полученный в @BotFater. Сохраняем и переходим к настройке workflow.</p><p><b>Создаем новый workflow. </b></p><p>1. Добавляем <b>On form submission</b>. В качестве примера я создам самую простую форму:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/3bd6f188-16bd-4fa4-bde2-f7a88855bdad.png" alt="" /></figure><p>Перейдите по ссылке в <b>Producrion URL</b> чтобы заполнить форму.</p><p>2. Добавляем <b>Telegram Node</b>:</p><ul><li>Credential to connect with: Telegram account</li></ul><ul><li>Resource: Message</li></ul><ul><li>Operation: Send message</li></ul><ul><li>Chat ID: вставьте свой telegram id</li></ul><p>Text:</p><p>Готово! При новых заявках бот будет присылать уведомления.</p><h3>Деплой бота в Amvera Cloud</h3><p>Перед тем как начать деплой, мы должны создать конфигуационнный файл `amvera.yml`. Для этого создаем его в рабочем каталоге с ботом и вводим следующее:</p><p>Строго говоря, этот файл проще создать в конфигураторе в интерфейсе.</p><p>2. Структура проекта будет такой:</p><p>tg-bot/</p><p>├── Program.cs</p><p>├── tg-bot.csproj</p><p>├── amvera.yml</p><p>├── bin/</p><p>└── obj/</p><p>Идем В Amvera Cloud и создаем приложение <b>Приложения</b> — <b>Создать приложение</b>. Вводим название и выбираем тариф.</p><p>Далее загружаем все файлы, что есть у нас в каталоге, с ботом. В конце будет окно с настройкой конфигуцрации, выглядит оно так:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/7806bf2f-38e5-4aa4-ade2-6c12d3f6c214.png" alt="" /></figure><p>Нажимаем <b>Завершить</b> и ждем когда приложение будет запущено.</p><h2>Заключение</h2><p>n8n — мощный инструмент для создания интеграций и автоматизаций. Надеюсь, статья была вам полезна и буду рад обсудить в комментариях любые вопросы!</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>Эволюция программиста 2005–2025: от CRT-мониторов до квантовых алгоритмов</title>
      <link>https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov</link>
      <comments>https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov</guid>
      <description><![CDATA[<p>Эпохи развития программирования в России и в мире. Какие стадии прошли разработчики и к чему пришли в настоящий момент. Прогнозы на будущее. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov">Эволюция программиста 2005–2025: от CRT-мониторов до квантовых алгоритмов</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Stack Overflow]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[jQuery]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Mozilla]]></category>
      <category><![CDATA[WebAssembly]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Soft Skills]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Fullstack]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Jun 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>За последние 20 лет программирование изменилось до неузнаваемости. Если в 2005 году разработчики писали код на PHP 4.0 под мерцание CRT-экранов, то в 2025-м нейросети помогают им генерировать целые модули, а квантовые компьютеры становятся частью исследовательских проектов.</p><p>Эта статья — подробная хроника эволюции программистов: какие языки и технологии они осваивали, как менялись их рабочие места, методы обучения и даже само восприятие профессии. Мы разберем ключевые этапы, от первых веб-гигантов до эпохи совместного программирования с ИИ, и попробуем представить, что ждет нас дальше.</p><h2>2005-2009: Эпоха авторских решений и первых веб-фреймворков</h2><p>В середине 2000-х типичный рабочий инструмент программиста — это громоздкий системный блок с процессором Intel Pentium 4 или новеньким Core 2 Duo. Мониторы с ЭЛТ-трубкой постепенно уступали место LCD-экранам с разрешением 1024×768 — именно на таких дисплеях создавались первые версии Wikipedia и набирающих популярность соцсетей. Оперативная память в 1-2 ГБ считалась нормой, а жесткие диски на 80-160 ГБ часто заполнялись до отказа — проекты редко весили меньше нескольких гигабайт.</p><p>Серьезная разработка велась преимущественно на стационарных компьютерах. Ноутбуки только начинали входить в обиход — их брали в офис, но для реальной работы предпочитали мощные десктопы. Операционная система Windows XP доминировала на рабочих станциях, в то время как серверы чаще всего крутили на Linux — Red Hat Enterprise или Debian.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/d5fca723-5450-4b72-8e8d-4cd57627fb99.jpg" alt="" /></figure><p>Среды разработки того времени сегодня кажутся архаичными. Eclipse и NetBeans потребляли гигабайты памяти, Visual Studio 2005 требовала серьезных ресурсов. Многие разработчики предпочитали простые текстовые редакторы вроде Notepad++, а для отладки использовали примитивные методы вроде вывода значений переменных через print. Контроль версий только начинал входить в практику — Git появился в 2005 году, но большинство команд продолжали использовать SVN или вообще заливали файлы по FTP напрямую на продакшен.</p><p>Языковая экосистема этого периода вращалась вокруг трех основных технологий. PHP версий 4 и 4.3 доминировал в веб-разработке — на нем работало около 80% всех сайтов в интернете. Однако его объектно-ориентированные возможности были крайне ограничены до выхода PHP 5 в 2004 году.</p><p>Java в лице J2EE оставалась стандартом для корпоративных решений — банковских систем, крупных порталов и ERP-комплексов. Spring Framework только начинал набирать популярность, а Hibernate упрощал работу с реляционными базами данных. C++ сохранял свои позиции в разработке игр (особенно с использованием Unreal Engine), драйверов и высоконагруженных сервисов.</p><p>Фронтенд-разработка в те годы была невероятно простой по современным меркам. Верстали преимущественно таблицами, а всю динамику реализовывали через jQuery, который появился в 2006 году и быстро вытеснил нативный JavaScript из повседневной практики. AJAX-запросы казались революционной технологией, позволяющей обновлять части страницы без ее полной перезагрузки.</p><p>Обучение программированию в этот период кардинально отличалось от современных подходов. Онлайн-курсы практически отсутствовали. Основными источниками знаний служили бумажные книги:</p><ul><li>«Философия Java» Брюса Эккеля;</li><li>«Совершенный код» Стива Макконнелла;</li><li>«PHP и MySQL. Разработка веб-приложений» Люка Веллинга.</li></ul><p>Русскоязычное сообщество активно обсуждало вопросы разработки на форумах RSDN.ru и CyberForum.ru. В 2008 году появился Stack Overflow, который постепенно стал главной площадкой для профессиональных обсуждений.</p><p>Университетское образование давало хорошую теоретическую базу — алгоритмы, структуры данных, принципы ООП. Однако практическим навыкам приходилось учиться самостоятельно, методом проб и ошибок. Документацию часто скачивали в формате CHM-файлов или читали непосредственно на сайтах вроде php.net и MSDN.</p><p>Типичный стек начинающего разработчика в 2009 году:</p><ul><li>HTML/CSS с jQuery для фронтенда;</li><li>PHP или Ruby on Rails для бэкенда;</li><li>MySQL в качестве базы данных.</li></ul><p>ORM-технологии еще не получили широкого распространения, поэтому SQL-запросы писали вручную. Многие проекты представляли собой монолитные приложения, где весь код хранился в единой кодовой базе без четкого разделения на модули.</p><p><b>Показательный кейс</b>:</p><p>В 2007 году разработчик PHP-приложений из МЭСИ (Москва) столкнулся с типичной для того времени проблемой — SQL-инъекциями. Вместо стандартных решений он создал DLAC (Data Logic Access Component) — обертку для работы с базой данных, которая автоматически экранировала параметры запросов. Это выглядело революционно на фоне типичного кода того периода, где строки запросов часто собирали через конкатенацию с пользовательским вводом.</p><p>Компонент использовал новую для 2005 года технологию Generics в C#. Он генерировал параметризованные запросы, что резко снижало риски взлома.</p><p><i>Разработчики в университетской среде тогда редко задумывались о безопасности — многие проекты содержали уязвимости вроде  </i>SELECT * FROM users WHERE name = ‘.$_POST[‘name’]<i>. </i></p><p><i>DLAC стал локальным спасением для внутренних систем МЭСИ, пока в 2009 году не появился NHibernate — порт популярного Java-фреймворка Hibernate.</i></p><p>Этот кейс хорошо иллюстрирует дух эпохи: отсутствие готовых безопасных решений заставляло программистов изобретать велосипеды. Многие подобные наработки позже легли в основу ORM-библиотек, но тогда они рождались в муках — через пробелы в безопасности и километры самописного кода.</p><h2>2010-2014: Мобильная революция и рассвет JavaScript</h2><p>Начало нового десятилетия ознаменовалось стремительным ростом мобильных технологий. Выход iPhone 4 в 2010 году и Android 2.3 Gingerbread задал новые стандарты мобильной разработки.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/7b640694-b2cd-4f03-a68f-51ed138557b2.jpg" alt="" /></figure><p>Программисты массово переходили на MacBook Pro — не столько из-за преимуществ macOS, сколько благодаря появлению Retina-дисплеев в 2012 году, которые кардинально улучшили качество отображения кода.</p><p>Железо продолжало стремительно эволюционировать. Твердотельные накопители (SSD) начали вытеснять традиционные жесткие диски в рабочих станциях. Облачные платформы вроде AWS и Heroku стали реальной альтернативой локальным серверам, которые раньше часто стояли прямо под рабочими столами в офисах. Оперативная память в 8 ГБ стала стандартом для комфортной разработки, а четырехъядерные процессоры ускорили сборку крупных проектов.</p><p>Языковая палитра этого периода значительно расширилась. Objective-C стал основным языком для iOS-разработки и оставался таковым до появления Swift в 2014 году. Python 3 начал набирать популярность благодаря веб-фреймворку Django и научным библиотекам NumPy и Pandas, которые открыли дорогу для анализа данных в массовом сегменте.</p><p>JavaScript пережил настоящий ренессанс — после выхода AngularJS в 2010 и Node.js в 2009 году он перестал быть просто «языком для анимаций на сайте», превратившись в полноценную платформу для fullstack-разработки.</p><p><b>Важный факт</b>. В 2011 году разработчик из Сан-Франциско Райан Даль представил Node.js — среду выполнения JavaScript на стороне сервера. За первые 24 часа после релиза проект собрал 10 000 звезд на GitHub, что для того времени стало рекордом. Многие скептически относились к идее использовать JavaScript вне браузера, но уже через год такие компании как LinkedIn и Walmart перевели части своего бэкенда на Node.js, получив прирост производительности в 2-3 раза по сравнению с традиционными решениями на Java и Ruby.</p><p>Образовательная сфера претерпела значительные изменения. В 2011 году запустилась Coursera с первым массовым курсом по программированию — Machine Learning от Эндрю Ына. В 2012 году в Кремниевой долине открылся Hack Reactor, ставший прототипом современных coding bootcamps (интенсивов по программированию). Эти форматы предложили альтернативу традиционному университетскому образованию, сделав акцент на практических навыках.</p><p>Параллельно в России:</p><ul><li>В 2012 году появился Hexlet — одна из первых русскоязычных платформ с практико-ориентированными курсами по программированию. Особенность: выполнение заданий в реальной среде разработки через браузер. Платформа до сих пор работает: на текущий момент 80% выпускников трудоустраиваются в IT, <a href="https://ru.hexlet.io/blog/posts/hse-research">согласно исследованию ВШЭ</a>. В 2012 этот показатель был еще выше.</li><li>«Нетология» (основана в 2011) к 2013 году запустила курсы по веб-разработке с акцентом на JavaScript и Python, сотрудничая с российскими tech-компаниями. Их модель включала менторство и проектные работы.</li><li>В 2013 году стартовал Stepik — платформа с открытыми курсами от ведущих вузов (ИТМО, МФТИ). Особенность: интерактивные задачи с автоматической проверкой кода, что было прорывом для местного рынка.</li></ul><p>Курс «Введение в Linux» от Stepik (2014) за полгода собрал 50 тыс. студентов — рекорд для Рунета. Задания включали настройку виртуальных серверов, что сразу применялось в работе.</p><p>Эти проекты заложили основу для бума EdTech в России после 2015 года, доказав, что онлайн-формат может давать актуальные навыки быстрее вузов.</p><p>Типичный разработчик среднего уровня в 2014 году:</p><ul><li>понимал принципы REST API;</li><li>начинал осваивать основы DevOps с появлением Docker в 2013;</li><li>экспериментировал с микроконтроллерами вроде Arduino или Raspberry Pi, создавая собственные IoT-устройства.</li></ul><p>В профессиональной среде начал формироваться консенсус о том, что PHP устаревает для сложных коммерческих проектов.</p><h2>2015-2019: Эра больших данных и облачных технологий</h2><p>Аппаратные возможности сделали очередной рывок вперед. Многоядерные процессоры Intel i7 и AMD Ryzen стали стандартом для рабочих станций. 16 ГБ оперативной памяти перестали быть роскошью, а мониторы с разрешением 4К стали доступны широкому кругу разработчиков. В 2015 году появился Visual Studio Code, который быстро обогнал по популярности Sublime Text и Atom благодаря удачному сочетанию функциональности и производительности.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/c92b70be-b3eb-4924-a40a-587ed3d43592.png" alt="" /></figure><p>Языковая экосистема продолжила развитие. TypeScript, представленный в 2014 году, предложил решение проблемы масштабируемости JavaScript-кода в крупных проектах. Go от Google, созданный еще в 2009, нашел свою нишу в разработке микросервисов и инструментов оркестрации вроде Kubernetes (2015). Rust от Mozilla начал завоевывать доверие системных программистов благодаря уникальной системе владения памятью.</p><p>JavaScript-сообщество столкнулось с первыми серьезными проблемами. В 2016 году инцидент с пакетом left-pad показал уязвимость экосистемы npm — удаление одного небольшого модуля привело к сбоям в работе тысяч проектов по всему миру. Это заставило разработчиков задуматься о зависимости от сторонних библиотек.</p><p>Типичный senior-разработчик в 2019:</p><ul><li>разбирался в микросервисной архитектуре и понимал, как избежать vendor lock-in (привязки к поставщику) при работе с облачными провайдерами;</li><li>имел опыт работы с React или <a href="http://vue.js">Vue.js</a>;</li><li>знал, что понимание принципов работы алгоритмов становится менее важным, чем развитие soft skills для работы в команде.</li></ul><p>Ключевые технологии этого периода включали Kubernetes, который стал стандартом де-факто для оркестрации контейнеров, а также TensorFlow (2015) и PyTorch (2016), открывшие эру машинного обучения для широкого круга разработчиков. Появились первые серьезные инструменты для работы с большими данными — Apache Spark, Hadoop.</p><p><i>Ключевой момент. В 2016 году Netflix раскрыл детали своего перехода на облачную инфраструктуру AWS. Компания полностью перенесла все сервисы — от рекомендательной системы до биллинга — в облако за семь лет. Главным триггером стала катастрофа 2008 года, когда три дня простоя дата-центра оставили 8,4 млн подписчиков без доступа к сервису. Миграция потребовала перепроектирования архитектуры: инженеры разбили монолит на 500 микросервисов и внедрили Chaos Monkey — инструмент для тестирования отказоустойчивости, который случайно отключал серверы в продакшене.</i></p><p>Этот кейс стал хрестоматийным примером cloud-native подхода. Облачные технологии стали активно использоваться в разработке, а обращение с ними — обязательным навыком для прогеров.</p><h2>2020-2024: AI-assisted разработка и новые парадигмы</h2><p>Пандемия COVID-19 ускорила переход на удаленную работу. Программисты по достоинству оценили макбуки на чипах M1 (2020) за их энергоэффективность и производительность. Домашние офисы оснащались 32-дюймовыми 4К-мониторами и механическими клавиатурами, ставшими своеобразным профессиональным стандартом.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/65ba41e0-844c-419f-8656-e78905e93540.jpg" alt="" /></figure><p>Языковая палитра продолжала обогащаться. Rust официально вошел в ядро Linux в 2022 году, подтвердив свой статус системного языка нового поколения. Zig появился как современная альтернатива «C» с акцентом на безопасность. WebAssembly (Wasm) позволил запускать ресурсоемкие приложения прямо в браузере, открыв новые возможности для веб-разработки.</p><p>Искусственный интеллект начал проникать в повседневную работу программистов. GitHub Copilot на базе GPT-3, представленный в 2021, изменил сам процесс написания кода, предлагая контекстные подсказки. Low-code платформы вроде Retool упростили создание внутренних инструментов для бизнеса.</p><p>Типичный lead-разработчик в 2024 году:</p><ul><li>умел эффективно работать в гибридных командах (офис + удаленка);</li><li>автоматизировал рутинные задачи через ChatGPT API;</li><li>следил за развитием квантовых вычислений, хотя практическое применение пока оставалось ограниченным.</li></ul><p><i>Ключевой момент. В 2023 году GitHub Copilot, разработанный совместно с OpenAI, стал катализатором перемен в индустрии. За первый год после релиза инструмент использовали более 1,3 млн разработчиков — каждый десятый подписчик GitHub. Система анализировала контекст кода и предлагала целые функции: например, при написании SQL-запроса она автоматически генерировала соответствующую модель данных на Python. Amazon внедрил аналогичный инструмент Amazon Q Developer для внутренних команд — по заявлению CEO Энди Джесси, это сэкономило компании 4,500 человеко-лет работы и $260 млн ежегодно.</i></p><p><i>Но были и курьезы. В 2024 году разработчик из Берлина случайно отправил в продакшен код, полностью сгенерированный Copilot. Система использовала фрагмент из GPL-лицензированной библиотеки, что нарушило политику компании по открытому ПО. Инцидент заставил пересмотреть процессы ревью: теперь 78% команд требуют ручной проверки AI-кода перед мержем (слиянием).</i></p><p><i>Параллельно выяснилось, что Copilot в 40% случаев предлагает уязвимый код при работе с СУБД — это привело к взлому API стартапа через SQL-инъекцию. Такие кейсы показали, что ИИ пока не заменяет программистов, а требует от них новых навыков — критического анализа машинных предложений и понимания юридических аспектов кода.</i></p><h2>2025: Современное состояние профессии</h2><p>Современные рабочие станции программистов оснащены ноутбуками с процессорами Apple M4 (3 нм) или Windows-машинами на Snapdragon X Elite. Мониторы с разрешением 8К используются для разработки AR-приложений, а OLED-экраны с HDR стали стандартом для работы с графикой. Появляются первые экспериментальные IDE с нейроинтерфейсами, способные предсказывать код на основе анализа мозговой активности.</p><p>Среди языков программирования выделяется Mojo (2023) — «Python для GPU», набирающий популярность в сфере машинного обучения. Carbon как потенциальный наследник C++ пока остается в тени Rust. Квантовые языки вроде Q# и Cirq интересуют в основном энтузиастов и исследователей.</p><p>Профессия претерпела значительные изменения. ИИ стал не конкурентом, а помощником — по некоторым оценкам, около 60% рутинного кода в 2025 году (тесты, документация) генерируется автоматически. Знание английского языка стало важнее знания сложных алгоритмов — без него невозможно эффективно работать с современными AI-инструментами. Понятие «fullstack-разработчик» трансформировалось — теперь оно подразумевает владение фронтендом, одним бэкенд-языком и основами машинного обучения.</p><p>За два десятилетия программисты прошли путь от одиночек за CRT-мониторами до участников глобальных распределенных команд. Если в 2005 ключевым навыком было умение написать работающий код, то в 2025 главное — способность эффективно взаимодействовать с ИИ-ассистентами. Однако основы профессии остались неизменными — логическое мышление, способность к абстракции и желание автоматизировать рутинные задачи.</p><p>Будущее обещает новые трансформации. К 2030 году нейроинтерфейсы смогут заменить традиционные устройства ввода, а квантовые компьютеры — перевернуть основы криптографии. Но пока актуальными остаются проверенные временем принципы: изучать перспективные технологии (вроде Rust и Mojo), осваивать работу с ИИ и, конечно, совершенствовать главный навык любого программиста — умение быстро и грамотно гуглить.</p><p>Ты уже программист, если читаешь это! Больше о кодинге <a href="https://t.me/+ezugB7gnIEsxNGMy">тут</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>«Нам нужен Kubernetes 2.0»: инженер предложил переосмысление всей платформы</title>
      <link>https://tproger.ru/news/---nam-nuzhen-kubernetes-2-0---inzhener-predlozhil-pereosmyslenie-vsej-platformy</link>
      <comments>https://tproger.ru/news/---nam-nuzhen-kubernetes-2-0---inzhener-predlozhil-pereosmyslenie-vsej-platformy?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/---nam-nuzhen-kubernetes-2-0---inzhener-predlozhil-pereosmyslenie-vsej-platformy</guid>
      <description><![CDATA[<p>Инженер предложил Kubernetes 2.0: меньше YAML, новый пакетный менеджер, IPv6 по умолчанию и модульное хранилище вместо etcd</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/---nam-nuzhen-kubernetes-2-0---inzhener-predlozhil-pereosmyslenie-vsej-platformy">«Нам нужен Kubernetes 2.0»: инженер предложил переосмысление всей платформы</a>»</p>]]></description>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Jun 2025 05:17:18 GMT</pubDate>
      <content:encoded><![CDATA[<p>Инженер и энтузиаст Kubernetes <a href="https://matduggan.com/what-would-a-kubernetes-2-0-look-like/">опубликовал</a> <b>манифест о радикальном обновлении </b>системы, которую он использует уже более 10 лет.</p><p>Его тезис прост: <b>Kubernetes работает, но технический долг и архитектурные ошибки накапливаются — и пора перезапустить проект как Kubernetes 2.0</b>.</p><p>В посте инженер прошёлся по истории Kubernetes с момента первых коммитов в 2014 году до текущего состояния, а затем предложил перечень изменений, которые могли бы серьёзно упростить работу с платформой — особенно для малых и средних команд.</p><h2>Что работает хорошо в Kubernetes</h2><ul><li>Масштабируемость контейнеров — от Docker Compose к кластерам из тысяч машин;</li><li>Самовосстановление — ментальная модель «петы → скот → UUID» с переходом к полной заменяемости нод;</li><li>Джобы и фоновые задачи — больше никакого cron01;</li><li>Простой сервис-дискавери — DNS и стабильные IP без танцев с IP-таблицами.</li></ul><h2>Но что пора менять</h2><h3>1. YAML нужно заменить на HCL</h3><p>Автор критикует YAML за отсутствие типизации, частые ошибки из-за отступов и странное поведение (вроде «проблемы Норвегии», где 'NO' парсится как false). Взамен он предлагает HCL — тот самый язык, что используется в Terraform. Он типизирован, валидируем, поддерживает выражения, условия, шаблоны и модули.</p><h3>2. Нужно позволить заменить etcd</h3><p>Автор предлагает сделать абстракцию для хранилища состояния и разрешить использовать альтернативы, вроде<a href="https://github.com/k3s-io/kine"> kine</a> или<a href="https://github.com/canonical/k8s-dqlite"> dqlite</a>, особенно для малых кластеров или edge-устройств.</p><h3>3. Helm устарел — нужен родной пакетный менеджер</h3><p>Helm вырос из временного решения и теперь тянет за собой ворох проблем: хрупкие шаблоны, сложные зависимости, неработающий механизм проверки, нестрогое семантическое версионирование. Взамен предлагается создать KubePkg — систему управления пакетами с:</p><ul><li>семантическими зависимостями,</li><li>встроенной поддержкой CRD и состояний,</li><li>политиками обновлений и резервным копированием,</li><li>полноценной схемой конфигураций, проверкой и подписями.</li></ul><h3>4. IPv6 по умолчанию</h3><p>Модель с NAT, приватными IPv4-диапазонами и ручной настройкой стала тормозом. Автор предлагает сделать IPv6 дефолтом, чтобы:</p><ul><li>упростить маршрутизацию между подами и кластерами;</li><li>избавиться от ограничения по IP-адресам;</li><li>сократить накладные расходы на сетевую инфраструктуру.</li></ul><p><i>«По-настоящему важны не только возможности, а то, что стоит по умолчанию»</i>, — пишет автор. И предлагает не ждать, пока сторонние проекты исправят архитектурные слабости Kubernetes, а включить необходимые фичи в саму платформу.</p><p>Полный текст манифеста можно прочитать в материале по <a href="https://matduggan.com/what-would-a-kubernetes-2-0-look-like/">ссылке</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как разработать простое приложение и тратить на него 2000$ в месяц</title>
      <link>https://tproger.ru/articles/kak-razrabotat-prostoe-prilozhenie-i-tratit-na-nego-2000--v-mesyac</link>
      <comments>https://tproger.ru/articles/kak-razrabotat-prostoe-prilozhenie-i-tratit-na-nego-2000--v-mesyac?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-razrabotat-prostoe-prilozhenie-i-tratit-na-nego-2000--v-mesyac</guid>
      <description><![CDATA[<p>Разработчик показывает, как из простого приложения сделать дорогостоящее — за счет трат на сервера, инфраструктуру и многое другое.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-razrabotat-prostoe-prilozhenie-i-tratit-na-nego-2000--v-mesyac">Как разработать простое приложение и тратить на него 2000$ в месяц</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 06 Jun 2025 12:31:20 GMT</pubDate>
      <content:encoded><![CDATA[<p>Да, из простого приложения можно создать такую архитектуру, которая будет стоить более $2000 в месяц. В этом <a href="https://www.youtube.com/watch?v=nYlv0I9Ips0">видео</a> разработчик показывает, как пошагово усложнять инфраструктуру простого приложения для задач, добавляя все больше и больше компонентов. А чтобы вам было проще сориентироваться — мы адаптировали его на русский.</p><h2>Этап 1: Простой MVP за $0</h2><p>Изначально нужно создать максимально простое приложение для управления задачами: веб-страница с несколькими категориями и возможностью добавлять таски. На фронте разработчик использует библиотеку Shad CN UI, а на бэке — Flask. Данные хранятся просто в словаре Python. Все приложение — это один файл. Оно запускается в Docker-контейнере через docker compose.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-06/b4963af4-3c83-4697-a8be-848850a1ee82.png" alt="" /></figure><p>Это MVP работает локально на компьютере разработчика и рассчитано на одного пользователя. Такой подход позволяет всё упростить, но при перезапуске контейнера все данные будут утеряны. Правда, чтобы получить прибыль, этого недостаточно.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-06/cced47f6-e8b2-40dd-a540-476a233e217e.png" alt="" /></figure><h2>Этап 2: Инфраструктура на $30</h2><p>Чтобы приложение стало более удобным и приближенным к продакшену, разраб добавляет несколько главных компонентов:</p><ul><li><b>База данных:</b> PostgreSQL.</li><li><b>Веб-сервер:</b> Nginx для проксирования запросов и избавления от портов.</li><li><b>Аутентификация: </b>авторизация через JWT и интерфейсы входа и регистрации на фронтенде.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-06/e903bb53-7168-4485-9d3a-a11f68015901.png" alt="" /></figure><p>Все эти компоненты подключаются к существующему приложению через docker-compose.yml. Благодаря этому теперь можно запускать приложение на localhost, а не по порту, и все будет работать как полноценное веб-приложение. Размещение такой системы на бесплатном облачном тарифе или VPS обойдётся в пределах 30 долларов.</p><h2>Этап 3: Допиливание до $100</h2><p>Разработчик добавляет допфункции:</p><ul><li><b>Уведомления по email:</b> вместо стороннего API — система очередей с RabbitMQ и воркером, который отправляет письма.</li><li><b>Обновления в реальном времени:</b> WebSocket’ы для синхронизации задач на разных устройствах.</li><li><b>Кэширование:</b> Redis для хранения данных в памяти, что значительно ускоряет работу.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-06/4a4ace77-7e6c-4e2f-b8a3-03943a57254a.png" alt="" /></figure><p>Также подключается Docker Build Cloud — сервис для параллельной сборки контейнеров и шаринга кеша между проектами. Это повышает производительность и ускоряет разработку.</p><p>Теперь в системе работает очередь заданий, кеш, WebSocket-сервер, SMTP и полноценная база данных. Все эти компоненты увеличивают инфраструктурные затраты до примерно $100 в месяц.</p><h2>Этап 4: Мониторинг и масштабирование за $500</h2><p>Разработчик внедряет:</p><ul><li><b>Логирование:</b> стек ELK (Elasticsearch, Logstash, Kibana).</li><li><b>Мониторинг:</b> Prometheus и Grafana.</li><li><b>Горизонтальное масштабирование:</b> добавляются реплики некоторых сервисов и балансировка нагрузки через Nginx.</li></ul><p>Эти инструменты позволяют отслеживать метрики, визуализировать логи, следить за состоянием приложений и быстро выявлять сбои. Инфраструктура становится ближе к корпоративному уровню. Стоимость такого комплекса достигает уже около 400–500 долларов в месяц.</p><h2>Этап 5: Целых $2000 долларов</h2><p>Разработчик решает перейти на Kubernetes и развернуть приложение в разных дата-центрах по всему миру. Для управления трафиком используется глобальный балансировщик нагрузки (например, Cloudflare). А чтобы все работало стабильно, внедряются:</p><ul><li>Postgres с репликацией в реальном времени,</li><li>Redis для быстрой отдачи данных.</li></ul><p>Сейчас без ИИ приложение уже не имеет смысла. Поэтому разработчик решает добавить серверлесс-функции с категоризацией задач, приоритетами и предложениями на основе поведения пользователей, а также с использованием обработки естественного языка для создания тасков. Также подключаются правовые ограничения — поддержка GDPR и CCPA.</p><p>Для мониторинга:</p><ul><li>Jaeger — для распределённой трассировки,</li><li>ELK Stack — для логов,</li><li>Grafana + PagerDuty — для алертов и инцидентов.</li></ul><p>Вишенка на торте — план восстановления после катастроф: бэкапы, автоматическое переключение на другие регионы и подготовка команды.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-06/399735e5-c8d1-4003-9ed2-91d9e5b83764.png" alt="" /></figure><p>Хотя вся система началась с одного Python-файла и простого UI, шаг за шагом разработчик добавлял в нее компоненты, которые делают её пригодной для реального продакшена: защита, масштабируемость, отказоустойчивость, мониторинг, кеширование и очереди. И оно вполне может стоить несколько сотен или даже тысяч долларов в месяц при развертывании в облаке.</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>Как я развернул сайт на Java Spring Boot + Angular SSR с Docker и Nginx: личный опыт</title>
      <link>https://tproger.ru/articles/kak-ya-razvernul-sajt-na-java-spring-boot---angular-ssr-s-docker-i-nginx--lichnyj-opyt</link>
      <comments>https://tproger.ru/articles/kak-ya-razvernul-sajt-na-java-spring-boot---angular-ssr-s-docker-i-nginx--lichnyj-opyt?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Тюрин ]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ya-razvernul-sajt-na-java-spring-boot---angular-ssr-s-docker-i-nginx--lichnyj-opyt</guid>
      <description><![CDATA[<p>Как развернуть сайт на Spring Boot и Angular с SSR, Docker и Nginx: пошаговый опыт настройки, устранения ошибок, подключения HTTPS и защиты от ботов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ya-razvernul-sajt-na-java-spring-boot---angular-ssr-s-docker-i-nginx--lichnyj-opyt">Как я развернул сайт на Java Spring Boot + Angular SSR с Docker и Nginx: личный опыт</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[SEO]]></category>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 31 May 2025 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Проект представляет
собой веб-приложение на Spring Boot и Angular.
Первоначально я выбрал простую монолитную
архитектуру, но по мере роста требований
и целей пришлось перейти на микросервисный
подход. Здесь я расскажу, как это
происходило: с конфигурациями, ошибками
и решениями.</p><h2>Монолитная архитектура</h2><p>Исходная схема:</p><ul><li>Backend: Spring Boot</li><li>Frontend:
	Angular</li></ul><p>Так как у меня уже
был арендованный VDS, я зарегистрировал
домен у одного известного провайдера,
а хостил сайт уже на VDS сервере.
Для простоты интегрировал Angular-сборку
в Spring Boot как статику через
frontend-maven-plugin.
Всё собиралось в один JAR. Почему так?
Ранее уже был такой опыт, и я решил пойти
этим путем.</p><p>После регистрации
домена необходимо подождать, чтобы ввести доменное имя.
Значит есть время для запуска и настройки
приложения. Однако при тестировании
проявились ключевые недостатки:</p><ul><li>Отсутствие SSR в
	Angular негативно влияло на SEO;</li><li>Ошибка в Angular ломала Maven-сборку;</li><li>Сложно поддерживать и масштабировать.</li></ul><h2>Переход на микросервисы</h2><p>Было принято решение
разделить фронтенд и бэкенд на отдельные
сервисы и использовать микросервисный
подход с SSR для Angular:</p><p>Новая структура:</p><ul><li>Backend: Spring Boot</li><li>Frontend:
	Angular Universal (SSR)</li><li>Инфраструктура:
	Docker Compose, Nginx, HTTPS</li></ul><h3>Docker, Nginx и запуск</h3><p>Создана базовая
структура docker-compose.yml:</p><p>И соответствующий
Nginx:</p><p>После запуска проект
открывался по IP, но появилось множество
проблем:</p><ul><li>Дублирование
	API-префиксов: /api/api/endpoint
→
	Решение: корректировка proxy_pass
	и URL в Angular</li><li>Редиректы
	на POST: Spring добавлял лишние слеши
→
	Решение: правильные аннотации и настройка
	Nginx</li><li>405
	Method Not Allowed
→ Решение: использовать
	@PostMapping</li><li>Docker-сети
→
	Решение: задать общую сеть в
	docker-compose.yml</li></ul><h3>Безопасность: HTTPS, SSL, CORS</h3><p>Чтобы сайт открывался
по имени с панели провайдера для моего
домена, значения DNS-сервера оставил без
изменений (провайдер предоставляет их
бесплатно), а для ресурсной записи @ и
www указал ip адрес своего хостинга. Так
как провайдер домена бесплатно
предоставил SSL-сертификаты (Let's Encrypt), то
как я их интегрировал:</p><p>Скачал с панели
провайдера и перенес на хостинг такие
файлы:</p><p>domain.crt — сертификат</p><p>domain.key — приватный
ключ</p><p>ca_bundle.crt — цепочка
доверия</p><p>Добавил
в Nginx такую запись для HTTPS:</p><p>Но при обращении к сайту по https конечно же возникли ошибки.
А именно: в логах Nginx были ошибки на
SSL_CTX_use_PrivateKey_file.
Оказалось формат был PKCS#7, а
требовался PEM. Конвертировал через
OpenSSL:</p><p>Так
как сертификаты имеют срок действия,
не стоит забывать об их продлении и
обновлении.</p><p>К
тому же всегда следует проверять логи
Nginx (error.log), там могут находится ответы
на вопросы, почему сайт не работает.</p><p>На стороне Spring Boot
были CORS-проблемы, решено так:</p><h3>Атаки ботов и защита</h3><p>После запуска сайта
в логах Nginx стали появляться тысячи
запросов от ботов, ищущих уязвимости
WordPress, PHPMyAdmin и других популярных утилит,
хотя мой сайт работает на Java/Angular. Пример
лога:</p><p><i>45.155.205.213
- - [01/Jan/2023:04:12:11 +0000] "GET /wp-login.php HTTP/1.1"
404 153</i></p><p>Добавлен фильтр в
nginx.conf:</p><h3>Финальная конфигурация</h3><p>После
всех настроек мой сайт
работает и полностью функционирует.
Конфигурация сильно изменена по сравнению
с первоначальной. Вот как они выглядят
сейчас.</p><p><i>docker-compose.yml</i></p><p><i>
nginx.conf</i></p><p><i>
Dockerfile backend</i></p><p><i>
Dockerfile frontend</i></p><p>Разделение сервисов
улучшило поддержку и масштабируемость, к тому же, я получил ценные знания. Надеюсь,
статья будет полезна тем, кто разворачивает
подобные конфигурации на Java и Angular.</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>Как не сломать прод? Топ 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>Разбираем 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>Большой гайд по 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>Geeks do it better: как прошла конференция GoCloud 2025 от Cloud.ru</title>
      <link>https://tproger.ru/articles/geeks-do-it-better--kak-prowla-konferenciya-gocloud-2025-ot-cloud-ru</link>
      <comments>https://tproger.ru/articles/geeks-do-it-better--kak-prowla-konferenciya-gocloud-2025-ot-cloud-ru?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/geeks-do-it-better--kak-prowla-konferenciya-gocloud-2025-ot-cloud-ru</guid>
      <description><![CDATA[<p>Недавно мы побывали на большой конференции по облакам и искусственному интеллекту GoCloud, которую ежегодно проводит Cloud.ru. Делимся итогами конференции и рассказываем, как компании удается создавать топовые облачные сервисы и драйвить коммьюнити.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/geeks-do-it-better--kak-prowla-konferenciya-gocloud-2025-ot-cloud-ru">Geeks do it better: как прошла конференция GoCloud 2025 от Cloud.ru</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Big Data]]></category>
      <category><![CDATA[Конференции]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></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[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 23 Apr 2025 11:15:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Cloud.ru — лидер рынка облачных сервисов и AI-технологий, который делает доступ к облакам и искусственному интеллекту простым и удобным. В прошлом году компании исполнилось пять лет — за это время Cloud.ru из облачного технологического стартапа вырос до провайдера, который предлагает больше 100 IaaS- и PaaS-сервисов. Они охватывают практически любые задачи и сценарии использования клиентами облачных технологий: инфраструктурные сервисы, платформенные решения, инструменты для разработки, хранения и обработки больших данных и работы с ИИ в облаке.</p><p>Сейчас рынок облачных сервисов — крайне перспективная отрасль. В России процент проникновения облачных услуг по данным провайдера — всего 28%, поэтому возможности для роста очень большие.10 апреля компания провела масштабную конференцию, которую посетили более 5500 айтишников онлайн и офлайн. На открытии GoCloud 2025 топ-менеджеры представили новую платформу для работы с данными, AI-решения, заявили о внедрении AI-агентов в свои платформы, а также рассказали, что такое гибридное облако, почему искусственный интеллект нужен почти всем компаниям, а главное — какие релизы Cloud.ru готовит в будущем.</p><p>На конференции было три трека:</p><ol><li><b>Инфраструктура и сервисы</b> — здесь спикеры Cloud.ru рассказывали о новых сервисах и платформах, особенно про публичное облако Cloud.ru Evolution</li><li><b>AI&amp;ML</b> — был посвящен новым AI-фичам и работе с ML-моделями, которые улучшат клиентский опыт и упростят жизнь разработчикам и пользователям</li><li><b>Сценарии работы в облаке</b> — здесь выступали спикеры из крупных компаний и делились своим опытом использования облаков.</li></ol><p>В статье рассказываем о главных анонсах Cloud.ru и итогах конференции.</p><h2>Что нового в Cloud.ru Evolution</h2><p><a href="https://cloud.ru/evolution?utm_source=tproger&amp;utm_medium=pr_article&amp;utm_campaign=gocloud2025_review">Cloud.ru Evolution</a> — публичное облако, построенное на собственных разработках и open source, где интегрированы самые необходимые разработчикам сервисы.</p><p>На прошлой конференции в 2024 году Cloud.ru уже успели представить много новых компонентов в платформе — тогда в ней было доступно 20 сервисов. За год ей воспользовались 39 тыс. человек, а число сервисов выросло в 2 раза.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-23/393169d9-8660-44f7-9e96-954c47c1a3d3.jpeg" alt="" /><figcaption>Все сервисы в Cloud.ru Evolution</figcaption></figure><p>В мае этого года пользователям будут доступны новые платформенные сервисы для работы с большими данными в облаке. Они работают по модели PaaS, используют контейнерную архитектуру и предлагают автомасштабирование, гибкость и безопасность. Сервисы упрощают обработку и анализ данных, подходят для AI/ML-задач, интегрируются с S3, Artifactory Registry и Evolution DBaaS.</p><p>Некоторые из них можно попробовать уже сейчас:</p><ul><li><a href="https://cloud.ru/products/evolution-managed-arenadatadb?utm_source=tproger&amp;utm_medium=pr_article&amp;utm_campaign=gocloud2025_review">Evolution Managed Arenadata DB</a> — это управляемая PaaS-база на Greenplum для хранения и обработки до 50 ТБ данных. Подходит для аналитики, AI/ML, отчетности, а оплата проходит по модели pay-as-you-go.</li><li><b>Evolution Data Platform</b> — это платформа от Cloud.ru для работы с большими данными. Уже можно протестировать: Evolution Managed Trino — SQL-движок для работы с разными источниками данных, Evolution Managed Metastore — хранилище метаданных, Evolution Managed Spark — сервис для распределенной обработки данных.</li></ul><p>Evolution Managed Trino и Metastore выйдут в коммерческий доступ во втором квартале 2025, а Evolution Managed Airflow и Evolution Managed BI станут доступны для тестирования.</p><p>Также в Cloud.ru Evolution появится AI-помощник, который будет закрывать базовые задачи.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-23/1aa772ea-38a5-497a-ac63-3db7fa0cd040.png" alt="" /></figure><blockquote>Помощник должен автоматизировать рутинные задачи и максимально снизить порог входа в облака и работу с ними, в перспективе значительно упростит работу DevOps. Всю ответственность за то, что он делает, будем нести мы, как провайдер. Помощник будет эволюционировать и закрывать все больше рутинных задач: реагировать на alert и monitoring, следить за автоматизацией, а в будущем поможет управлять эффективностью облачной инфраструктуры, ее масштабированием и стабильностью. С момента запуска помощники будут доступны в публичных, гибридных и частных облаках Cloud.ru.</blockquote><h2>Cloud.ru Evolution Stack + AI — один из главных анонсов конференции</h2><p>В марте Cloud.ru выпустили на рынок <a href="https://cloud.ru/evolution-stack?utm_source=tproger&amp;utm_medium=pr_article&amp;utm_campaign=gocloud2025_review">Cloud.ru Evolution Stack</a> — платформу для создания частных и гибридных облаков. Решение рассчитано на крупный бизнес, госсектор, финтех, ритейл и промышленность. Платформу можно развернуть в собственном ЦОДе или объединить с публичным облаком Cloud.ru Evolution. Внутри — всё, что нужно: виртуализация, инструменты для работы с ML, PaaS- и IaaS-сервисы, управляемый Kubernetes, S3-хранилище, очереди сообщений и даже витрина приложений в формате маркетплейса.</p><p>Для удобства администрирования есть Multicloud Manager и VM Manager — с их помощью проще управлять виртуальными машинами, следить за инфраструктурой, учитывать ресурсы и подключать SIEM-системы для безопасности.</p><blockquote>Cloud.ru Evolution Stack — наше самое большое достижение за год. Мы создавали его из одной кодовой базы с публичным облаком Cloud.ru Evolution, но пришлось серьезно перестроить процессы. Циклы разработки каждой из платформ отличаются. В публичном облаке можно деплоить непрерывно: если в одном из сервисов появилась ошибка, ее можно сразу же исправить. А в гибриде, релиз которого мы делаем два раза в год, так не получится, поскольку на первый план выходят качество сборки, unit-тесты, интеграционные и нагрузочные тестирования. Процесс разработки усложнился, но мы максимально автоматизировали его. Это серьезная нагрузка, но без серьезного влияния на наш time-to-market.</blockquote><p>При разработке Cloud.ru Evolution Stack главным вызовом была смена подхода. Cloud.ru создает софт для одного публичного облака, а здесь нужен продукт, который можно ставить многократно у разных заказчиков — это радикально меняет процессы и мышление команды. Однако понимая запросы рынка на гибрид и потребности клиентов, компания начала разработку этой платформы еще на ранней стадии Cloud.ru Evolution. Если бы решение было старше, переход на дистрибутив съел бы гораздо больше времени и ресурсов.</p><p>Многие пользователи уже успели протестировать Cloud.ru Evolution Stack. Вот положительные фидбек:</p><ul><li>Платформа предлагает не только виртуализацию и контейнеризацию, но и полный набор сервисов — аудит, IAM, логирование, мониторинг. Это позволяет сразу запускать частное облако для внутренних подразделений без необходимости настраивать личные кабинеты или доступы.</li><li>Платформа легко интегрируется с системами мониторинга, кибербезопасности и авторизации заказчика, выступая как подчинённый компонент, что упрощает внедрение.</li><li>Интерфейс Cloud.ru Evolution Stack полностью кастомизируется — можно красить во всевозможные цвета, поставить свой логотип и так далее.</li></ul><blockquote>Cloud.ru Evolution Stack — мощная платформа со множеством функций, которые расширяют возможности собственной IT-инфраструктуры компаний за счет сервисов публичного облака. Решение может сначала озадачить, но мы всегда рядом: помогаем заказчикам разобраться, обеспечиваем эксплуатацию и полное сопровождение.</blockquote><p>Приступая к работе над Cloud.ru Evolution Stack, поменялись и подходы к продуктовой разработке. Главное — начали сертификацию процесса безопасной разработки по стандарту РБПО, чтобы соответствовать требованиям к надежности и безопасности ПО для критически важных систем. Это ускорит сертификацию Cloud.ru Evolution Stack для крупных заказчиков с полугода-года до квартала.</p><p>На GoCloud Cloud.ru анонсировали <b>Evolution Stack AI-bundle</b> — новую платформу для локального запуска AI-сервисов. Платформа упрощает разработку и масштабирование AI-продуктов, сохраняя полный контроль над данными. По сути, это первое в России гибридное облако с поддержкой AI.</p><p>Что внутри:</p><ul><li>Jupyter Lab для дата-сайентистов;</li><li>инструменты для обучения, дообучения и инференса моделей;</li><li>инфраструктура — Managed Kubernetes с GPU, реестр артефактов, виртуалки с GPU, S3-хранилище и файловая система для ML.</li></ul><p>Платформа гибкая: можно обучать модели в публичном облаке, а инференс запускать в закрытом контуре on-prem или переключаться при нагрузках. Она поддерживает мультитенантность, мониторинг и управление доступом. Плюс, её можно дополнить другими сервисами Cloud.ru для комплексных решений.</p><p>Cloud.ru Evolution Stack AI-bundle входит в реестр российского ПО, соответствует требованиям импортозамещения и будет доступна как софт или программно-аппаратный комплекс по подписке.</p><h2>AI, ML и облака (не роботы)</h2><p>Из других больших анонсов — <b>Cloud.ru</b> <b>Evolution AI Factory.</b> Это новая платформа для создания приложений и AI-агентов в облаке, запускать планируют этим летом.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-23/457415d5-f313-4bd5-91e1-0d3b014131e0.png" alt="" /></figure><p>По своей сути, это цифровая «фабрика», которая объединяет инструменты для работы с искусственным интеллектом — от обучения моделей до запуска сложных мультиагентных систем. Вот, что внутри:</p><ul><li><a href="https://cloud.ru/products/evolution-ml-inference?utm_source=tproger&amp;utm_medium=pr_article&amp;utm_campaign=gocloud2025_review">Evolution ML Inference</a> — с помощью нее можно запускать ML-модели (Hugging Face, Docker-образы) на GPU с поддержкой vLLM, TGI, Ollama, Diffusers, Transformers. Использует Shared GPU, то есть использует столько ресурсов, сколько нужно, для запуска модели.</li><li><b>Foundation Models</b> — доступ к популярным моделям, вроде GigaChat и Gemma, плюс среда AI Playground для тестирования идей.</li><li><b>AI Assistants</b> — создание агентов с подключением к внешним системам и автоматизацией задач.</li><li><b>Cloud.ru ML Space</b> — платформа для глубокого обучения, работает в облаке и on-premise.</li></ul><p>Платформа делает работу с AI <b>проще и доступнее.</b> Не нужно быть экспертом в программировании или тратить кучу денег на серверы — всё уже готово в облаке. Она помогает компаниям быстрее создавать свои AI-продукты: агентов, аналитические системы или что-то совсем кастомное. Внутри будут встроенные ассистенты — новички могут легко собрать целое приложение, а профи — все кастомизировать. Это экономит время, снижает затраты на инфраструктуру и ускоряет запуск новых идей на рынок.</p><p>Ещё одно преимущество — <b>гибкость</b>. Платформа подходит для самых разных задач: от проверки гипотез до создания сложных корпоративных решений — и все в одном месте.</p><p>В Cloud.ru считают, что за нейронками — будущее. И компания уже видит эффект: разработчики активно используют AI-инструменты в задачах, которые не требуют креатива и разработки критических сервисов. Правда, измерить этот эффект пока непросто — слишком уж разные задачи и технологии.</p><blockquote>Я точно знаю, что AI помогает в разработке: используют code assistant, применяют CoPilot. Разработчики уже не представляют работу без него — это как Google лет 15 назад, когда им еще не все широко пользовались, а сейчас он у всех в смартфоне. AI помогает развиваться, ускоряет выполнение ежедневных задач. То, что раньше делали месяц, теперь можно уложить в две недели.</blockquote><h2>Что будет дальше: планы Cloud.ru</h2><p>В 2025 году Cloud.ru продолжат развивать собственные облачные платформыи PaaS . Сейчас запросы российского бизнеса, особенно крупных B2B-клиентов, часто совпадают с западными стандартами, так как многие из них уже работали с крупнейшими облачными провайдерами. Помимо базовых требований к надежности и безопасности, заказчики ждут продвинутых решений.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-23/23a10643-5754-4cb4-81a0-d919fff6bf92.png" alt="" /></figure><blockquote>Три четверти нашего бэклога — это запросы заказчиков, а четверть — инновации и создание трендов. У нас в России требовательные клиенты, особенно крупные B2B-компании, и они знают, что такое хорошее облако. Помимо надежности и кибербезопасности им нужны продвинутые инструменты — AI, Big Data, высокая производительность. Cloud.ru AI Factory — наш главный фокус, до конца года мы выпустим много новых сервисов. Cloud.ru Evolution Stack будем тиражировать в продакшен, чтобы помогать бизнесу.</blockquote><p>А ещё Cloud.ru продолжит прокачивать <b>AI-комьюнити</b> — компания предоставляет открытую экосистему для вендорских продуктов. В ней можно создавать конкурентные решения, например, fully-managed сервисы в Cloud.ru Evolution с помощью Partner API. Так вход в облачные технологии становится еще проще и удобнее.</p><p><i>Реклама. Рекламодатель: ООО «Облачные технологии», ИНН 7736279160, erid: 2W5zFJ5hRC4.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx</title>
      <link>https://tproger.ru/articles/kak-ya-hotel-sozdat-ii-assistenta--a-v-itoge-razvernul-svoj-pervyj-server-s-n8n--docker-i-nginx</link>
      <comments>https://tproger.ru/articles/kak-ya-hotel-sozdat-ii-assistenta--a-v-itoge-razvernul-svoj-pervyj-server-s-n8n--docker-i-nginx?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Михаил Анкудинов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ya-hotel-sozdat-ii-assistenta--a-v-itoge-razvernul-svoj-pervyj-server-s-n8n--docker-i-nginx</guid>
      <description><![CDATA[<p>История о том, как попытка автоматизировать рутину привела к открытию и прокачке моих технических навыков в DevOps.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ya-hotel-sozdat-ii-assistenta--a-v-itoge-razvernul-svoj-pervyj-server-s-n8n--docker-i-nginx">Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[BASIC]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Apr 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сначала я думал, что справлюсь за пару часов. В итоге — несколько суток, десятки ошибок, и первый боевой сервер с доменом, Docker и полноценным развертыванием n8n. История о том, как попытка автоматизировать рутину привела к открытию и прокачке моих технических навыков.</p><p>Я создал свой проект с полноценной документацией с сылкой на <a href="https://github.com/Magbusjap/YandexCloudProject.git">Github</a> по развертыванию n8n на собственном сервере.</p><h2>Завязка</h2><p>Изначально я хотел лишь сократить рутинные задачи. Создавал контент, работал над свежими идеями и понимал — мне не хватает времени на то, что действительно важно. На горизонте замаячила идея: создать собственного ИИ-ассистента, который автоматизирует мелочи вроде шаблонов, публикаций и повседневных действий.</p><p>В сети крутился хайп вокруг n8n — open-source, который можно развернуть на любом сервере, и с полной свободой действий. Конечно, до меня не сразу дошло, на официальном сайте очень дорогие тарифы. Поэтому я начал изучать туториалы на Ютубе. В этот момент я даже не подозревал, что эта идея затянет меня на неделю, подарит десятки ошибок и первый полноценный сервер.</p><figure><img src="https://media.tproger.ru/user-uploads/114647/2025-04-21/ae68a402-c9aa-4922-8f3b-0eb00a46235c.png" alt="" /></figure><h2>Развитие: от ноды до ноды</h2><h3>Railway: первая проба пера</h3><p>Самые простые туториалы были про развертывание n8n на собственном компьютере. Некоторые комментарии под такими видео ссылались на то, что развертывание n8n на собственной машине — не самая лучшая идея, и возможно, не самая удачная. Я тогда прислушался к их мнению и решил попробовать сразу поискать другие способы.</p><p>Подходящей оказалась платформа Railway. Бесплатный пробный период, $5 бонуса за привязку GitHub — всё выглядело перспективно. Я:</p><ul><li>подключил GitHub;</li><li>получил API-ключ;</li><li>запустил n8n;</li><li>настроил Telegram-бота.</li></ul><p>И всё шло нормально, пока не начались проблемы с Telegram Trigger — он просто не отвечал. Ошибок в логах почти не было, но и связи — тоже. Я тратил часы, пробовал разные переменные, гуглил, спрашивал у нейросетей — без толку. Тогда в рекламе мне попался Yandex Cloud с двухмесячным бесплатным периодом. Я решил попробовать развернуть n8n на нем.</p><figure><img src="https://media.tproger.ru/user-uploads/114647/2025-04-21/0d21c9ca-8d12-487b-92b5-f078e45aceea.png" alt="" /></figure><h3>Виртуалка, SSH и первый затык</h3><p>Я развернул ВМ на Ubuntu 20.04 LTS, выбрав её за стабильность и поддержку. Конфигурация:</p><ul><li>2 vCPU</li><li>50 ГБ SSD</li><li>Снятие с бонуса: 2683.50 руб/мес</li></ul><p>Сгенерировал SSH-ключ через Git Bash. Первый облом: ключ исчез. После нескольких безуспешных попыток изменить его, понял — проще пересоздать ВМ. У Yandex Cloud есть ограничения:</p><p>нельзя обновить на лету.</p><p>Подключение выглядело так:</p><p>Когда получилось зайти — был настоящий кайф. Я обновил систему, установил Docker, понял, что GUI у сервера не будет — только терминал. Ну что ж, поехали.</p><h3>Docker, docker-compose, и n8n-raw.env</h3><p>Следующим шагом стал</p><p>и файл</p><p>В нём я прописал:</p><p>Это позволило не держать всё в голове и запускать конфигурации быстрее. Первые ошибки появились почти сразу — что-то не так с путями, потом — с переменными. Без ChatGPT и stackoverflow не обошлось.</p><h3>Домены и HTTPS</h3><p>Купил домен</p><p>настроил A-записи, скачал сертификаты. Nginx — отдельная песня. Нужно было:</p><ol><li>Объединить три сертификата в один;</li><li>Подключить его через конфиг;</li><li>Настроить редирект на HTTPS.</li></ol><p>Вот пример из моего nginx.conf:</p><figure><img src="https://media.tproger.ru/user-uploads/114647/2025-04-21/8594dbbc-d99b-4a63-9f19-fa10a6c4bea5.png" alt="" /></figure><h3>Telegram и «почему ты не работаешь?!»</h3><p>Подключил Telegram Trigger — ноль. Ни один запрос не проходил. Ошибки:</p><ul><li>Lost connection to the server</li><li>Webhook error: unexpected status code 403</li><li>Логи молчали или выдавали бессмысленное.</li></ul><p>Проблема оказалась в том, что webhooks шли через HTTP, а всё у меня уже работало через HTTPS. Куки не обрабатывались, туннель API оказался лишним, docker не доверял IP клиента. Пришлось в docker-compose.yml прописывать:</p><p>Потом был конфликт сертификатов, SSE и WebSocket. Я потратил день на всё это — и наконец бот ответил.</p><h2>Разгрузка: спасение в Obsidian и GitHub</h2><p>Всю документацию, команды, даже ошибки я хранил в Obsidian. Там же создавал шаблоны, чтобы не печатать одни и те же команды. Это было моим вторым спасением после ChatGPT.</p><p>Когда всё начало получаться — создал <a href="https://github.com/Magbusjap/YandexCloudProject.git">репозиторий</a>. Сейчас там:</p><ul><li>README.md с пошаговыми действиями;</li><li>n8n-raw.env для автоматизации запуска;</li><li>Docker-конфиги.</li></ul><p>Проект пока не идеален, но рабочий и повторяемый.</p><h2>Финал: в этой истории я вырос</h2><p>Когда Telegram наконец сработал — было 3 часа ночи. Я сидел в темноте, всматривался в терминал и не верил. Всё. Бот работает. HTTPS есть. Docker жив. Я сам развернул свой первый полноценный сервер. Сам. С нуля. С ошибками. Без опыта.</p><p>Теперь я могу:</p><ul><li>Развернуть ВМ и подключиться через SSH;</li><li>Настроить Docker и Nginx;</li><li>Создать и связать домен;</li><li>Конфигурировать n8n под прод;</li><li>Документировать всё на GitHub.</li></ul><p>Я только начал, но теперь точно знаю — могу не просто тестировать, а создавать решения с нуля.</p>]]></content:encoded>
    </item>
  </channel>
</rss>