Обновить
256K+

DevOps *

Методология разработки программного обеспечения

447,24
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Домашний сервер без белого IP: безопасная публикация сервисов через VPS, обратный SSH-туннель и Caddy

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели21K

Как безопасно опубликовать домашний сервер без белого IP и проброса портов: домашний сервер сам устанавливает исходящее SSH-соединение к VPS, на VPS создаётся локальный endpoint обратного SSH-туннеля, а внешний доступ к сервисам отдаётся через Caddy по HTTPS. Backend-порты вроде Nextcloud, Home Assistant или Jellyfin не открываются напрямую в интернет, а остаются доступными только через loopback и reverse proxy. Отдельное внимание уделено hardening: ограниченный пользователь tunneluser, SSH-ключи, autossh, systemd, UFW, проверка sshd_config и диагностика типовых ошибок.

Поехали

Хотел упростить мониторинг проектов и в отпуск — пришлось обучать свой LLM. Часть 4. Тестирование

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели14K

Продолжаем серию про файнтюнинг и создание DevOps-агента Oni. В первой части я собирался в отпуск и хотел, чтобы локальная моделька через OpenClaw сама мониторила ошибки и переподнимала проекты — пока я отдыхаю. Перебрал много разных моделей через Ollama и понял, что половина либо не умеет tool calling, либо ломаются на multi-step. В отпуск я в итоге не уехал — вместо этого снял VM с RTX 3090, начал учить Qwen3-14B через Unsloth QLoRA, а через неделю купил с авито старенький Dell с 3090, чтобы обучать у себя на локалке — стало интересно победить проблему.

Во второй части я пробовал разные подходы к файнтюнингу Qwen3:14b и понял: incremental delta-merge не работает. Дошёл до oni:v8 с 11/11 на Django scaffold, попытался добавить SSH/docker поверх — и модель забыла Django. Пять регрессий подряд, anchor-примеры не спасают, самый мягкий lr=1e-5 всё равно ломает. Познакомился с catastrophic forgetting, потратив пять ночей и полгигабайта удалённых GGUF-чекпоинтов. Переехал на fresh-from-base: каждая base-N с нуля от чистого Qwen3-14B, эволюционирует только датасет.

В третьей части — про дистилляцию. Hand-crafting упёрся в потолок: каждый трейс — это итерация с Claude, ревью, правки, повторная генерация, и так на каждый из тысяч примеров. Сделал локальную дистилляцию через gemma4:31b на той же 3090: сырые датасеты → фильтр → пере­формат в agent-trace → валидация → датасет. Получил внушительную базу датасетов для моего агента, не вкладывая деньги на сторону.

А эта, четвёртая часть — самая серьёзная. С неё начинается всё по-взрослому. Первые три — это «как я собрал инструмент». Тесты — это «как я понимаю, что инструмент вообще работает, и что он не работает не так, как я думаю». Без них вся история выше — самообман: цифры обучения красивые, чекпоинты лежат, в чате модель отвечает уверенно — а что она реально умеет, чего не умеет и где у неё дыры, ты не знаешь.

Читать далее

VPS-бастион: доступ к домашнему серверу без белого IP

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели28K

У вас дома крутятся полезные сервисы: Home Assistant, code-server или Nextcloud. Или вы только собираетесь их запустить. Пока вы дома, всё открывается по локальному IP. Но стоит выйти за пределы квартиры, и сервисы пропадают. Причина: провайдер выдал серый IP-адрес, то есть применяет CGNAT. Белый адрес получить либо нельзя (примерно, как советский дефицит), либо он стоит дополнительных денег.

Читать далее

Релиз GitLab 19.0: ИИ‑оркестрация, которая наконец‑то догнала темп написания кода

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели11K

21 мая 2026 года вышел мажорный релиз, переосмысляющий то, как платформа управляет жизненным циклом от идеи до деплоя.

Основной повесткой как уже принято стал ИИ, в Gitlab уделили этому особое внимание.
ИИ уже генерирует больше кода, чем успевают проверять инженеры. Merge Request'ы накапливаются, конфликты разрастаются, секреты утекают в переменные окружения, а зависимости с уязвимостями тихо живут в requirements.txt. GitLab 19.0 отвечает на этот вызов не просто набором фич, а сменой парадигмы: платформа берёт на себя операционную работу, оставляя командам только решения, требующие человеческого суждения.

Ниже я разберу релиз подробно, постараюсь описать примеры конфигурации, архитектурные схемы и дам выводы, таким образом как я это понял)

Читать далее

Мониторинг Kerio Connect через Zabbix 7: разбор шаблона без агентов и regex по DAT

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели8.9K

Kerio Connect — почтовый сервер, который в нашей стране всё ещё крутится в десятках организаций, особенно тех, что когда-то слезли с Exchange и не захотели возвращаться. Для системного администратора это означает простую вещь: почта работает, а наблюдать за ней нечем. Официальная страница zabbix.com/integrations предлагает шаблоны только для Kerio Control (фаервол), для Connect — пустота. В zabbix/community-templates тоже пусто. На форумах советуют парсить графический DAT-файл регулярками — работает, но теряется API-уровень.

У меня под рукой Kerio Connect 10.x в продакшене, и однажды я устал смотреть на него через веб-интерфейс и счётчики антиспама в логе. За несколько дней собрал Zabbix 7 шаблон поверх Kerio Admin API (JSON-RPC), выложил под MIT. В статье — разбор того, что выяснилось: почему минимальная роль для API оказалась тупиком, как 4 вызова уложились в один master-айтем, что делать с отрицательной дельтой на counter reset и почему агент на хосте всё-таки иногда нужен. Без пересказа документации, с граблями.

Читать далее

Как сисадмин написал свою библиотеку для Jira на Ruby: история Rujira

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.9K

Привет, Хабр!

Давайте сразу начистоту: я не профессиональный программист. Я системный администратор и DevOps-инженер. Мой день состоит из автоматизации процессов, настройки серверов, написания скриптов и бесконечной рутины. И, конечно же, работы с тикет-системами, главная из которых — Jira.

Если есть необходимость взаимодействовать с Jira из Ruby-кода, то обычно выбирают гем jira-ruby — заслуженный стандарт индустрии.

Однако, попробовав использовать его для простых скриптов автоматизации в админской экосистеме, я понял: этот инструмент слишком избыточен и тяжел для сисадминских нужд. Мне хотелось чего-то простого, легкого и понятного. Так родилась rujira — моя собственная легковесная библиотека для работы с Jira REST API.

В этой статье я расскажу, почему меня не устроил стандартный гем, как сисадминский взгляд на инструмент помог сделать его удобнее для простых скриптов, и почему rujira идеально подходит для небольших DevOps-задач.

Читать далее

15 Google-аккаунтов и ни рубля на ИИ: пишу VPN-сервис в одиночку

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели24K

Я начал с requests.get() к Hysteria2 API, а через месяц получил рабочий VPN-сервис: FastAPI, React, PostgreSQL, JWT, Docker Compose, несколько VPS-нод, сбор трафика и автодеплой. А ещё выводы о работе с ИИ: где он ускоряет разработку, как улучшить качество кода и почему без собственного понимания проект быстро превращается в месиво.

Читать далее

Ваш Kubernetes упал: найдёте root cause за 15 минут?

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели17K

Вторник, 14:00. Кластер Kubernetes перестал отвечать, команда в панике, а вам нужно за 15 минут найти первопричину.

В этой статье пройдём диагностику реального отказа вместе с SRE: увидим логи, манифест etcd и ошибки, которые совершают даже опытные инженеры. Попробуйте сначала решить задачу сами, а потом сверьтесь с пошаговым разбором и проверьте, насколько вы готовы к такому инциденту.

Читать далее

Как мы в отделе документации создали LLM агента для автоматизированного перевода с английского на другие языки

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.5K

Разбираем, как в отделе документации построили LLM-агента для автоматизированного перевода Markdown-документации. Архитектура, пайплайн, валидация, работа с Ollama, OpenWebUI и Qwen, плюсы и ограничения подхода. 

Читать далее

Разворачиваем облачный ТОиР на заводе за две недели

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели8.7K

Исторически сложилось, что автоматизация ТОиР на заводах — это долго и дорого.

В статье разберем, как сократить этот цикл: отказаться от закупки серверов, перенести систему в облако и запустить пилот на реальном участке за считаные недели с первыми результатами уже через несколько месяцев.

Читать далее

Пайплайн не должен хранить секрет: безопасное хранение и доставка секретов для CI/CD с Deckhouse Code и Stronghold

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели11K

CI/CD-пайплайн, который хранит секреты, — это риск. В безопасной модели он получает доступ к чувствительным данным только на время выполнения задачи и строго в рамках своих прав.

Разбираем, почему GitLab CI/CD Variables — это не хранилище секретов, какие подводные камни ждут при самодельной интеграции GitLab CE с HashiCorp Vault и как связка Deckhouse Code и Stronghold закрывает эти проблемы без Bash-портянок в before_script.

Читать далее

Claudex: как я подружил Claude Code с ChatGPT/Codex OAuth без OpenAI API key

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели18K

Я хотел запускать Claude Code через подписку ChatGPT/Codex. Без OpenAI API key и без потери привычных вещей: инструментов, скриншотов, /compact, длинных сессий и нормальных ошибок.

На бумаге это выглядит как простой локальный прокси. На практике пришлось переводить не только JSON, но и поведение Anthropic API: потоковые события, вызовы инструментов, лимиты контекста, файлы, картинки и типы ошибок.

Так появился мой open source fork Claudex. Репозиторий: github.com/pilc80/claudex. Лицензия — MIT.

Читать далее

Лёгкий мониторинг Proxmox-кластера: Pulse вместо большого Zabbix-стека

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели16K

Полчаса в день у меня уходило на ручной обход шести нод Proxmox через веб-интерфейс — он показывает по одной ноде за раз. И часть рутины всё равно проскакивала: задание PBS остановилось — никто не заметил, ZFS scrub отключили на maintenance и забыли включить, на ноде накопились pending kernel updates, и о них узнаёшь, когда уже надо ребутить.

На Proxmox-кластере, который я администрирую, после миграции с проприетарного гипервизора этот операционный долг копился особенно быстро: отключённые таймеры scrub, остановленные после рестарта PBS задания резервного копирования, дрейф конфигурации между нодами после мажорного апгрейда.

Стандартный путь — полноценный observability-стэк: Zabbix или Prometheus + Alertmanager + Grafana. Это правильный путь, но он плохо подходит к задаче «быстро получить единый экран по Proxmox-кластеру». В этой статье — про другой вариант: лёгкий read-only слой над Proxmox/PBS, который разворачивается за несколько часов и закрывает первый уровень видимости. Инструмент называется Pulse — где он работает, где нет, и что выяснилось в первый месяц эксплуатации.

Читать далее

Ближайшие события

Как я Zabbix с LLM дружил в свободное время. Архитектурный обзор взаимодействия с нейросетью. Часть 3 HLD и немного LLD

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели11K

Это третья статья из цикла о том, как я пытался сделать алерты Zabbix в домашней лаборатории чуть умнее, прикрутив к ним локальную LLM и не получить на выходе архитектурного монстра Франкенштейна.

В первой части мы разобрались с постановкой задачи и ТЗ, затем выбрали себе фаворита из локальных LLM, теперь же займемся скучным занятием- проектированием. В этой статье рассмотрим составление HLD и почему это должен делать человек, а что уже можно отдать нейросети в помощь.

В процессе написания материал разросся до неимоверных размеров, поэтому пришлось поделить его аж на четыре части. Впереди осталась самая интересная заключительная часть с тем, что получилось на выходе. Ее планирую подготовить за 2-3 недели, т.к. это просто хобби.

Часть 1: Вводная и формирование ТЗ
Часть 2: Выбор локальной LLM
Часть 3: Формирование HLD и немного LLD -> вы здесь
Часть 4: Что из этого вышло

Читать далее

Повесть о конфигурации как инженерной гигиене

Время на прочтение17 мин
Охват и читатели12K

Привет, Хабр! Меня зовут Юрий Соловьёв, я ведущий инженер в команде экосистемы Tarantool. С опытом я пришел к тому, что конфигурация должна иметь строгую спецификацию, так же как и HTTP API. В этой статье я предлагаю альтернативный подход на базе protobuf и постараюсь показать, что это не избыточная сложность, а необходимый уровень инженерной гигиены — особенно для систем, рассчитанных на долгую и стабильную жизнь. Это в какой-то мере технорассказ, которым я хочу поделиться — и именно в такой форме.

Читать далее

ИИ-агент сам создал тикет, сам же его взял, и сам закрыл. Менеджер ничего не заметил

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели13K

Автономные агенты в разработке уже встроены в CI/CD живых команд, закрывают реальные тикеты и пишут код, который идёт в прод. Проблема не в том, что они это делают плохо, а в том, что метрики при этом выглядят слишком отлично.

Разобрали, как агенты проходят каждый этап SDLC, что именно идёт не так на каждом из них и почему зелёный дашборд стал наименее надёжным источником правды о состоянии команды.

Читать далее

eBPF для начинающих: практическое введение

Время на прочтение11 мин
Охват и читатели10K

Современные инструменты мониторинга (Prometheus, Grafana, профилировщики) обеспечивают хорошую видимость состояния приложения, но имеют ограничения при анализе низкоуровневых проблем. Технология eBPF (Extended Berkeley Packet Filter) позволяет преодолеть этот барьер, предоставляя безопасный доступ к событиям ядра Linux. 

Статья — это практическое введение в eBPF: попробуем готовые команды для наблюдаемости, сети и безопасности, разберём, как программа попадает в ядро и взаимодействует с user-space через maps и helpers, почему верификатор отклоняет «опасный» код и чем отличаются BCC, libbpf и bpftrace. В конце — короткий обзор того, как eBPF используют Cilium, Falco и Pixie.

Материал будет полезен программистам, DevOps-инженерам, SRE-специалистам и всем, кто интересуется Linux.

Читать далее

Взлом GitHub-репозиториев Grafana Labs: как атака на цепочку поставок npm привела к краже кодовой базы и вымогательству

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели8.1K

Часть I: Первопричина - атака Mini Shai-Hulud на экосистему TanStack

Цепочка поставок как вектор атаки

11 мая 2026 года, в промежутке с 19:20 до 19:26 UTC, произошло одно из наиболее технически изощрённых событий в истории атак на цепочку поставок npm. Группировка TeamPCP опубликовала 84 вредоносные версии пакетов в рамках 42 пакетов из пространства имён @tanstack/* - и всё это за шесть минут.

Кампания получила название Mini Shai-Hulud - отсылка к гигантским песчаным червям из вселенной «Дюны» Фрэнка Герберта. Это не первая волна активности TeamPCP: до этого они скомпрометировали сканер Trivy от Aqua Security в марте 2026-го и npm-пакет Bitwarden CLI в апреле 2026-го. Каждая следующая волна технически сложнее предыдущей.

Как работала атака: три уязвимости в одной цепочке

Атака объединила три уязвимости, каждая из которых по отдельности была бы недостаточна. Злоумышленник создал форк репозитория TanStack/router, открыл pull request, который запустил workflow с триггером pull_request_target, и отравил кэш GitHub Actions через границу доверия fork↔base. Когда легитимный workflow сработал, отравленный кэш был восстановлен, а вредоносный код извлёк OIDC-токен прямо из памяти процесса runner'а.

Ключевой момент: злоумышленники не крали статические npm-токены. Вместо этого они извлекали runtime OIDC-токены напрямую из памяти процесса runner'а, что позволило им аутентифицироваться легитимным образом через trusted publisher bindings и публиковать скомпрометированные обновления в npm-реестр.

Масштаб заражения

Читать далее

Культура инцидентов. Почему поиск виновных на постмортемах убивает надёжность системы

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7K

Когда прод падает, первый управленческий рефлекс — найти человека, после которого всё сломалось. Проблема в том, что такой разбор почти ничего не говорит о реальной надёжности системы: инженеры начинают молчать о слабых местах, постмортемы превращаются в формальность, а одни и те же сбои возвращаются под новыми именами.

В статье разбираемся, почему культура поиска виновных делает инфраструктуру хрупче, как работает blameless‑подход, зачем командам error budget и какие управленческие механизмы помогают превращать инциденты в системные улучшения.

Разобрать подход

9 секунд и нет production-базы. Разбор трёх провалов AI-агентов в проде

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели8.2K

25 апреля 2026, пятница вечером. Jer Crane, основатель PocketOS, смотрит, как AI-агент Cursor удаляет его production-базу. Со всеми бэкапами. За 9 секунд.

Потом Jer спрашивает у агента — почему? И получает дословное признание: «I guessed instead of verifying. I violated every principle I was given».

Модель помнит правила. Цитирует их. И всё равно нарушает.

Это разбор трёх таких случаев — и трёх защит, которые я внедрил у себя после.

Разбираю три случая