RECURA | Программирование & IT
14.6K subscribers
1.52K photos
330 videos
1.57K links
Практические советы, утилиты и обучающие материалы для разработчиков, DevOps-инженеров и системных администраторов. Всё о разработке, Linux и информационной безопасности.

Реклама: @tarabuk1n

РКН: clck.ru/3RnyGw

Биржа: https://telega.in/c/recura_tech
Download Telegram
🌐 Nginx может маршрутизировать запросы по нескольким признакам одновременно

👁 map обычно используют для простого выбора значения по заголовку или URI. Но его можно связать с несколькими переменными и получить условную маршрутизацию без десятков location и if.

📝 Разделяем трафик по версии API

Например, часть клиентов ещё работает с /api/v1, а новые запросы должны уходить на отдельный upstream. Nginx выбирает upstream ещё до отправки запроса приложению. При этом само приложение не содержит логики переключения версий.

map $uri $api_backend {
default backend_v2;
~^/api/v1/ backend_v1;
~^/api/v2/ backend_v2;
}

upstream backend_v1 {
server 10.0.1.10:8080;
}

upstream backend_v2 {
server 10.0.1.11:8080;
}

server {
location /api/ {
proxy_pass http://$api_backend;
}
}


📝 Добавляем заголовок клиента

Тот же механизм можно использовать для постепенного перевода отдельных клиентов на новую реализацию. Теперь X-Client-Version: beta отправляет API на новую версию, а остальные клиенты продолжают работать со старой.

map "$http_x_client_version:$uri" $backend {
default backend_v1;
~^beta:/api/ backend_v2;
~^internal:/api/ backend_v2;
}

server {
location /api/ {
proxy_pass http://$backend;
}
}


📝 Делаем управляемое переключение без изменения приложения

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

map $http_x_canary $backend {
default backend_main;
"1" backend_canary;
}

upstream backend_main {
server 10.0.1.10:8080;
}

upstream backend_canary {
server 10.0.1.20:8080;
}

server {
location / {
proxy_set_header X-Backend $backend;
proxy_pass http://$backend;
}
}


❗️ Так map превращается в небольшой слой маршрутизации: версии API, канареечные релизы, внутренние клиенты и миграции можно переключать на уровне Nginx, не распространяя эту логику по приложениям.

tags:
#nginx #devops #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍52👨‍💻1
🐧 Bake

👁 Инструмент командной строки для Linux, который встраивает ресурсы микровиртуальной машины прямо в исполняемый файл.

Он работает с Firecracker, ядром, initrd и загрузочным диском, а также обеспечивает сетевое взаимодействие и общий доступ к каталогам между ВМ и хостом. Всё выполняется в пользовательском пространстве, без необходимости прав суперпользователя.

❗️ Подойдёт DevOps-инженерам и разработчикам, которым нужны лёгкие изолированные окружения на Linux без запуска от root.

📱 GitHub

tags: #утилиты #linux #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥31
🤖 Auto-Company

👁 Оркестратор из 14 автономных ИИ-агентов, которые совместно проводят продукт от идеи до разработки и развёртывания.

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

❗️ Подойдёт разработчикам и командам, которые хотят экспериментировать с полностью автономными ИИ-системами и агентными рабочими процессами.

Проверить в деле

tags:
#утилиты #ии #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍32🔥2
💾 Git на уровне команды

👁 Курс поможет глубже освоить Git и выстроить прозрачный процесс работы с кодом, коммитами, ветками и CI/CD.

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

❗️ Подойдёт Junior и Middle-разработчикам, Team Lead и Senior, которые хотят улучшить командную работу с Git.

Изучаем по ссылке

tags: #обучение #git #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥3👍2👨‍💻1
🐧 Linux может автоматически перезапускать процесс при изменении его бинарника

👁 systemd умеет отслеживать не только файлы конфигурации, но и сам исполняемый файл через PathChanged=. Это позволяет сделать простой механизм автоматического перезапуска приложения после выкладки новой версии без отдельного watcher-скрипта.

📝 Следим за бинарником приложения

Создаём path-unit, который реагирует на изменение файла и запускает перезапуск основного сервиса. Само приложение при этом вообще не знает о механизме обновления.

# /etc/systemd/system/myapp-reload.path
[Path]
PathChanged=/opt/myapp/myapp
Unit=myapp-reload.service

[Install]
WantedBy=multi-user.target


📝 Выполняем перезапуск

oneshot-сервис получает событие от systemd и перезапускает приложение. После изменения бинарника новая версия будет подхвачена без ручного вмешательства.

# /etc/systemd/system/myapp-reload.service
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl try-restart myapp.service


📝 Запускаем наблюдение

После создания units достаточно перечитать конфигурацию и включить watcher. Дальше systemd сам держит наблюдение, а отдельный бесконечный Bash-цикл или сторонний демон не требуется.

sudo systemctl daemon-reload
sudo systemctl enable --now myapp-reload.path

# Проверка
systemctl status myapp-reload.path
journalctl -u myapp-reload.service


❗️ systemd.path можно использовать как событийный слой для серверной автоматизации: изменение бинарника, конфигурации или содержимого каталога может автоматически запускать нужный unit. Это позволяет строить реактивные сценарии без постоянного polling и отдельных watcher-процессов.

tags: #linux #systemd #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥54👨‍💻1
🤖 linux-android

👁 Превращает старый Android-смартфон в полноценный Linux-компьютер с графическим окружением и аппаратным ускорением либо в сервер Home Assistant через Termux.

Можно установить XFCE4, KDE Plasma, LXQt или MATE, использовать Firefox, VLC, Python и OpenSSH для удалённой работы. Для устройств с Qualcomm Adreno доступен драйвер Turnip и ускорение через Zink, при этом root, компьютер и облако не требуются.

❗️ Подойдёт разработчикам и энтузиастам, которые хотят использовать старый Android-смартфон как Linux-окружение или локальный сервер.

📱 GitHub

tags:
#утилиты #linux #android

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥631
🔍 Robin

👁 Инструмент на базе ИИ для проведения OSINT-расследований в даркнете с использованием LLM для уточнения запросов и анализа результатов.

Он фильтрует найденные данные, формирует сводку расследования и позволяет задавать уточняющие вопросы без повторного поиска. Есть веб-интерфейс, поддержка OpenAI, Claude, Gemini, Ollama и совместимых API, Docker-развёртывание, пользовательские отчёты и быстрые переходы к новым направлениям поиска.

❗️ Подойдёт специалистам по OSINT и информационной безопасности для анализа открытых данных в даркнете.

Проверить в деле

tags: #утилиты #хакинг #ии

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥42👍2
🔒 Практическая кибербезопасность

👁 Курс познакомит с основами информационной безопасности, поиском уязвимостей и методами защиты веб-приложений и информационных систем.

Вы освоите Kali Linux, Nmap и Burp Suite, разберётесь с принципами анализа уязвимостей и основами Metasploit и OWASP. Отдельное внимание уделяется защите веб-приложений и систем от распространённых угроз.

❗️ Подойдёт начинающим специалистам по информационной безопасности и тем, кто хочет освоить инструменты этичного тестирования.

Изучаем по ссылке

tags: #обучение #безопасность

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53👍3👨‍💻2
🧑‍💻 Go может сам находить зависшие дочерние процессы и корректно завершать их

👁 При автоматизации через os/exec обычного cmd.Process.Kill() иногда недостаточно: если запущенная команда породила дочерние процессы, они могут продолжить работу после завершения родителя.

📝 В Unix-системах это можно решить через отдельную process group и завершать её целиком

cmd := exec.Command("bash", "-c", "long_task & wait")

cmd.SysProcAttr = &syscall.SysProcAttr{
Setpgid: true,
}

if err := cmd.Start(); err != nil {
log.Fatal(err)
}

time.Sleep(5 * time.Second)

// Завершаем всю process group
if err := syscall.Kill(-cmd.Process.Pid, syscall.SIGTERM); err != nil {
log.Println(err)
}


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

Setpgid: true помещает процесс в отдельную process group.
• Отрицательный PID в syscall.Kill означает отправку сигнала всей группе процессов.
• В результате при остановке автоматизации можно гарантированно завершить не только основной процесс, но и созданные им дочерние процессы.

❗️ Такой приём особенно полезен для CI/CD-агентов, job-runner'ов, автоматических deploy-скриптов и сервисов, которые запускают внешние команды. Он предотвращает ситуацию, когда задача уже считается завершённой, а её дочерние процессы продолжают работать в фоне.

tags: #go #автоматизация #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥2👨‍💻1
🔗 airgorah

👁 Инструмент для аудита безопасности Wi-Fi-сетей, который анализирует беспроводной трафик и обнаруживает подключённые устройства.

Он позволяет проводить проверку сетей с помощью набора инструментов Aircrack-ng, поддерживает захват трафика и анализ защищённости точек доступа. Инструмент использует GTK4 и работает в Linux без постоянного запуска графического интерфейса от root.

❗️ Подойдёт специалистам по информационной безопасности для тестирования собственных Wi-Fi-сетей и поиска уязвимостей.

📱 GitHub

tags: #утилиты #linux #безопасность

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
32👍2👨‍💻1
🤖 magnitude

👁 Автономный ИИ-агент с открытым исходным кодом и локальными моделями, который работает полностью на вашем компьютере.

Все данные и модели остаются локально, а функция «Модели для каждой машины» подбирает оптимальные модели под доступное оборудование. Агент работает сразу после установки без Ollama и отдельного сервера моделей, поддерживает работу с Excel, PDF, Chrome и другими приложениями.

❗️ Подойдёт разработчикам и пользователям, которым нужен приватный ИИ-агент без API-ключей, подписок и оплаты за токены.

Проверить в деле

tags: #утилиты #ии #безопасность

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42👍21
🐳 Docker от основ до продвинутого использования

👁 Видеокурс познакомит с Docker — от принципов контейнеризации и базовых команд до CI/CD, сетей, хранилищ и оптимизации образов.

Вы научитесь создавать Dockerfile, собирать и запускать образы, работать с Docker Compose, Registry и GitLab CI/CD. Отдельно разберёте внутреннее устройство контейнеров, namespaces, cgroups, capabilities, сети, volumes, multistage-сборки и особенности работы с приложениями на Ruby, PHP, Python, Go и Java.

❗️ Подойдёт разработчикам и DevOps-инженерам, которые хотят системно освоить Docker и применять его в реальных проектах.

Изучаем по ссылке

tags: #обучение #docker

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
32👍2🔥1
👨‍💻 Bash может сам гарантировать, что одна и та же задача не запустится дважды

👁 Если скрипт запускается через cron, CI или несколько параллельных job, обычной проверки вроде pgrep недостаточно: между проверкой и запуском остаётся race condition. flock позволяет синхронизировать процессы через файловую блокировку, причём ядро само снимет её после завершения процесса.

📝 Запрещаем параллельный запуск одного скрипта

Самый простой вариант — заблокировать специальный файл через файловый дескриптор. Второй экземпляр сразу завершится, если первый ещё работает.

#!/usr/bin/env bash

exec 9>/run/myapp-sync.lock

if ! flock -n 9; then
echo "Задача уже выполняется" >&2
exit 1
fi

echo "Начинаем синхронизацию..."
sleep 30
echo "Синхронизация завершена"


📝 Делаем отдельные блокировки для разных задач

Блокировка может быть не общей для всего скрипта. Например, несколько задач разрешено выполнять одновременно, но один и тот же сервер нельзя обрабатывать параллельно. Теперь deploy server-01 и deploy server-02 могут работать одновременно, а два процесса для server-01 не пересекутся.

#!/usr/bin/env bash

host="$1"
lock="/run/myapp-${host}.lock"

exec 9>"$lock"

if ! flock -n 9; then
echo "$host уже обрабатывается" >&2
exit 2
fi

echo "Deploy: $host"

ssh "$host" "deploy.sh"

echo "Done: $host"


📝 Ждём освобождения блокировки вместо ошибки

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

#!/usr/bin/env bash

exec 9>/run/report.lock

if ! flock -w 60 9; then
echo "Не удалось получить блокировку за 60 секунд" >&2
exit 1
fi

echo "Получили lock, выполняем задачу"
./generate-report.sh


❗️ flock даёт Bash нормальную межпроцессную синхронизацию без ps, pgrep, PID-файлов и ручной обработки «зависших» lock-файлов. Особенно полезно для cron-задач, deploy-скриптов, миграций, backup и любых job, которые не должны выполняться одновременно.

tags: #bash #автоматизация #devops

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍6🔥2👨‍💻1
🔒 Kudu

👁 Бесплатная программа с открытым исходным кодом для очистки системы и проверки безопасности на Windows, macOS и Linux.

Она удаляет временные файлы, кэши, остаточные данные приложений и помогает анализировать использование диска, управлять автозагрузкой, службами и программами. Все сканирование и очистка выполняются локально, без рекламы, навязанного ПО и подписок.

❗️ Подойдёт пользователям Windows, macOS и Linux, которым нужен прозрачный инструмент для очистки и обслуживания системы.

📱 GitHub

tags: #утилиты #безопасность #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥6👍42
harnessrouter

👁 Self-hosted инфраструктура для запуска Codex, Claude Code, Hermes и других ИИ-агентов через единый API и Docker-контейнер.

Он реализует Unified Harness Protocol и объединяет разные агентские среды под единым интерфейсом с поддержкой сессий, потоковой передачи, файлов, артефактов и отмены задач. Можно переключаться между разными harness и моделями, сохраняя собственную инфраструктуру и API-ключи.

❗️ Подойдёт разработчикам, которые создают продукты на базе ИИ-агентов и хотят работать с разными агентскими средами через единый протокол.

Проверить в деле

tags: #утилиты #ии #docker

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍53🔥1
👨‍💻 Оптимизация Go на уровне BigTech

👁 Курс погружает в низкоуровневую оптимизацию Go и фундаментальные принципы Computer Science, необходимые для работы с высокопроизводительными системами.

Вы разберётесь, как код проходит путь от синтаксиса до машинных инструкций, изучите устройство ОС, calling convention, syscall и ассемблер в Go. Также освоите unsafe, runtime, reflect, debug и профилирование CPU, памяти и блокировок для поиска узких мест.

❗️ Подойдёт Go-разработчикам, которые хотят глубже понимать работу языка и научиться оптимизировать высоконагруженный код.

Изучаем по ссылке

tags:
#обучение #go #оптимизация

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥3👍2👨‍💻1
🛞 Kubernetes может запускать Pod только на узле с нужным локальным условием

👁 Обычно планировщик Kubernetes смотрит на CPU, память, taint'ы и affinity. Но через nodeAffinity можно привязать Pod к собственным меткам узлов и использовать их как механизм автоматического размещения: например, отправлять тяжёлые задачи только на машины с NVMe, определённым типом сети или специальным системным ПО.

📝 Размечаем узлы под реальные возможности

Вместо жёсткой привязки к имени конкретного сервера добавляем метку, описывающую его возможность. Если узлы изменятся, Pod продолжит работать без изменения манифеста.

kubectl label node worker-01 storage.nvme=true
kubectl label node worker-02 storage.nvme=true
kubectl label node worker-03 storage.nvme=false


📝 Требуем нужную характеристику при планировании

requiredDuringSchedulingIgnoredDuringExecution превращает метку в обязательное условие планирования. Kubernetes не разместит Pod на узле, который ему не соответствует.

apiVersion: v1
kind: Pod
metadata:
name: fast-worker
spec:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: storage.nvme
operator: In
values:
- "true"

containers:
- name: worker
image: my-worker:latest


📝 Добавляем несколько вариантов размещения

Можно описать несколько допустимых условий. Например, Pod может работать либо на узле с NVMe, либо на узле с локальным SSD. Это позволяет сохранить гибкость кластера, не привязывая workload к конкретному железу.

affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: storage.nvme
operator: In
values: ["true"]

- matchExpressions:
- key: storage.local
operator: In
values: ["true"]


❗️ Метки узлов можно использовать как слой абстракции над инфраструктурой: Kubernetes работает не с конкретными серверами, а с их возможностями. Это особенно полезно для кластеров с разным железом, GPU, быстрым локальным хранилищем, особой сетью и специализированными worker-узлами.

tags: #k8s #devops #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥21👨‍💻1
🔒 hetty

👁 Открытый HTTP-инструментарий для исследований в области информационной безопасности и анализа веб-трафика.

Он работает как MITM-прокси с журналами и расширенным поиском, позволяет перехватывать, редактировать и повторно отправлять HTTP-запросы. Встроенный HTTP-клиент, поддержка областей и проектное хранение данных упрощают ручное тестирование и анализ запросов.

❗️ Подойдёт специалистам по информационной безопасности, пентестерам и исследователям веб-приложений.

📱 GitHub

tags: #утилиты #безопасность #сети

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍21🔥1
🤖 CyberStrikeAI

👁 Платформа для автоматизации авторизованных операций по кибербезопасности с помощью ИИ-агентов, Eino и базы знаний RAG.

Она преобразует запросы на естественном языке в управляемые и проверяемые действия, объединяя агентов, MCP-инструменты, визуальные рабочие процессы и аудит операций. Платформа поддерживает роли и права доступа, ручное подтверждение действий, журналирование и управление уязвимостями.

❗️ Подойдёт специалистам по информационной безопасности для автоматизации и контроля авторизованных задач тестирования.

Изучаем по ссылке

tags: #утилиты #ии #безопасность

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
43🔥3👍1
🐧 Разработка и программирование ядра Linux

👁 Курс посвящён разработке модулей ядра Linux и работе с ключевыми механизмами операционной системы на низком уровне.

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

❗️ Подойдёт разработчикам, которые хотят углубиться в устройство Linux и низкоуровневое программирование.

Изучаем по ссылке

tags: #обучение #linux #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥2👨‍💻1
🐍 Python может превратить SQLite в надёжную локальную очередь для автоматизации

👁 Если автоматизатор должен переживать перезапуски, падения и временную недоступность внешнего сервиса, хранить задачи только в памяти рискованно.

📝 SQLite позволяет сделать небольшую персистентную очередь без Redis или отдельного брокера

import sqlite3
import time

db = sqlite3.connect("jobs.db", isolation_level=None)

db.execute("""
CREATE TABLE IF NOT EXISTS jobs (
id INTEGER PRIMARY KEY,
payload TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
created_at REAL NOT NULL
)
""")

db.execute("""
INSERT INTO jobs (payload, created_at)
VALUES (?, ?)
""", ("deploy server-01", time.time()))

while True:
with db:
job = db.execute("""
SELECT id, payload
FROM jobs
WHERE status = 'pending'
ORDER BY id
LIMIT 1
""").fetchone()

if not job:
break

db.execute(
"UPDATE jobs SET status = 'running' WHERE id = ?",
(job[0],)
)

try:
print(f"Выполняем: {job[1]}")
# здесь выполняется реальная задача
time.sleep(2)

db.execute(
"UPDATE jobs SET status = 'done' WHERE id = ?",
(job[0],)
)
except Exception:
db.execute(
"UPDATE jobs SET status = 'failed' WHERE id = ?",
(job[0],)
)


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

• Задача сначала записывается на диск, поэтому перезапуск процесса не уничтожает очередь.
• Состояния pending, running, done и failed позволяют восстановить состояние автоматизации после сбоя.
• SQLite поддерживает транзакции, блокировки и WAL, поэтому для небольших локальных job-очередей отдельный брокер сообщений может быть избыточен.

❗️ Такой подход особенно полезен для CLI-автоматизации, локальных агентов, deploy-утилит и фоновых обработчиков, которым нужна надёжная очередь без дополнительной инфраструктуры.

tags: #python #автоматизация #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥543👨‍💻2👍1