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

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

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

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

РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787
Download Telegram
🐳 Почему секреты в 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
👍1
🖇 Как быстро узнать публичный 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