Библиотека девопса | DevOps, SRE, Sysadmin
10.4K subscribers
1.86K photos
76 videos
5 files
3.26K links
Все самое полезное для девопсера в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/25874ec4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787
Download Telegram
💡 Сканируйте образы перед деплоем

Вы сделали всё правильно: многоступенчатая сборка, distroless-образ, non-root пользователь, закреплённый дайджест. Образ компактный. А потом выходит CVE в библиотеке, которую подтянул базовый образ полгода назад.

Сканирование образов закрывает эту дыру. Не нужен отдельный инструмент: Trivy бесплатный, быстрый и нормально вписывается в Go CI.

Как запустить

Одна команда и падаем на HIGH и CRITICAL уязвимостях:
trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest


Для GitHub Actions:
- name: Scan image
uses: aquasecurity/trivy-action@master
with:
image-ref: myapp:latest
exit-code: '1'
severity: 'HIGH,CRITICAL'


Запускайте после каждой сборки. Поймаете проблему до прода, а не после звонка от безопасников или, что хуже, после инцидента.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
✌🏻 У нас две новости — хорошая и плохая!

Хорошая: Ваших знаний, скорее всего, хватит, чтобы собрать рабочую демку AI-агента в Colab. 🫡

Плохая: Вы вряд ли выведете его в прод, не обанкротившись на токенах и не слив базу. 🤯

Для защиты от таких сценариев мы полностью пересобрали курс «Разработка AI-агентов». Теперь внутри плотная работа с экономикой ресурсов, дебаг через time-travel в LangGraph, извлечение данных из кривых сканов для RAG и комплаенс по 152-ФЗ.

Если всё ещё сомневаетесь, послушайте голосовое от спикера курса Влада Прошинского, где он объясняет, как правильно тестировать агентов перед релизом.


Программа курса, полный состав спикеров и другие подробности 👈🏻

ВАЖНО! До 5 апреля на курс действует скидка, но свободные места могут закончиться раньше.
🌐 Облачные права для CI без долгоживущих ключей

Каждый, кто настраивал непрерывную интеграцию и доставку, сталкивался с этим моментом. Пайплайн должен обращаться к облаку, и нужно как-то передать ему права.

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

➡️ Узнать ответ

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#задача_со_звёздочкой
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍1
⚙️ mysqldump через docker exec

Самый простой способ сделать бэкап MySQL в Docker — запустить mysqldump прямо внутри контейнера. Не нужно пробрасывать порты и ставить MySQL-инструменты на хост. Всё что нужно уже есть в контейнере.

Базовая команда:
docker exec mysql-container mysqldump \
-u root -p'yourpassword' \
--single-transaction \
--routines \
--triggers \
mydatabase > backup_$(date +%Y%m%d_%H%M%S).sql


Флаг --single-transaction обязателен для InnoDB. Он делает консистентный снимок без блокировки таблиц, приложение продолжает работать в штатном режиме. Флаги --routines и --triggers включают в дамп хранимые процедуры и триггеры, которые mysqldump по умолчанию пропускает.

Бэкап всех баз сразу:
docker exec mysql-container mysqldump \
-u root -p'yourpassword' \
--single-transaction \
--all-databases > full_backup_$(date +%Y%m%d_%H%M%S).sql


Восстановление:
docker exec -i mysql-container mysql \
-u root -p'yourpassword' mydatabase < backup_20260403_040000.sql


Но у этого подхода есть потолок. Нет планировщика, нет сжатия, нет отправки на удалённое хранилище. Всё это придётся добавлять самостоятельно.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
💼 30 сайтов для поиска работы в IT в 2026 году

Рынок IT-вакансий давно не ограничивается hh.ru и LinkedIn. Одни платформы заточены под стартапы и equity-офферы, а другие под прозрачные зарплаты без буллшита, третьи созданы специально для первой работы после универа.

➡️ Собрали 30 джоб-сайтов с описанием, кому и зачем они подходят

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤩 Первая рабоча неделя апреля В С Ё

Поэтому собрали для вас пак новостей.

Компьютер без RAM

На фоне роста цен на оперативную память YouTube-канал PortalRunner проверил, можно ли вообще обойтись без неё.

Ubuntu теперь требует больше RAM, чем Windows 11

Ubuntu 26.04 LTS поднял минимальную планку оперативной памяти до 6 ГБ. Windows 11 при этом всё ещё официально требует только 4 ГБ.

SystemRescue 13.00

Запускайте Docker из любой среды

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#дайджест_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🔤 Таблицы прямо в терминале

sheets это TUI-инструмент на Go, который открывает CSV прямо в терминале и даёт работать с ним почти как в нормальном табличном редакторе.

Открыть файл:
sheets budget.csv


Прочитать конкретную ячейку или диапазон без открытия интерфейса:
sheets budget.csv B9
sheets budget.csv B1:B3


Изменить ячейку из командной строки:
sheets budget.csv B7=10 B8=20


Передать данные через stdin:
sheets <<< "ID,Name,Age
1,Alice,24
2,Bob,32"


Как это работает внутри

Навигация сделана под vim-пользователей: h/j/k/l для перемещения, gg/G для прыжка к началу или концу, / для поиска. Редактирование через i, выделение через v, отмена через u. Сохранение по :w, выход по :q. Если вы привыкли к vim, освоите sheets за пять минут.

Есть поддержка undo/redo, буфер обмена, визуальное выделение диапазонов и даже формулы в visual mode через =.

Установка:
go install github.com/maaslalani/sheets@main


Для тех, кто работает в терминале и не хочет переключаться в GUI ради CSV. Полезно при отладке экспортов, быстром просмотре логов в табличном формате или в CI-скриптах, где нужно вытащить конкретное значение.

➡️ Репозиторий

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
🔄 iptables в Arch Linux теперь по умолчанию использует nft-бэкенд

В Arch Linux изменилась схема пакетов iptables. Пакет iptables-nft переименован в iptables, а старый legacy-бэкенд теперь доступен как iptables-legacy.

При переключении между пакетами нужно проверить наличие .pacsave-файлов в /etc/iptables/ и при необходимости восстановить правила вручную:
/etc/iptables/iptables.rules.pacsave
/etc/iptables/ip6tables.rules.pacsave


Большинство конфигураций продолжит работать без изменений. Но если вы используете нестандартные xtables-расширения или поведение, специфичное для legacy-бэкенда, стоит проверить всё вручную и при необходимости переключиться на iptables-legacy.

➡️ Источник

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰2👍1
🤖 mysqldump с хоста, не заходя в контейнер

Если MySQL-контейнер пробрасывает порт на хост, делать дамп можно прямо с хостовой машины. Не нужно заходить через docker exec, запускаете mysqldump локально, и всё.

Для этого нужны два условия: на хосте установлен MySQL-клиент, и в конфигурации контейнера прописан проброс порта.

Настройка Docker Compose

В docker-compose.yml должна быть секция ports:
services:
mysql:
image: mysql:8
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: yourpassword
volumes:
- mysql-data:/var/lib/mysql


Запуск дампа с хоста:
mysqldump -h 127.0.0.1 -P 3306 \
-u root -p'yourpassword' \
--single-transaction \
mydatabase > backup.sql


Флаг --single-transaction важен для InnoDB: он снимает дамп без блокировок таблиц.

Когда это имеет смысл

Версия mysqldump на хосте может отличаться от той, что внутри контейнера. Это важно, потому что поведение флагов и формат дампа меняются от версии к версии. Если вы хотите точно контролировать, какая версия утилиты делает дамп, этот способ даёт такую возможность.

Ещё один плюс: если у вас уже есть скрипты резервного копирования на хосте, этот подход встраивается в них без лишних правок.

Про безопасность

В разработке открытый порт не проблема. В продакшне стоит убедиться, что 3306 слушает только 127.0.0.1, а не все интерфейсы. Иначе база доступна снаружи, что плохо.

В docker-compose.yml это выглядит так:
ports:
- "127.0.0.1:3306:3306"


📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 Используйте $() вместо обратных кавычек для подстановки команд

Обратные кавычки работают. Но они же и мешают: плохо читаются и не дают вложить одну команду в другую без боли.

Проблема

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

Что делает $()

$() это современный способ подстановки команд в bash.

Он выполняет команду внутри скобок и подставляет её вывод на место:
# Устаревший стиль — сложно читать, сложно вкладывать
today=`date '+%Y-%m-%d'`

# Современный и читаемый вариант
today=$(date '+%Y-%m-%d')
echo "Today is $today"


Разница небольшая, но когда команды усложняются, $() выигрывает однозначно.

Вложенность где это особенно важно

Главное преимущество $() проявляется при вложении. С обратными кавычками вложенность либо невозможна, либо требует экранирования обратным слешем, что делает код трудночитаемым.

С $() вложение выглядит естественно:
# Вложение — работает чисто только с $()
lines=$(wc -l < "$(find . -name '*.log' | head -1)")


Здесь сначала выполняется внутренняя команда find, которая ищет первый .log файл. Её вывод передаётся в wc -l, и результат подсчёта строк записывается в переменную lines.

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

Обратные кавычки можно встретить в старых скриптах — это нормально. Но для нового кода стоит использовать $(). Читаемость лучше, вложенность работает, и это соответствует стандарту POSIX для современных оболочек.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🐧 Linux 7.0 выйдет в ближайшие две недели

Линус Торвальдс подтвердил, что релиз Linux 7.0 не за горами. Первые недели цикла разработки были необычно насыщенными и грозили сдвинуть сроки, но к пятому релиз-кандидату ситуация стабилизировалась.

При семи релиз-кандидатах финальный выпуск придётся на 12 апреля. Но по статистике прошлых циклов вероятнее восьмой RC и дата 19 апреля.

Что изменится по существу: Linux 7.0 станет первым ядром, в котором Accurate Explicit Congestion Notification включён по умолчанию для всех TCP-соединений. Это важно прежде всего для дата-центров, где несколько потоков конкурируют за полосу пропускания.

Среди других изменений заявлена поддержка новых процессоров Intel Nova Lake и AMD Zen 6, а также доработки в планировщике и управлении памятью.

Поддержка Rust в ядре теперь официально стабильна и больше не помечена как экспериментальная.

Ubuntu 26.04 LTS и Fedora 44 рассчитывают включить 7.0 как дефолтное ядро сразу после выхода.

➡️ Источник

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
Мониторинг есть, а ясности не хватает

Когда вокруг турбулентность, а цифровые сервисы работают на пределе, полагаться на интуицию — дорогое удовольствие. В такие моменты выживают те, кто видит картину целиком, а не гадает на кофейной гуще.

VB-Trend 2026 МАЯК — конференция VolgaBlob и Кибердома про observability и мониторинг как антикризисную ясность.

В программе релиз Smart Monitor 6.0 и новый взгляд на Observability, доклады и демозоны с кейсами крупных организаций и партнёров, а также круглый стол с визионерами о навыках будущего и управленческих решениях в эпоху ИИ.

Для тех, кто работает с инфраструктурой, DevOps, ИБ и не только.

➡️ Регистрация

Когда: 17 апреля, 12:00–21:00
Где: Кибердом, 2-я Звенигородская ул., 12 стр. 18
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
👨‍💻 npm install в CI/CD это риск

Атака на axios в марте 2025 года показала простую вещь: если ваш пайплайн использует npm install, он каждый раз ходит в живой реестр npm и разрешает диапазоны версий заново. Это открывает окно для подмены пакета.

Если в package.json написано "axios": "^1.7.9", npm install может поставить 1.14.1 — версию, которой не было в вашем lockfile. Вредоносную версию, опубликованную 31 марта, многие поставили именно так.

Почему npm ci безопаснее

npm ci устанавливает ровно то, что записано в package-lock.json. Если lockfile расходится с package.json — упадёт с ошибкой. В реестр за новыми версиями не ходит. Новый вредоносный пакет попасть не может, пока вы сами не обновите lockfile.

Как заменить в CI/CD:
# Было
- name: Install dependencies
run: npm install

# Стало
- name: Install dependencies
run: npm ci


Бонус — скорость

npm ci удаляет node_modules и ставит заново, без попытки согласовать существующее состояние. Это быстрее на 20–40% по сравнению с npm install.

Это одно изменение — и ваш пайплайн уже не подхватит внезапно опубликованную вредоносную версию. Lockfile при этом нужно хранить в репозитории и обновлять осознанно, а не позволять CI делать это автоматически.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
⚙️ Гарантированная очистка даже после краша

Скрипт упал с ошибкой, а временный файл остался. Или соединение не закрылось. Или lock-файл завис. Это классика и trap решает её в одну строчку.

Что делает trap

Регистрирует функцию, которая запустится при выходе из скрипта — неважно, нормальном или аварийном.

Вы один раз описываете логику очистки и забываете об этом:
#!/bin/bash
set -euo pipefail

tmpfile=$(mktemp)

cleanup() {
rm -f "$tmpfile"
echo "Cleaned up temporary files"
}

trap cleanup EXIT # сработает при любом выходе

# Основная работа
echo "Processing..." > "$tmpfile"
cat "$tmpfile"


EXIT это сигнал, который bash отправляет при завершении скрипта. Функция cleanup удалит временный файл, даже если скрипт упал на середине.

Что можно убирать через trap

Временные файлы и директории, lock-файлы, открытые соединения с базой, фоновые процессы, которые скрипт запустил сам.

Почему это лучше, чем rm в конце скрипта

rm в конце не выполнится, если скрипт упадёт раньше. trap cleanup EXIT выполнится всегда — это гарантия на уровне интерпретатора.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
5
😎 Топ-вакансий для девопсов за неделю

Junior DevOps engineer — от 100 000 ₽, удалёнка

Middle/Senior DevOps Engineer — до 4 500 €, гибрид в Алматы или Белграде

DevOps — до 400 000 ₽, удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Devops Jobs

🐸Библиотека devops'a

#вакансия_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
😢1
⚙️ Защита от случайного удаления

Вы хотя бы раз случайно удаляли не тот файл через rm -rf? Это случается даже с опытными разработчиками. Один неверный путь и данные пропали.

Простая обёртка над rm решает эту проблему без установки сторонних утилит:
rm() {
ls -FCsd -- "$@"
read -p 'Delete? [y/N] ' ans
if [ "$ans" = "y" ]; then
command rm -rf -- "$@"
fi
}


Функция перехватывает вызов rm, показывает список файлов и спрашивает подтверждение. Если не ответить y, то ничего не удалится.

Добавьте функцию в ~/.bashrc или ~/.zshrc и перезагрузите конфиг:
source ~/.bashrc


Подтверждение помогает, но файлы всё равно удаляются сразу. Если хочется подстраховаться ещё раз, можно сделать подобие корзины: перемещать файлы во временную папку вместо немедленного удаления:
rm() {
local trash="/tmp/.trash"
mkdir -p "$trash"
ls -FCsd -- "$@"
read -p 'Move to trash? [y/N] ' ans
if [ "$ans" = "y" ]; then
mv -- "$@" "$trash"
echo "Moved to $trash"
fi
}


Файлы будут лежать в /tmp/.trash до следующей перезагрузки или ручной очистки. Это даёт время одуматься.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2