Нужен ли Argo CD в современном мире Kubernetes и как он изменил подход к CI/CD с использованием GitOps — об этом свежий подкаст, который мы советуем глянуть.
В гостях — эксперт в области DevOps, который расскажет о своем опыте работы с Argo CD и GitOps, а также поделится множеством практических знаний.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩2
🌀 Шпаргалка по циклам в Bash
Чтобы не держать в голове всю синтаксическую магию, собрали удобные примеры: for, while, until, диапазоны, чтение файлов и даже управление потоком с break и continue.
Цикл for в Bash:
Цикл for, как в C:
Цикл for с диапазонами:
Цикл while в Bash:
Цикл while true:
Чтение файлов:
Оператор continue:
Оператор break:
Цикл until:
Код готов к копипасте. Берите и используйте.
🐸 Библиотека devops'a
#буст
Чтобы не держать в голове всю синтаксическую магию, собрали удобные примеры: for, while, until, диапазоны, чтение файлов и даже управление потоком с break и continue.
Цикл for в Bash:
for i in /etc/*; do
echo $i
done
# То же самое (альтернативный синтаксис), также работает с другими видами циклов
for i in /etc/*
do
echo $i
done
Цикл for, как в C:
for ((i = 0; i < 100; i++)); do
echo $i
done
# альтернативный синтаксис
for ((i = 0; i < 100; i++))
do
echo $i
done
Цикл for с диапазонами:
for i in {1..10}; do
echo "Number: $i"
done
# С шагом
# ⇒ {НАЧАЛО..КОНЕЦ..ШАГ}
for i in {5..50..5}; do
echo "Number: $i"
doneЦикл while в Bash:
# увеличение значения
i=1
while [[ $i -lt 4 ]]; do
echo "Number: $i"
((i++))
done
# уменьшение значения
i=3
while [[ $i -gt 0 ]]; do
echo "Number: $i"
((i--))
done
Цикл while true:
# длинная форма while true
while true; do
# TODO
# TODO
done
# или короткая запись
while :; do
# TODO
# TODO
done
Чтение файлов:
# использование пайпов
cat file.txt | while read line
do
echo $line
done
# ИЛИ использование перенаправления ввода
while read line; do
echo $line
done < "/path/to/txt/file"
Оператор continue:
# команда seq может использоваться для генерации диапазонов
for number in $(seq 1 3); do
if [[ $number == 2 ]]; then
continue
fi
echo "$number"
done
Оператор break:
for number in $(seq 1 3); do
if [[ $number == 2 ]]; then
# Пропустить оставшуюся часть цикла или выйти из цикла
break
fi
# Здесь выведется только 1
echo "$number"
done
Цикл until:
# увеличение значения
count=0
until [ $count -gt 10 ]; do
echo "$count"
((count++))
done
# уменьшение значения
count=10
until [ $count -eq 0 ]; do
echo "$count"
((count--))
done
Код готов к копипасте. Берите и используйте.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Заголовки безопасности и CORS — дешёвая страховка: 15 минут работ, минус XSS, кликджекинг и утечки. Ни магии, ни «серой» криптографии — только дисциплина.
1. Строгие заголовки безопасности — базовый минимум
Идея: запретить всё, разрешить необходимое. Это резко сужает поверхность атаки.
• CSP — главный щит от XSS. Старт: запрет скриптов извне и инлайна.
• HSTS — принудительный HTTPS. Не включайте preload, пока не уверены во всех поддоменах.
• X-Content-Type-Options: nosniff — браузер не «угадывает» типы.
• Referrer-Policy: strict-origin-when-cross-origin — не светим полный URL.
• Permissions-Policy — режем ненужные API.
• frame-ancestors (в CSP) — современная альтернатива X-Frame-Options.
Рекомендованный набор:
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; object-src 'none'; base-uri 'self'; frame-ancestors 'none'
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), camera=(), microphone=()
2. CORS без «*»
Принцип: доверяем только своим фронтам. Никаких универсальных разрешений.
• Access-Control-Allow-Origin — точный домен (https://proglib.io/), не *.
• Allow-Credentials: true — только при точном Origin (иначе браузер заблокирует).
• Allow-Methods / Allow-Headers — перечислите реально используемые.
• Max-Age — кэш preflight (например, 600 сек).
• Vary: Origin — правильное кеширование на прокси.
Шаблон ответа сервера:
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET,POST,PUT,DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 600
Vary: Origin
Этот минимум даёт мгновенный прирост безопасности без рефакторинга.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Когда «горит», а времени и ресурса ноль — используйте промпт ниже. Он за минуты выдаст гипотезы, точные проверки и безопасные фиксы.
Промпт:
Ты — дежурный SRE на on‑call. Я дам исходные данные ниже; составь максимально конкретный пошаговый план (не более 10 шагов). Для каждого шага обязательно укажи: гипотезу, точные проверки с командами и пример ожидаемого вывода или паттерна в логах, какие метрики/пороги проверять, критерии завершения шага, безопасный фикс (точные команды и изменения конфига если нужно), команду для отката, уровень риска (низкий/средний/высокий) и примерное время выполнения. В конце дай краткий итог и шаблон инцидентного отчёта.
Заполни следующие поля вместо <> перед выполнением:
- Симптомы: <что наблюдаем — метрики, ошибки, поведение сервиса>
- Сервис/имя Pod/Deployment/VM: <имя сервиса или ресурс>
- Среда: <K8s/VMs> (укажи версию k8s/OS, namespace, количество нод)
- Время начала и SEV: <время, SEV1/2/3>
- Лог-кусок: <фрагмент лога — несколько строк>
- Доступы/ограничения: <можно ли рестартить поды/вносить изменения, maintenance window, контактные лица>
Требования к выходу (формат):
1) Нумерованный список шагов (1..N up to 10). Для каждого шага поля: {гипотеза; проверки: команды и ожидаемый вывод; метрики/логи и пороги; критерии завершения; безопасный фикс (команды/patch) ; команда отката; риск; время}
2) Если даётся kubectl-команда — используй явные флаги (namespace, -o json/yaml, --field-selector) и безопасные опции (например --dry-run=client для изменений) там, где применимо.
3) Метрики указывай конкретно: metric_name (источник, e.g. Prometheus) и порог (например error_rate > 5% за 5m).
4) Включи дополнительные рекомендованные команды для диагностики сети/IO/сторонних зависимостей (curl, ss, top, iostat) по необходимости.
5) В конце — краткое резюме с рекомендуемым порядком действий после инцидента (postmortem checklist).
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
🔍 Ракетный поиск по файлам
Когда вы запускаете grep для поиска по проекту, он будет по умолчанию искать во всех файлах, включая большие бинарные файлы, временные файлы или скрытые директории, такие как .git, что может замедлить поиск.
А Ripgrep автоматически игнорирует:
• Файлы и директории, указанные в .gitignore
• Файлы, указанные в .ignore и .rgignore
• Скрытые файлы и директории
• Бинарные файлы
Когда вы запускаете команду
🐸 Библиотека devops'a
#буст
Когда вы запускаете grep для поиска по проекту, он будет по умолчанию искать во всех файлах, включая большие бинарные файлы, временные файлы или скрытые директории, такие как .git, что может замедлить поиск.
А Ripgrep автоматически игнорирует:
• Файлы и директории, указанные в .gitignore
• Файлы, указанные в .ignore и .rgignore
• Скрытые файлы и директории
• Бинарные файлы
Когда вы запускаете команду
rg, она проверяет файлы и папки, которые вы хотите включить в поиск, и игнорирует все файлы и каталоги, которые находятся в списках игнорирования.#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🔑 Разбор SSH-ошибок
SSH — любимый инструмент админов и разработчиков. Но бывает: запускаешь «ssh user@server», и вместо приветствия получаешь красное сообщение об ошибке. Давайте разберём самые частые кейсы и что делать в каждом.
1. Timeout при подключении
Что проверить:
• Сервер реально запущен и доступен (ping, curl).
• Порт 22 открыт в firewall (
• На сервере работает sshd
• Нет ли блокировки со стороны провайдера.
2. Connection refused
Что делать:
• Запустить SSH-демон:
• Проверить конфиг /etc/ssh/sshd_config: порт и ListenAddress.
3. Permission denied (publickey)
Причины:
• Неверное имя пользователя
• Не тот приватный ключ
• Ключ в неправильном формате (.ppk вместо OpenSSH)
4. Host key verification failed
Фикс: удалить старую запись:
и подключиться заново.
В 90% случаев SSH-проблемы кроются в трёх местах: сеть, демон sshd, ключи и права.
🐸 Библиотека devops'a
#буст
SSH — любимый инструмент админов и разработчиков. Но бывает: запускаешь «ssh user@server», и вместо приветствия получаешь красное сообщение об ошибке. Давайте разберём самые частые кейсы и что делать в каждом.
1. Timeout при подключении
ssh: connect to host X.X.X.X port 22: Operation timed out
Что проверить:
• Сервер реально запущен и доступен (ping, curl).
• Порт 22 открыт в firewall (
ufw status, iptables -L).• На сервере работает sshd
• Нет ли блокировки со стороны провайдера.
2. Connection refused
ssh: connect to host X.X.X.X port 22: Connection refused
Что делать:
• Запустить SSH-демон:
sudo systemctl start ssh
sudo systemctl enable ssh
• Проверить конфиг /etc/ssh/sshd_config: порт и ListenAddress.
3. Permission denied (publickey)
Permission denied (publickey)
Причины:
• Неверное имя пользователя
• Не тот приватный ключ
• Ключ в неправильном формате (.ppk вместо OpenSSH)
4. Host key verification failed
Host key verification failed.
Фикс: удалить старую запись:
ssh-keygen -R server_ip
и подключиться заново.
В 90% случаев SSH-проблемы кроются в трёх местах: сеть, демон sshd, ключи и права.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
💻 Работа с Kubernetes без шума
kubectl-neat — инструмент для очистки выводов команд
Как использовать:
В результате вывод будет очищен от ненужных временных меток, идентификаторов и данных о статусах, что упрощает восприятие манифестов.
kubectl-neat помогает быстрее анализировать конфигурации и сокращает объем выводимой информации, делая её более читабельной.
➡️ Репозиторий проекта
🐸 Библиотека devops'a
#буст
kubectl-neat — инструмент для очистки выводов команд
kubectl get в k8s. Он удаляет избыточную информацию из YAML и JSON манифестов, оставляя только важные данные.Как использовать:
kubectl get pod mypod -o yaml | kubectl neat
В результате вывод будет очищен от ненужных временных меток, идентификаторов и данных о статусах, что упрощает восприятие манифестов.
kubectl-neat помогает быстрее анализировать конфигурации и сокращает объем выводимой информации, делая её более читабельной.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤2
🐳 Фишки Docker Compose
Нашли для вас видео с фишками по Docker Compose.
От чёткой структуры каталогов и использования .env файлов для безопасности до Docker Labels для фильтрации контейнеров и health checks для проверки их работоспособности.
➡️ Смотреть видео
🐸 Библиотека devops'a
#буст
Нашли для вас видео с фишками по Docker Compose.
От чёткой структуры каталогов и использования .env файлов для безопасности до Docker Labels для фильтрации контейнеров и health checks для проверки их работоспособности.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🧩 Алиасы для повседневной работы
Если вы устали каждый раз набирать километровые команды в Docker, самое время завести алиасы.
В
•
•
•
•
🐸 Библиотека devops'a
#буст
Если вы устали каждый раз набирать километровые команды в Docker, самое время завести алиасы.
В
~/.bashrc или ~/.zshrc:alias dps="docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'"
alias dclean="docker system prune -af --volumes"
alias dexec="docker exec -it"
alias dlogs="docker logs -f --tail=100"•
dps → красиво покажет список контейнеров,•
dclean → очистит неиспользуемые контейнеры, образы и volume,•
dexec my_container bash → войдёт в контейнер,•
dlogs my_container → выведет последние 100 строк логов и будет стримить новые.#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍7
🐳 Прямая доставка Docker-образов на сервер
Сколько раз вам приходилось публиковать Docker-образ в удалённый registry только для того, чтобы потом его скачать на сервер?
Часто это неудобно: публичные реестры — риск для приватности, собственные — дополнительная инфраструктура, docker save/load — копирует весь образ, даже если изменились лишь последние слои.
Unregistry решает эту задачу просто и эффективно: он запускает на сервере временный контейнер-реестр и позволяет отправить образ напрямую с вашего локального Docker через SSH, передавая только отсутствующие слои.
Пример:
За кулисами это происходит так:
1. По SSH создаётся туннель на сервер.
2. Там запускается временный контейнер Unregistry.
3. Через туннель пробрасывается локальный порт и происходит docker push в Unregistry.
4. Передаются лишь слои, которых нет на сервере.
5. После завершения — контейнер удаляется, SSH-сессия закрывается.
➡️ Репозиторий проекта
🐸 Библиотека devops'a
#буст
Сколько раз вам приходилось публиковать Docker-образ в удалённый registry только для того, чтобы потом его скачать на сервер?
Часто это неудобно: публичные реестры — риск для приватности, собственные — дополнительная инфраструктура, docker save/load — копирует весь образ, даже если изменились лишь последние слои.
Unregistry решает эту задачу просто и эффективно: он запускает на сервере временный контейнер-реестр и позволяет отправить образ напрямую с вашего локального Docker через SSH, передавая только отсутствующие слои.
Пример:
docker pussh myapp:latest user@server
За кулисами это происходит так:
1. По SSH создаётся туннель на сервер.
2. Там запускается временный контейнер Unregistry.
3. Через туннель пробрасывается локальный порт и происходит docker push в Unregistry.
4. Передаются лишь слои, которых нет на сервере.
5. После завершения — контейнер удаляется, SSH-сессия закрывается.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2