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

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

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

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

РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787
Download Telegram
😤 «Я ненавижу GitHub Actions всей душой»

Разработчик написал эмоциональный текст о том, почему GitHub Actions — это боль. Переводим и разбираем аргументы.

Главные претензии:

1. YAML-ад:
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm test


Выглядит просто? Но здесь довольно просто докинуть багов:

• Опечатка в node-version → silent fail
• Забыл @v3 в actions → неожиданная версия
• Отступы не там → непонятная ошибка

2. Дебаг — это пытка

В других CI можно:

• Подключиться по SSH к раннеру
• Запустить локально (GitLab Runner)
• Посмотреть полные логи

В GitHub Actions:

• Логи обрезаны
• Нельзя зайти на раннер
• Локальный запуск через костыли (act)
• Цикл «коммит → push → wait → fail» занимает минуты

3. Секреты — русская рулетка:
- name: Deploy
env:
API_KEY: ${{ secrets.API_KEY }}
run: ./deploy.sh


Проблемы:

• Секрет не установлен? Пустая строка
• Опечатка в имени? Пустая строка
• Секрет в форке? Не работает
• Дебажить? Удачи, secrets маскируются в логах

4. Кеширование — лотерея:
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}


Проблемы:

• Кеш иногда не восстанавливается
• Иногда восстанавливается битый кеш
• Лимит 10 GB → старые кеши удаляются

5. Версии actions — dependency hell:
- uses: actions/checkout@v3      # Какая v3? v3.0? v3.5?
- uses: actions/setup-node@v3 # Deprecated через месяц
- uses: docker/build-push-action@v4 # Ломает старые workflow


• Нет lock-файла для actions
• Breaking changes в минорных версиях
@main — может сломаться завтра
• @sha — нечитаемо и надо обновлять вручную

💬 Как у вас с GitHub Actions? Всё спокойно или тоже есть дровишки в огонь?

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

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

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
💯3
«Этот манёвр будет стоить нам 51 год...»

DevOps — это не только YAML-конфиги, но и умение автоматизировать процессы с помощью Python и понимание архитектуры систем. Рынок требует всё больше компетенций в ИИ.

Успейте забрать обучение в Proglib Academy по ценам 2025 года:

— Разработка ИИ-агентов
— Математика для разработки AI-моделей
— ML для старта в Data Science
— Математика для Data Science
— Специалист по ИИ
— Алгоритмы и структуры данных
— Программирование на Python
— Основы IT для непрограммистов
— Архитектуры и шаблоны проектирования

Выбрать направление

⚠️ Стоимость изменится 19 января
🏷 Теги и лейблы в Terraform как привычка

Ресурсы без тегов почти всегда превращаются в невидимые расходы и в проблемы с управлением. Если навести порядок в тегах прямо в Terraform модулях, инфраструктуру проще искать, считать и контролировать.

Лучше начинать со схемы на уровне модуля. У каждого модуля должен быть входной map для tags или labels и этот map должен применяться ко всем ресурсам, которые это поддерживают. Идея простая. В модуле есть базовые поля вроде окружения и владельца, а сверху можно передать дополнительные теги и объединить их через мерж.

Пример:
variable "environment" {
type = string
}

variable "owner" {
type = string
}

variable "tags" {
type = map(string)
description = "Общие теги для всех ресурсов"
default = {}
}

locals {
common_tags = merge(
{
env = var.environment
owner = var.owner
terraform = "true"
},
var.tags
)
}

resource "proglib_bucket" "this" {
bucket = var.owner

tags = local.common_tags
}


Последний шаг это запрет на ресурсы без обязательных тегов. Это можно сделать через policy as code и проверки, чтобы не разгребать мусор уже в проде.

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

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

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2
👀 Наглядная иерархия процессов в Linux

systemd-cgls — это утилита для отображения иерархии control groups в системах на базе systemd. Она показывает древовидную структуру всех процессов, сгруппированных по юнитам systemd.

В отличие от классического ps или top, systemd-cgls показывает не просто список процессов, а их организационную структуру: какие процессы принадлежат каким службам, сессиям пользователей и слайсам системы.

Просто запустите без аргументов:
systemd-cgls


Вы увидите дерево, разделённое на слайсы:

system.slice — системные службы
user.slice — пользовательские сессии
machine.slice — виртуальные машины и контейнеры

Показать только конкретный юнит:
systemd-cgls /system.slice/nginx.service


Показать процессы определённого пользователя:
systemd-cgls /user.slice/user-1000.slice


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

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻 COPY с chown и меньше боли с правами

Если в контейнере приложение запускается не от root, то права на файлы часто ломают сборку или запуск. Вместо отдельного RUN chown можно сразу копировать файлы с нужным владельцем через COPY с флагом chown.

Простой пример для приложения, которое запускается от appuser:
FROM alpine:3.20

RUN addgroup -S app && adduser -S -G app appuser

WORKDIR /app

COPY --chown=appuser:app . /app

USER appuser
CMD ["./app"]


Если в образе нет /etc/passwd или /etc/group, и указать имя пользователя или группы, сборка может упасть, поэтому для минимальных образов иногда проще использовать числовые UID и GID.

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

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

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🗞 Первая рабочая неделя

Собрали для вас новости и материалы прошедшей недели.

Трудоголики снова в моде

Свежий Wine

Когда ls уже не впечатляет

Linux Mint 22.3 Zena

SSD за грамм стали дороже золота

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

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

#дайджест_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
HEALTHCHECK в Dockerfile чтобы контейнер не умирал молча

Контейнер может продолжать работать, даже если внутри уже все сломалось. HEALTHCHECK позволяет Docker периодически проверять состояние и выставлять статус healthy или unhealthy.

Самый простой вариант это дергать внутренний эндпоинт и падать по ненулевому коду, если ответ плохой. Docker поддерживает параметры interval, timeout и retries, чтобы настроить частоту и порог ошибок.

Пример:
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1


Команда может быть любой, главное чтобы успешный результат был exit 0, а неуспешный exit 1.

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

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

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
price_update: scheduled for Jan 20

Завтра мы деплоим повышение цен на все программы. Успейте сегодня нажать apply, пока старые условия не превратились в legacy.

Настроить пайплайн саморазвития
🥱1
🔒 Let’s Encrypt выкатили сертификаты на шесть дней

Let’s Encrypt добавили короткоживущие сертификаты со сроком 160 часов. Это чуть больше шести дней. Чем меньше срок, тем меньше ущерб, если ключ утек.

Подключение сделано как опция. В ACME клиенте нужно выбрать профиль shortlived, и дальше все упирается в автоматизацию выпуска и продления. Если продление не автоматизировано, такой срок будет раздражать и ломать процессы.

➡️ Источник

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

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

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤔2
💼 DevOps-портфолио: что включить и как собирать

70% работодателей выбирают кандидатов с hands-on проектами. В DevOps это особенно критично — здесь нужно доказать, что вы умеете автоматизировать, масштабировать и решать задачи. Портфолио — это ваш главный козырь.

Что включить:

🔹 CI/CD пайплайн. Jenkins, GitHub Actions, GitLab CI или CircleCI. Покажите автоматическую сборку, тестирование, деплой с rollback и уведомлениями.

🔹 Infrastructure as Code. Terraform, CloudFormation или Ansible. Разверните веб-приложение с версионируемой инфраструктурой в облаке.

🔹 Контейнеризация. Docker + Kubernetes или Docker Swarm. Контейнеризуйте приложение и разверните его с оркестрацией.

🔹 Мониторинг и логирование. Prometheus + Grafana или ELK stack. Настройте систему отслеживания и алертов в реальном времени.

🔹 Автоматизация безопасности. Интеграция сканирования уязвимостей в пайплайн или автоматизация compliance-проверок.

Где брать идеи:

• Изучите вакансии — воссоздайте описанное окружение

• Автоматизируйте личный проект, например, деплой блога через CI/CD)

• Контрибьютьт в open-source инфраструктурные проекты

• Используйте free tier AWS/Azure/GCP для экспериментов

• Участвуйте в хакатонах и челленджах

Как оформить:

Создайте личный сайт или блог (можно на GitHub Pages)

Документируйте каждый проект: контекст, цели, вашу роль, использованные технологии

Добавьте README с инструкциями по запуску

Приложите скриншоты дашбордов, пайплайнов, логов

Опишите проблемы и как их решили


💬 А у вас есть портфолио? Что туда включаете? Помогло ли на собеседованиях? Делитесь ссылками и опытом в комментариях! 👇

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

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

#холиварня
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🔥 Полигон для драйверов FreeBSD

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

Иными словами это лаборатория для издевательств над железом или полигон для разработки драйверов: портирование, реверс-инжиниринг, clean-room реализации.

Идеальный проект для тех, кто хочет поэкспериментировать с диким железом, не ломая прод.

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

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

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

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻 Почему Google не даёт трафик без robots.txt

Сайт работает, контент есть, SEO вроде настроено — а органического трафика из Google нет. Одна из частых причин: отсутствует или недоступен файл robots.txt.

Googlebot перед сканированием любого сайта сначала проверяет robots.txt. Если файл недоступен или сервер возвращает ошибку, краулер не рискует — останавливается и не индексирует страницы. Нет индексации — нет позиций в поиске. Нет позиций — нет трафика.

Проверить просто: откройте ваш-сайт.ru/robots.txt в браузере. Если видите 404, 500 или пустую страницу вместо текстового файла — проблема найдена. Google Search Console тоже покажет ошибку "robots.txt unreachable" в разделе покрытия.

Создайте файл robots.txt в корневой папке сайта. Минимальный вариант, который разрешает индексацию всего:
User-agent: *
Allow: /


Загрузите файл на сервер, чтобы он был доступен по адресу домен.com/robots.txt. Проверьте в браузере — должен открыться текст файла.

Без этого файла можно месяцами ждать трафика и не понимать, почему Google игнорирует сайт. Два килобайта текста решают проблему.

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

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

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🤔2
🎞 Эмулятор PCI-устройств для изучения и отладки

Обычно для изучения драйверов нужно реальное железо или сложная настройка QEMU. PCIem решает эту проблему — это эмулятор, который создаёт виртуальные PCI-устройства прямо в Linux.

Вы можете тестировать драйверы без физического оборудования, изучать взаимодействие ядра с PCI или отлаживать код в контролируемой среде. Эмулятор работает как kernel module и регистрирует устройства так, будто они реально подключены к шине.

Как запустить:
git clone https://github.com/cakehonolulu/pciem
cd pciem
make
sudo insmod pciem.ko


После загрузки модуль создаёт виртуальное устройство. Вы увидите его через lspci, сможете взаимодействовать с его регистрами и тестировать свой драйвер без риска что-то сломать.

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

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

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

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
This media is not supported in your browser
VIEW IN TELEGRAM
👍1
LLMOps: развёртывание RAG-систем в Kubernetes

23 января в 19:00 на открытом уроке к курсу «Разработка ИИ агентов» обсудим архитектурную сторону внедрения LLM. Узнаем, как организовать инфраструктуру для агентов, работающих с внутренними данными через RAG в закрытом контуре.

Спикер — Игорь Стурейко, тимлид в «Газпроме» и эксперт по архитектуре решений на базе Kubernetes. Игорь подготовил видео о том, как эффективно масштабировать AI-сервисы и какие инженерные вызовы стоят за созданием автономных агентов.

В фокусе урока:

— интеграция векторных баз (FAISS, Chroma) в продакшн-окружение;
— оркестрация пайплайнов с помощью LangChain;
— выбор между Fine-tuning и RAG с точки зрения ресурсов и поддержки.

📅 Когда: 23.01 в 19:00 МСК

Узнать подробности
👍 Топ-вакансий для девопсов за неделю

DevOps-инженер
— до 250 000 ₽. Удалёнка.

DevOps / SRE — до 3 000 $ и удалёнка.

DevOps-инженер — удалёнка.

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

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

#вакансия_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👀 10 лет root без пароля

В telnetd из GNU InetUtils нашли уязвимость, которая позволяет любому подключиться к серверу под root без проверки пароля. Проблема живет с марта 2015 года (версия 1.9.3) и до сих пор не исправлена в актуальном релизе 2.7.0.

Когда telnetd запускает утилиту login для проверки пароля, он передает ей имя пользователя из подключения. У login есть опция -f, которая пропускает аутентификацию.

Разработчики добавили поддержку автоматического входа через переменную окружения USER, но забыли проверить её содержимое. Результат — подставив в USER значение -f root, можно войти без пароля.

USER='-f root' telnet -a имя_сервера


В 2015 году разработчики фиксили проблему с Kerberos-аутентификацией. Добавили получение имени пользователя из переменной окружения, но не добавили проверку на спецсимволы и опции.

Хотя telnet давно считается небезопасным протоколом и большинство перешло на SSH, эта уязвимость напоминает о том, что стоит проверять даже старое ПО.

➡️ Источник

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

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

#разбор_полётов
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
🛠 Fence — изоляция процессов через namespace без root-прав

Docker отлично подходит для контейнеризации, но иногда он избыточен. Проверить скрипт из интернета, запустить непроверенный бинарник или изолировать процесс при тестировании — для таких задач нужно что-то проще и быстрее.

Fence — это CLI-утилита, которая создаёт изолированное окружение через Linux namespaces за секунды и без root-доступа.

Что умеет

Fence использует возможности ядра Linux для создания изолированных пространств. Процесс внутри не видит вашу файловую систему, может быть отрезан от сети и работает в собственном namespace процессов.

При этом никаких образов, слоёв или daemon'ов — просто оборачиваете команду и получаете изоляцию.

Примеры использования:
# Установка через cargo
cargo install fence-cli

# Базовый запуск с изоляцией ФС
fence run -- ./untrusted-binary

# Отключить сеть для процесса
fence run --no-network -- python script.py

# Пробросить конкретную директорию
fence run --mount $(pwd):/workspace -- make build


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

Никогда не знаешь, когда такое пригодиться, сохраните к себе в закладки 💾

➡️ GitHub репо

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

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

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
3
💻 Сервисные аккаунты в Kubernetes

Сервисные аккаунты позволяют подам в Kubernetes обращаться к API-серверу без использования учетных данных администратора. Они упрощают автоматизацию задач для приложений внутри кластера.

Что такое сервисные аккаунты

По умолчанию каждый под получает токен сервисного аккаунта при запуске. Этот токен монтируется как том в /var/run/secrets/kubernetes.io/serviceaccount и используется для запросов к API. Разработчики используют их для чтения конфигураций или записи метрик без лишних настроек.

Автоматическое создание токена происходит через контроллер допуска ServiceAccount. Без указания serviceAccountName под использует default аккаунт в пространстве имен.

Как работают токены

Токены сервисных аккаунтов представляют собой JWT, подписанные приватным ключом API-сервера. Они содержат утверждения с именем аккаунта, пространством имен и группами вроде system:serviceaccounts. Kubernetes проверяет подпись и срок годности перед авторизацией.

Создание и настройка

Чтобы создать сервисный аккаунт, примените YAML с apiVersion: v1, kind: ServiceAccount. Свяжите с подом через spec.serviceAccountName в манифесте пода. Для ролей используйте RoleBinding или ClusterRoleBinding, чтобы назначить permissions вроде get pods.

Пример команды:
kubectl create serviceaccount my-sa; kubectl create rolebinding my-sa-role --clusterrole=view -sa=default:my-sa


В итоге сервисные аккаунты упрощают доступ к кластеру, но требуют внимательной настройки для защиты от утечки привилегий.

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

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1