💻 Проверка доступности порта на удалённом хосте
Иногда нужно быстро убедиться, что определённый порт на удалённом сервере доступен и принимает подключения. Это нужно для диагностики сетевых проблем и проверки работы файрвола.
Используйте команду:
Такой тест помогает быстро понять, почему клиент не подключается, и выявить проблемы с сетью или настройками безопасности.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root@prompt
Иногда нужно быстро убедиться, что определённый порт на удалённом сервере доступен и принимает подключения. Это нужно для диагностики сетевых проблем и проверки работы файрвола.
Используйте команду:
nc -zv example.com 443
nc (netcat) с ключами -zv проверяет открытость порта без передачи данных.-z означает «сканировать без отправки данных».-v включает подробный вывод, чтобы видеть результат проверки.Такой тест помогает быстро понять, почему клиент не подключается, и выявить проблемы с сетью или настройками безопасности.
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
Настройка балансировщика нагрузки — важная задача для любого масштабируемого сервиса. Автоматизация с помощью 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
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Для девопсов важно оперативно отслеживать загрузку 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% выводит предупреждение
Такой скрипт можно запускать вручную или интегрировать в систему мониторинга для быстрого реагирования на перегрузки.
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3😁3🌚1
🌐 Cтандартизация правил файрвола
Защита серверов — обязательный элемент работы любой инфраструктуры. Настройка правил файрвола с помощью Ansible Playbook помогает быстро и единообразно обезопасить все серверы.
Пример плейбука для конфигурации UFW:
Что делает этот плейбук:
• Разрешает входящие соединения по SSH (порт 22)
• Открывает HTTP (80) и HTTPS (443) для веб-трафика
• Включает UFW с политикой блокировки всех остальных подключений по умолчанию
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root@prompt
Защита серверов — обязательный элемент работы любой инфраструктуры. Настройка правил файрвола с помощью 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 с политикой блокировки всех остальных подключений по умолчанию
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5😁1
🛠 Куча папок за одну команду
Новичок в shell-скриптинге рассуждает логично: создам папку через
mkdir создаёт только последнюю папку в цепочке. Если пути не существует, то ничего не сработает. Нужно создавать по одной:
Спасает один флаг:
Все папки создаются сразу. Как по волшебству. Eсли какая-то из папок уже существует,
Флаг
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root@prompt
Новичок в 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
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🥱2
Безопасность веб-приложений начинается с правильной настройки 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 обновлением сертификатов и настройкой их автоматического продления.
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
💿 Мониторинг использования диска с оповещением
Маленький скрипт на Python помогает быстро отслеживать заполненность диска и предупреждать, если она превышает критический порог.
Пример простого скрипта:
Как это работает:
• Используется стандартный модуль shutil и функция disk_usage, возвращающая общий, использованный и свободный объем на диске по указанному пути.
• Рассчитывается процент использования диска.
• Если занято больше 80%, скрипт выводит предупреждение с текущим процентом.
Такой мониторинг легко интегрируется в ежедневные проверки, позволяет быстро узнавать о риске переполнения разделов и предотвращать сбои, связанные с нехваткой места.
Для более сложных сценариев можно адаптировать скрипт, добавив отправку уведомлений на email или в чат, хранение логов и периодический запуск через cron.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root@prompt
Маленький скрипт на 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.
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
Защита 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, аудитом и обновлениями, ограничением прав или внедрением систем шифрования.
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁1
Сохраняйте себе шпаргалку по всем командам с
Ctrl+A перемещает курсор в начало текущей строки.Ctrl+E переносит курсор в конец строки.Ctrl+R открывает поиск по истории команд, печатаете фрагмент и терминал подставляет совпадения.Ctrl+стрелка вправо двигает курсор на одно слово вперед в текущей строке, позволяет перескакивать через аргументы.Ctrl+стрелка влево двигает курсор на одно слово назад, удобно возвращаться к предыдущему параметру.Ctrl+U вырезает все от текущей позиции курсора до начала строки и помещает в буфер, потом это можно вставить через Ctrl+Y.Ctrl+F двигает курсор на один символ вперед, аналог обычной стрелки вправо.Ctrl+B двигает курсор на один символ назад, аналог стрелки влево.Ctrl+L очищает экран, как команда clear, оставляя текущую строку ввода внизу.📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Даже если вы аккуратно пишете конфиги и юниты systemd, сбои всё равно случаются сеть, диск, кривой деплой. В такой момент хочется, чтобы хотя бы базовые сервисы умели вставать на ноги.
С этим поможет скрипт на Python:
import subprocess
SERVICE_NAME = "nginx"
def restart_service():
try:
status = subprocess.run(
["systemctl", "is-active", SERVICE_NAME],
capture_output=True,
text=True,
)
if "inactive" in status.stdout or "failed" in status.stdout:
print(f"{SERVICE_NAME} is down! Restarting...")
subprocess.run(["systemctl", "restart", SERVICE_NAME], check=True)
print(f"{SERVICE_NAME} restarted successfully.")
else:
print(f"{SERVICE_NAME} is running fine.")
except Exception as e:
print(f"Error checking service: {e}")
if __name__ == "__main__":
restart_service()
systemctl is-active возвращает состояние сервиса, по которому вы определяете, нужно ли его перезапускать.При падении юнита скрипт выполняет
systemctl restart nginx и сообщает в stdout об успешном запуске.Как использовать на сервере
• Положите скрипт, например, в
/usr/local/bin/check-nginx.py и сделайте его исполняемым.• Добавьте cron‑задание
* * * * * /usr/bin/python3 /usr/local/bin/check-nginx.py чтобы проверять сервис каждую минуту.📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Terraform хорош для IaC, но в больших проектах код копируется по регионам и окружениям. Terragrunt решает это через terragrunt.hcl поверх main.tf.
В папке с main.tf добавьте terragrunt.hcl. Вместо
terraform init && apply пишите terragrunt apply. Auto-init сам подтянет провайдеры, работает с Terraform/OpenTofu.Пример:
# main.tf
variable "content" {}
resource "local_file" "file" { content = var.content; filename = "hi.txt" }
# terragrunt.hcl
inputs = { content = "from terragrunt" }
terragrunt apply создаст .terragrunt-cache (в .gitignore) и файл.
Вынесите логику в shared/main.tf с переменными. В env/ terragrunt.hcl:
terraform { source = "../shared" }
inputs = { content = "env-specific"; output_path = "${get_terragrunt_dir()}/hi.txt" }Логика одна, запускайте из dev/prod. Backend/provider дубли не нужны — Terragrunt генерит.
📍 Навигация: Вакансии • Задачи • Собесы
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🥱2