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

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

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

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

РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787
Download Telegram
🐳 Ставим Docker одинаково на все сервера

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

Вот для этого и нужна автоматизация. Вы один раз описываете правильную установку Docker — и она раскатывается идентично на все серверы.

Используется всё тот же Ansible. Он подключается к каждому серверу и выполняет одни и те же команды по порядку:
- name: Install Docker
hosts: all
become: yes
tasks:
- name: Install required packages
apt:
name: "{{ item }}"
state: present
loop:
- apt-transport-https
- ca-certificates
- curl
- name: Install Docker
shell: curl -fsSL https://get.docker.com | bash


Разберём:

hosts: all — плейбук запустится на всех серверах из вашего инвентаря.

become: yes — нужны права администратора для установки пакетов.

apt: — модуль Ansible для управления пакетами в Debian/Ubuntu. Он знает, как работать с apt-get, и сделает это правильно.

loop: — устанавливает пакеты по одному: apt-transport-https, ca-certificates, curl. Они нужны, чтобы безопасно загрузить Docker.

shell: curl -fsSL https://get.docker.com | bash — официальный скрипт установки Docker от разработчиков. Он сделает все остальное: добавит репозиторий, установит Docker Engine, настроит сервис.

state: present — пакет должен быть установлен. Если его нет, установит. Если есть, проверит версию и обновит при необходимости.

После установки проверьте, что Docker работает:
- name: Verify Docker installation
shell: docker run hello-world
register: docker_test
failed_when: "'Hello from Docker!' not in docker_test.stdout"


Или добавьте проверку в конец плейбука:
- name: Check Docker status
systemd:
name: docker
state: started
enabled: yes


🔹 Программирование на языке Python
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
4🌚1
💡 Linux 6.18 готов к использованию

Linux 6.18 — новый релиз ядра от Линуса Торвальдса. Несмотря на активное исправление багов в последние дни перед выпуском, разработчик считает, что ядро готово к использованию и не требует дополнительного времени на доработку.

Большинство исправлений касается драйверов, а также Bluetooth, Ceph и AFS.

➡️ Прочитать письмо Торвальдса

🔹 Математика для разработки AI-моделей
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏2
🖥 Смотрим загрузку CPU в реальном времени

Сервер тормозит, но вы не знаете, почему. Может, какой-то процесс сходит с ума и съедает все ресурсы? Или это просто пики нагрузки? Нужно быстро посмотреть, что происходит с процессором прямо сейчас.

Вот для этого и нужна команда, которая покажет текущую загрузку CPU:
top -b -n 1 | grep "Cpu(s)"


top — это команда, которая показывает, чем занимается система. Она выводит процессы, их загрузку, использование памяти, всё подряд.

-b — batch mode. Вместо интерактивного режима top просто выдаёт результат и завершается.

-n 1 — одна итерация. Без этого top обновлял бы данные каждую секунду.

grep "Cpu(s)" — выбирает из всего вывода только строку с информацией о CPU.

Если нужна более глубокая диагностика, есть другие команды:

Смотрим среднюю загрузку за 1, 5 и 15 минут:
uptime //14:35:22 up 10 days, 2:45, 1 user, load average: 0.45, 0.52, 0.48


Три числа в конце — это средняя нагрузка за последние 1, 5 и 15 минут.

Смотрим загрузку каждого ядра отдельно:
mpstat -P ALL 1 1


Смотрим, какой процесс больше всего грузит CPU:
ps aux --sort=-%cpu | head -10


Или используйте специализированные инструменты мониторинга вроде Prometheus или Grafana — они будут отслеживать метрики автоматически и хранить историю.

🔹 AI-агенты для DS-специалистов
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👏5
💻 Настраиваем узлы Kubernetes автоматически

Когда вы разворачиваете Kubernetes кластер вручную, нужно на каждый узел установить куча компонентов: kubeadm, kubelet, kubectl, добавить репозитории, настроить сеть, включить необходимые модули ядра.

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

Подготовили для вас такой плейбук:
- name: Configure Kubernetes node
hosts: nodes
become: yes
tasks:
- name: Install kubeadm, kubelet, and kubectl
apt:
name: "{{ item }}"
state: present
loop:
- kubeadm
- kubelet
- kubectl


hosts: nodes — плейбук выполняется на всех серверах, которые помечены как узлы (nodes) в вашем инвентаре Ansible.

become: yes — нужны права администратора для установки пакетов и системных изменений.

apt: — модуль для управления пакетами в Debian/Ubuntu. Установит из стандартных репозиториев.

loop: — устанавливает три компонента:

• kubeadm — инструмент для инициализации и управления кластером
• kubelet — агент, который запускает контейнеры на узле
• kubectl — команда для управления Kubernetes кластером

state: present — пакеты должны быть установлены.

После установки этих компонентов узел будет готов присоединиться к кластеру Kubernetes.

🔹 Математика для разработки AI-моделей
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🐳 Почему секреты в Dockerfile остаются навсегда

Хардкодить ключи и пароли в Dockerfile кажется быстрым решением, но в контейнерном мире это почти гарантированная утечка. Даже если потом удалить секрет, он уже может остаться в слоях образа, логах, кэше сборки и сторонних регистрах.

Docker строит образ послойно, и каждый слой можно просмотреть через docker history или инструменты анализа образов.

Если на каком то шаге в Dockerfile задать ENV с токеном или скопировать файл с секретами, этот слой останется в истории образа даже после последующих RUN rm и похожих команд. В результате любой, кто получил образ или доступ к реестру, может восстановить эти данные.

Надежное правило для повседневной работы простое — в Dockerfile никогда не должно быть токенов, паролей и ключей. Секреты передаются только в рантайме через env file или встроенные механизмы секретов платформы, а процесс сборки остается максимально слепым к конфиденциальным данным.

🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🖇 Как быстро узнать публичный IP сервера

Узнать публичный айпи можно за одну строку:
curl -s ifconfig.me


Эта команда отправляет запрос к сервису ifconfig.me, который возвращает текущий внешний IP вашего сервера. Ключ -s отключает лишний вывод, чтобы показать только сам IP.

🔹 Программирование на языке Python
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
👨‍💻 Как пережить переход Let’s Encrypt на 45 дней

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

1️⃣ Проверяйте срок сертификата из консоли

Для локального PEM‑файла:
openssl x509 -enddate -noout -in /path/to/cert.pem


Для сертификата, который уже стоит на сервере (через SNI):
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate


Удобно обернуть это в скрипт и повесить на мониторинг, который будет ругаться, если до истечения меньше, скажем, 7 дней.

2️⃣ Автоматизируйте продление certbot

Если вы используете certbot, базовый cron может выглядеть так:
0 2 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"


• Запускайте чаще, чем раз в 30 дней: certbot сам решит, нужно ли обновлять, но у него будет больше попыток.

• post-hook важен: Nginx (или другой веб‑сервер) должен перечитать новый сертификат.

3️⃣ Настройте acme.sh

Для тех, кто предпочитает acme.sh за лёгкость и поддержку разных провайдеров DNS:
0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null


Обратите внимание

acme.sh сам следит за сроком и обновляет вовремя.

• После выпуска не забудьте один раз прописать перезагрузку сервиса, например:
/home/user/.acme.sh/acme.sh --install-cert -d example.com
--key-file /etc/ssl/example.com.key
--fullchain-file /etc/ssl/example.com.fullchain.pem
--reloadcmd "systemctl reload nginx"


4️⃣ Добавьте алерты

Даже при настроенном cron бывает, что что‑то ломается: права, DNS, лимиты CA. Хорошая практика

• В мониторинг (Prometheus, Zabbix, Grafana Agent, любой другой) добавить проверку срока сертификата.

• Завести оповещение, если осталось меньше N дней или срок истёк.

Избегайте жёстких «обновлять раз в 60 дней»

При 45‑дневных сертификатах такая логика приведёт к просрочке. Без ARI или «умных» клиентов используйте правило: обновлять примерно на 2/3 срока жизни сертификата. Для 45 дней это где‑то на 30‑й день.

Если у вас уже есть боевой контур на Let’s Encrypt, самое важное сейчас — убедиться, что:

• продление полностью автоматизировано
• веб‑сервер корректно перечитывает новые сертификаты
• есть мониторинг и алерты на срок действия

Тогда переход на более короткий срок будет почти незаметен для вас и ваших пользователей.

🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
🌐 Как найти все открытые сетевые порты

Чтобы понять, какие порты на вашем компьютере сейчас прослушиваются и ждут подключения, можно быстро проверить все активные сетевые точки с помощью команды:
netstat -tulnp | grep LISTEN


Она показывает все открытые порты и процессы, которые их используют.

netstat -tulnp выводит список TCP и UDP портов, которые прослушиваются, а также PID соответствующих процессов.

grep LISTEN отфильтровывает этот список, показывая только порты, которые на самом деле слушают входящие соединения.

🔹 Специалист по ИИ
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🖥 Автоматизация установки Jenkins

Пример плейбука для Ansible, который устанавливает Jenkins на группу серверов:
- name: Install Jenkins
hosts: cicd_servers
become: yes
tasks:
- name: Install Java
apt:
name: openjdk-11-jdk
state: present

- name: Add Jenkins repository and install
shell: |
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
echo "deb http://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list
apt update && apt install -y jenkins


Что делает этот плейбук:

• Устанавливает нужную версию Java, обязательную для работы Jenkins.

• Добавляет официальный репозиторий Jenkins и его ключ для безопасной установки.

• Обновляет списки пакетов и устанавливает Jenkins.

🔹 ML для старта в Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
💡 Почему поды жрут друг-друга

Самая частая ошибка в K8s: Pods без CPU/memory requests/limits конкурируют несправедливо. Без лимитов один Pod может сожрать все ресурсы ноды, вызывая голодание или вытеснение других подов под нагрузкой.

Реальный кейс: Java-приложение без limits во время GC жрёт 4GB и выкидывает важные сервисы.

Плохо (нет ресурсов):
containers:
- name: app
image: myapp:latest
# а где...


Правильно. Requests для планирования, limits для защиты:
resources:
requests:
memory: "256Mi" # минимум для scheduler
cpu: "250m" # 0.25 CPU
limits:
memory: "512Mi" # максимум памяти
cpu: "500m" # максимум CPU


Ставьте ресурсы везде. Это спасёт от 90% проблем с нестабильностью кластера.

🔹 AI-агенты для DS-специалистов
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Автоматическое резервное копирование с cron

Автоматизация рутинных задач — ключ к стабильной работе серверов. Один из популярных способов — запустить задачу по расписанию с помощью cron.

Пример:
echo "0 2 * * * tar -czf /backup.tar.gz /important/data" | crontab -


Здесь:
0 2 * * * — расписание, указывающее запуск в 2:00 каждый день.
tar -czf /backup.tar.gz /important/data — создание сжатого архива с папкой /important/data.

Такой подход позволит автоматически сохранять резервные копии без вашего вмешательства.

🔹 Основы IT для непрограммистов
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😢1
⚡️ Автоматизация ротации логов и их очистки

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

Пример Ansible плейбука для настройки ротации логов:
- name: Set up log rotation
hosts: all
become: yes
tasks:
- name: Configure logrotate
copy:
dest: /etc/logrotate.d/custom_logs
content: |
/var/log/*.log {
daily
rotate 7
compress
missingok
notifempty
}


Этот плейбук создаёт конфигурационный файл для logrotate с правилами:

• Логи из /var/log/ с расширением .log обрабатываются ежедневно
• Хранятся только последние 7 архивов, чтобы не захламлять диск
• Логи сжимаются для экономии пространства
• Если файлы отсутствуют, ошибок не возникает
• Пустые файлы не обрабатываются

🔹 Практический интенсив «Архитектуры и шаблоны проектирования»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Проверка доступности порта на удалённом хосте

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

Используйте команду:
nc -zv example.com 443


nc (netcat) с ключами -zv проверяет открытость порта без передачи данных.

-z означает «сканировать без отправки данных».

-v включает подробный вывод, чтобы видеть результат проверки.

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

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

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻 Автоматизация настройки балансировщика нагрузки HAProxy

Настройка балансировщика нагрузки — важная задача для любого масштабируемого сервиса. Автоматизация с помощью Playbook помогает быстро и без ошибок развернуть HAProxy на нужных серверах.

Пример Ansible плейбука для установки и настройки HAProxy:
- name: Install and configure HAProxy
hosts: lb_servers
become: yes
tasks:
- name: Install HAProxy
apt:
name: haproxy
state: present

- name: Configure HAProxy
template:
src: haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg


Пример шаблона haproxy.cfg.j2 с базовыми настройками:
    log /dev/log local0
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
user haproxy
group haproxy
daemon

defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

frontend http_front
bind *:80
default_backend http_back

backend http_back
balance roundrobin
server web1 192.168.1.101:80 check
server web2 192.168.1.102:80 check


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

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
📎 Простой скрипт для мониторинга ресурсов системы

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

Небольшой Python-скрипт с библиотекой psutil поможет быстро контролировать эти показатели:
import psutil

def check_system_resources():
cpu_usage = psutil.cpu_percent(interval=1)
memory_usage = psutil.virtual_memory().percent

if cpu_usage > 80:
print(f"High CPU usage: {cpu_usage}%")
if memory_usage > 80:
print(f"High Memory usage: {memory_usage}%")

check_system_resources()


Что делает скрипт:

• Измеряет загрузку процессора за 1 секунду
• Проверяет процент занятой оперативной памяти
• При использовании CPU или памяти выше 80% выводит предупреждение

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

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

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
3😁3🌚1
🌐 Cтандартизация правил файрвола

Защита серверов — обязательный элемент работы любой инфраструктуры. Настройка правил файрвола с помощью Ansible Playbook помогает быстро и единообразно обезопасить все серверы.

Пример плейбука для конфигурации UFW:
- name: Configure UFW Firewall Rules
hosts: all
become: yes
tasks:
- name: Allow SSH
ufw:
rule: allow
port: '22'
proto: tcp

- name: Allow HTTP and HTTPS
ufw:
rule: allow
port: '{{ item }}'
proto: tcp
loop:
- 80
- 443

- name: Enable UFW
ufw:
state: enabled
policy: deny


Что делает этот плейбук:

• Разрешает входящие соединения по SSH (порт 22)
• Открывает HTTP (80) и HTTPS (443) для веб-трафика
• Включает UFW с политикой блокировки всех остальных подключений по умолчанию

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

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
5😁1
🛠 Куча папок за одну команду

Новичок в shell-скриптинге рассуждает логично: создам папку через mkdir. Просто же. Запускает:
mkdir /app/data/logs/2025/01/17


mkdir создаёт только последнюю папку в цепочке. Если пути не существует, то ничего не сработает. Нужно создавать по одной:
mkdir /app
mkdir /app/data
mkdir /app/data/logs
mkdir /app/data/logs/2025
mkdir /app/data/logs/2025/01
mkdir /app/data/logs/2025/01/17


Спасает один флаг:
mkdir -p /app/data/logs/2025/01/17


Все папки создаются сразу. Как по волшебству. Eсли какая-то из папок уже существует, mkdir -p не будет ругаться. Просто пропустит её.

Флаг -v выведет список всех созданных папок. Полезно при отладке:
mkdir -pv /app/data/logs


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

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🥱2
🔒 Установка SSL сертификата с Certbot через Ansible

Безопасность веб-приложений начинается с правильной настройки SSL/TLS. Let’s Encrypt предлагает бесплатные сертификаты, а их развёртывание можно автоматизировать с помощью Certbot.

Пример простого плейбука для установки и настройки SSL на серверах с Nginx:
- name: Install and configure Let's Encrypt SSL
hosts: web_servers
become: yes
tasks:
- name: Install Certbot
apt:
name: certbot
state: present

- name: Obtain SSL certificate
shell: certbot certonly - standalone -d example.com -email admin@example.com -agree-tos -non-interactive

- name: Configure Nginx to use SSL
template:
src: nginx_ssl.conf.j2
dest: /etc/nginx/sites-available/default
notify:
- Restart Nginx

handlers:
- name: Restart Nginx
systemd:
name: nginx
state: restarted


Что делает этот плейбук:

• Устанавливает Certbot — инструмент для автоматической работы с сертификатами Let’s Encrypt.

• Получает SSL-сертификат для домена example.com в безголовом режиме non-interactive.

• Копирует шаблон конфигурации nginx_ssl.conf.j2 для включения SSL в настройках Nginx.

• Перезапускает Nginx, чтобы применить новые настройки.

Для масштабируемых проектов рекомендуется дополнить playbook обновлением сертификатов и настройкой их автоматического продления.

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

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
💿 Мониторинг использования диска с оповещением

Маленький скрипт на Python помогает быстро отслеживать заполненность диска и предупреждать, если она превышает критический порог.

Пример простого скрипта:
import shutil

def check_disk_usage(path="/"):
total, used, free = shutil.disk_usage(path)
usage_percentage = (used / total) * 100

if usage_percentage > 80:
print(f"Warning! Disk usage is {usage_percentage:.2f}%")

check_disk_usage()


Как это работает:

• Используется стандартный модуль shutil и функция disk_usage, возвращающая общий, использованный и свободный объем на диске по указанному пути.

• Рассчитывается процент использования диска.

• Если занято больше 80%, скрипт выводит предупреждение с текущим процентом.

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

Для более сложных сценариев можно адаптировать скрипт, добавив отправку уведомлений на email или в чат, хранение логов и периодический запуск через cron.

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

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🔒 Автоматизация усиления безопасности Linux серверов

Защита Linux серверов требует комплексного подхода: отключение входа под root через SSH, установка политики смены паролей и защита от брутфорс атак с помощью fail2ban — базовые меры, снижающие риски взлома и обеспечивающие контроль доступа

Пример базового playbook, реализующего эти меры:
- name: Apply Security Hardening
hosts: all
become: yes
tasks:
- name: Disable root SSH login
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PermitRootLogin'
line: 'PermitRootLogin no'
notify: Restart SSH

- name: Set password expiration policy
lineinfile:
path: /etc/login.defs
regexp: '^PASS_MAX_DAYS'
line: 'PASS_MAX_DAYS 90'

- name: Install fail2ban
apt:
name: fail2ban
state: present

handlers:
- name: Restart SSH
systemd:
name: ssh
state: restarted


В дальнейшем можно расширять playbook настройками firewall, аудитом и обновлениями, ограничением прав или внедрением систем шифрования.

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

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

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁1