Media is too big
VIEW IN TELEGRAM
У меня скопилось какое-то количество крутых TUI тулов, которыми пользуюсь и хочу с вами тоже делиться.
Некоторые супер известные - из серии lazydocker, lazygit и тд. Но банальщину оставим на потом. Хочется показать менее известные TUI-тулзы.
И первая тулза это git-igitt. Она нужна для просмотра Git-истории с читаемыми графами веток прямо в терминале.
⚡ Плюшки:
• визуальные Git-графы в терминале
• навигация по коммитам
• просмотр diff-ов
• кроссплатформенный
Установить можно через cargo или скачав соотвествующий бинарь со страницы релизов.
# Установить cargo можно командой curl https://sh.rustup.rs -sSf | sh
cargo install git-igitt
Навигация очень простая - просто стрелками на клавиатуре вверх вниз влево и вправо.
#tools #git
---
DevOps Brain | Github
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Media is too big
VIEW IN TELEGRAM
Рано или поздно у тебя или твоих коллег появляется Docker-образ, который по какой-то причине весит в разы больше, чем ожидали. Часто виной тому - лишние логи, кэш пакетных менеджеров (apt, npm, pip), или даже исходный код, который не нужен в runtime.
Как следствие pull образа занимает вечность, ну а дальше сильно замедляется развертывание в кластерах или на нодах.
Возникает вопрос: как посмотреть, что находится внутри этого образа и как сделать его меньше? Именно для этого и нужен dive.
По сути dive - это рентген для Docker-образов, который покажет:
- Все реальные слои файловой системы образа.
- Какие именно файлы были добавлены, изменены или удалены в каждом слое.
Попробуйте запустить dive на своем самом большом образе - гарантирую, вы удивитесь =)
# https://github.com/wagoodman/dive
dive <your-image:tag>
#tools #tui
---
DevOps Brain | Github | YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12 1
This media is not supported in your browser
VIEW IN TELEGRAM
ncdu - самая топовая тулза для быстрого поиска куда утекло место на серваке или локальной машинке.
В отличие от обычной команды du, утилита ncdu предоставляет удобный интерфейс, который облегчает навигацию по папкам, позволяет быстро и наглядно находить самые жирные файлы и директории.
Я покажу 2 примера использования - в базовом варианте ( будет достаточно для 99 процентов случаев ):
ncdu <some_path>
Расширенный пример с самыми интересными параметрами, которые потенциально могут пригодиться.
# --exclude-caches - не учитывать кеши
# --exclude '*.log' - не учитывать log-файлы
# --color dark - темная тема
# --show-percent - показывать процент от общего размера
# -- graph-style - стиль графической полоски (чисто вкусовщина для красоты)
ncdu --exclude-caches \
--exclude '*.log' \
--exclude '/proc/*' \
--color dark \
--show-percent \
--graph-style half-block <some_path>
Пакет доступен для всех популярных linux-дистрибутивов и macos. Пример как она работает есть на видео - как видно больше всего места в моем домашнем каталоге жрет Counter Strike oO.
#tools #cli #linux
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤🔥1
Я тут в праздники упоролся и подготовил материал на тему проектирования сетей в графическом симуляторе GNS3. Это будет небольшой цикл из нескольких статей в которых мы:
- Научимся работать в GNS3
- Настроим MikroTik RouterOS через консоль
- Изучим конфигурацию статических и динамических IP-адресов с разными пулами адресов
- Реализацем NAT для доступа в интернет
- Настроим Firewall правила на MikroTik:
- Воспользуемся адресными списками для упрощения управления
- Реализуем сегментацию сети и реализауем политики безопасности
Ну и на вкусное: пересоберем сеть с использованием Cisco L2-коммутатора, настроим VLAN и подрубим OSPF. Ну и вообще разберемся раз и навсегда на реальном примере как это работает на самом деле и зачем это нужно =)
Но для начала, если у тебя macOS на m-проце, я подгтовил пост как там настроить GNS3. К сожалению, там надо немного поплясать что симулятор заработал. Для остальных ОС проблем нет поставить и настроить. В общем - надеюсь тебе будет интересно.
https://habr.com/ru/articles/983362/
---
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤🔥7 3
Как и обещал я выкатываю 2-ую часть по симулятору сетей GNS3.
В статье мы разберем:
- Работу с GNS3 для моделирования сетей.
- Настройку MikroTik RouterOS через консоль (CLI).
- Конфигурацию статических и динамических IP-адресов.
- Настройку DHCP-серверов с разными пулами адресов.
- Реализацию NAT для доступа в интернет.
- Создание и применение Firewall правил.
- Использование адресных списков для упрощения управления.
- Сегментацию сети и реализацию политик безопасности.
Я буду очень рад если вы накидаете плюсов на хабре под постом.
---
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4 2
This media is not supported in your browser
VIEW IN TELEGRAM
Продолжаю делиться с вами крутыми TUI-тулзами. И сегодня на очереди posting - это супер крутой терминальный клиент для HTTP-запросов. Типа Postman, только без лишнего мусора в интерфейсе.
Вот ключевые фишки:
Тебе точно зайдет posting, если ты:
---
Please open Telegram to view this post
VIEW IN TELEGRAM
Иногда в проде происходит самая раздражающая вещь: ты видишь, что что-то запущено, но не понимаешь почему оно вообще живёт.
• ps покажет PID
- ss покажет порт
- systemctl покажет сервис
А вот связать всё это в одну понятную картинку - обычно ручной квест. И вот тут внезапно очень хорошо заходит утилита witr.
Сразу разберем пример использования на моей экспериментальной виртуалке где-то во Франции =)).
# Посмотрим по имени процесса.
root@dns:~# witr angie
Multiple matching processes found:
[1] angie (pid 35980)
angie: master process v1.11.2 #1 [/usr/sbin/angie -c /etc/angie/angie.conf]
[2] angie (pid 35981)
angie: worker process #1
Re-run with:
witr --pid <pid>
# Не повезло - у нас несолько пидов(уж простите за сквернословие)
# Поэтому посмотрим что там скрывается и почему работает 35981
root@dns:~# witr --pid 35981
Target : angie
# Это воркер, которого породил мастер-процесс ибо forked
Process : angie (pid 35981) {forked}
User : angie
Command : angie: worker process #1
Started : 6 days ago (Wed 2026-01-21 15:56:34 +00:00)
Restarts : 1
# Вот эта и есть killer-фича. Мы видим кто его породил!
# Systemd поднял master-процесс angie, а тот породил worker.
# Те это нормальный сервис под управлением init-системы
# А не кто то руками запустил.
Why It Exists :
systemd (pid 1) → angie (pid 35980) → angie (pid 35981)
Source : systemd
Working Dir : /
# Сразу видим порты на которых висит процесс мордой вперед
Listening : 0.0.0.0:44301
0.0.0.0:443
[::]:443
0.0.0.0:80
# Предупреждения - все по делу, ибо нефиг. Надо исправлять!
Warnings :
• Process is listening on a public interface
• Process is running from a suspicious working directory: /
И последнее - witr не пытается заменить systemd или сетевые утилиты. А просто экономит время, особенно когда ты на дежурстве и голова уже не варит.
Ну и бонусом можно не по pid-у пробивать процесс, а по занятому порту и дальше уже подключать детальный вывод с pid:
root@dns:~# witr --port 44301
Multiple matching processes found:
[1] angie (pid 35980)
angie: master process v1.11.2 #1 [/usr/sbin/angie -c /etc/angie/angie.conf]
[2] angie (pid 35981)
angie: worker process #1
Re-run with:
witr --pid <pid>
Полная инструкция и примеры использования: https://github.com/pranshuparmar/witr
---
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13
This media is not supported in your browser
VIEW IN TELEGRAM
Ребята, я сегодня релизнул cli-stash. Это TUI-утилита на Go + Bubble Tea для сохранения shell-команд в "избранном".
Она решает простую боль: сложные команды (docker, kubectl, ffmpeg) постоянно забываются, а копаться в history каждый раз это страдание.
Что умеет:
• Ctrl+A открывает историю шелла с поиском для добавления в избранное
• Нечеткий поиск
• Сортировка по частоте использования
И самое крутое, что команда вставляется прямо в терминал. Таким образом вам не надо ничего копипастить: нашел → выбрал → enter → команда уже в cli.
Установка в Linux:
go install github.com/itcaat/cli-stash@latest
# Build and install from source code
git clone https://github.com/itcaat/cli-stash.git
cd cli-stash
go build -o cli-stash .
sudo mv cli-stash /usr/local/bin/
Установка в MacOS:
# Install MacOS
brew install itcaat/tap/cli-stash
Использовать так (см. демку):
cli-stash
Исходники и инструкция по использованию есть на github
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥9❤🔥3 2
This media is not supported in your browser
VIEW IN TELEGRAM
Ребята, важная инфа 🚨
Я запускаю закрытый канал “Сундук айтишника”.
Несколько раз в день туда будут попадать самые сочные open-source находки с GitHub.
Что внутри?
🔸 6-8 самых сочных opensource-проекта в день с кратким описанием.
🔸 Никаких лонгридов. Коротко, по делу, только суть.
🔸 Фильтр на 95% шума. Только работающие и актуальные инструменты.
⚡️ Для первых 1000 подписчиков — бесплатно навсегда. Потом только — платный вход.
⏫ Забрать бесплатный доступ...
---
Telegram | Github | YouTube | Twitter
Я запускаю закрытый канал “Сундук айтишника”.
Несколько раз в день туда будут попадать самые сочные open-source находки с GitHub.
Что внутри?
🔸 6-8 самых сочных opensource-проекта в день с кратким описанием.
🔸 Никаких лонгридов. Коротко, по делу, только суть.
🔸 Фильтр на 95% шума. Только работающие и актуальные инструменты.
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4😁4🔥3 3 1
Вчера выложил 3-ю часть по сетям хабр, которая позволяет все больше погрузиться в практику конфигурирования сетей.
В ней мы пройдем полный путь построения сегментированной корпоративной сети. Начнем с настройки простейшей сети на MikroTik RouterOS в GNS3, настроим базовую маршрутизацию и DHCP.
Затем добавим интернет-доступ через NAT. После этого заменим простые виртуальные PC на Alpine Linux для реалистичности.
Далее научитимся создавать правила для фильтрации трафика между сегментами (сотрудники, гости, серверы), использовать адресные списки и логировать срабатывания.
По итогу получим готовую, безопасную и масштабируемую сетевую инфраструктуру с продуманными политиками доступа. Все этапы сопровождаются подробными командами, скриншотами и пояснениями.
Тыц...
UPD: скорее всего не буду больше продолжать цикл. Можно было уже перейти дальше к динамической маршрутизации, но там можно бесконечно масштабировать эту историю. К сожалению дальше продолжать цикл ни времени ни желания уже нет, лучше выделю время на более интересные штуки.
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6😁2
Когда в Linux заканчивается оперативная память, система стоит перед критическим выбором: зависнуть полностью или пожертвовать одним из процессов, чтобы выжить. За это жёсткое, но необходимое решение отвечает механизм OOM Killer (Out-of-Memory Killer).
Он не убивает процессы случайно. Вместо этого для каждого вычисляется "рейтинг плохости". Процесс с наивысшим рейтингом признаётся наименее важным и подлежит уничтожению. В расчёте участвуют почти все процессы, кроме init и потоков ядра (kernel threads).
Мы не будем вдаваться сейчас в детали реализации этого механизма - об этом написано уже множество статей. Вместо этого мы сразу посмотрим на сервере какой рейтинг у каждого процесса с помощью однострочника:
for p in /proc/[0-9]*; do pid=${p##*/}; [ -r $p/oom_score ] && printf "%4s %5s %8s %s\n" "$(cat $p/oom_score 2>/dev/null)" "$(cat $p/oom_score_adj 2>/dev/null)" "$pid" "$(cat $p/comm 2>/dev/null)"; done | sort -nr | column -t
Нам интересны 1 и 3 колонки, в которых oom_score и PID соответственно. Наш вывод говорит что, если придет oom kill, то первый “на вылет” fail2ban-server.
**700 0 131351 fail2ban-server**
693 0 1254 node
692 0 131649 fwupd
А теперь самое интересное...На самом деле можно принудительно вызывать oom killer командой:
$ sudo echo f > /proc/sysrq-trigger
$ sudo dmesg
[114247.906865] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/fail2ban.service,task=fail2ban-server,pid=131351,uid=0
[114247.906966] Out of memory: Killed process 131351 (fail2ban-server) total-vm:886820kB, anon-rss:19928kB, file-rss:30592kB, shmem-rss:0kB, UID:0 pgtables:628kB oom_score_adj:0
[PRESS F TO PAY RESPECTS] как говорится. Совпадение это или нет мы не знаем. Но я почти уверен, что 10 лет назад один из контибьютов в ядро Linux (mchehab) сделал отсылку к Call Of Duty намеренно. 🤯
Всем хорошей пятницы! А если тебе интересно как именно ядро считает тот самый oom_score - поставь 🔥
UPD: ошибочка вышла - это просто совпадение =(
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤🔥6 2
This media is not supported in your browser
VIEW IN TELEGRAM
Ребята, я тут вспомнил что когда-то делал репозиторий для того, что бы можно было пощупать kubernetes+terraform локально прямо в Docker Desktop. Сегодня я его немного причесал и готов показать вам.
Если вам нужна песочница, в которой вы могли бы пощупать IAC и кубер, то забирайте тут https://github.com/itcaat/terraform-kubernetes-desktop-startkit
Внутри:
• Ingress Nginx
• cert-manager выпускает валидные TLS-сертификаты локально
• echo-сервис для экспериментов
Это не продакшн-решение. Это учебная песочница, чтобы понимать, как оно работает под капотом, а не просто читать. А полноценный гайд по использованию есть в readme.
---
Telegram | Github | YouTube | X | 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13 4 2
Нашёл интересный опенсорс-инструмент для тех, кто живёт в Proxmox / Docker / Kubernetes. Это такой “single pane of glass”.
• Инфра, ворклоады, бэкапы, сторидж – сгруппировано по задачам, а не по источникам.
• Алерты Slack / Discord / Telegram / Email из коробки.
• Есть персистентное хранение истории с retention.
• Нормальный визуальный обзор бэкапов.
• Можно подключить AI и задавать вопросы по инфраструктуре.
Это не замена полноценному продовому мониторингу уровня большой компании. Но как операционный обзор + AI-ассистент по инфраструктуре – выглядит очень прикольно.
Live Demo: https://demo.pulserelay.pro
Repo: https://github.com/rcourtman/Pulse
---
Telegram | Github | YouTube | Twitter
• Инфра, ворклоады, бэкапы, сторидж – сгруппировано по задачам, а не по источникам.
• Алерты Slack / Discord / Telegram / Email из коробки.
• Есть персистентное хранение истории с retention.
• Нормальный визуальный обзор бэкапов.
• Можно подключить AI и задавать вопросы по инфраструктуре.
docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
--restart unless-stopped \
rcourtman/pulse:latest
Это не замена полноценному продовому мониторингу уровня большой компании. Но как операционный обзор + AI-ассистент по инфраструктуре – выглядит очень прикольно.
Live Demo: https://demo.pulserelay.pro
Repo: https://github.com/rcourtman/Pulse
---
Telegram | Github | YouTube | Twitter
🔥6 3❤🔥2
🎮 Выкатил симулятор закрытых задач iKanban
Ну его нафиг, эту улицу с -14 “за бортом”. Всё утро с кофе и ноутом: допиливал пет-проекты и новую браузерку до состояния “не стыдно показать людям”.
Идея родилась на работе, когда мы с коллегами обсуждали, что кайфово когда задачки закрываешь. Мозг же реально выдает дофамин, когда задача уходит в DONE. Получается, что мем "Секс – это круто, но пробовали ли вы закрывать таски?" – уже не шутка, а жиза.
Поэтому я собрал игру, где вы:
• Выбираете персонажа (DevOps, SRE, Backend, Frontend)
• Получаете тонны абсурдных задач
• Хватаете дофамин от их выполнения
• Угараете в чате над виртуальными коллегами и залипаете кайфовую музыку
Залипать сюда 👉 https://t.me/ikanban_bot?startapp или просто на https://ikanban.ru.
P.S. Если что-то пойдет не так или захочется поругать – велкам в комменты. Похвала тоже принимается. А если хотите чтобы я рассказал в следующих постах как быстро поднимать микро-продукты – то ставьте🔥 .
---
🚀 Telegram | Github | YouTube | Twitter
Ну его нафиг, эту улицу с -14 “за бортом”. Всё утро с кофе и ноутом: допиливал пет-проекты и новую браузерку до состояния “не стыдно показать людям”.
Идея родилась на работе, когда мы с коллегами обсуждали, что кайфово когда задачки закрываешь. Мозг же реально выдает дофамин, когда задача уходит в DONE. Получается, что мем "Секс – это круто, но пробовали ли вы закрывать таски?" – уже не шутка, а жиза.
Поэтому я собрал игру, где вы:
• Выбираете персонажа (DevOps, SRE, Backend, Frontend)
• Получаете тонны абсурдных задач
• Хватаете дофамин от их выполнения
• Угараете в чате над виртуальными коллегами и залипаете кайфовую музыку
Залипать сюда 👉 https://t.me/ikanban_bot?startapp или просто на https://ikanban.ru.
P.S. Если что-то пойдет не так или захочется поругать – велкам в комменты. Похвала тоже принимается. А если хотите чтобы я рассказал в следующих постах как быстро поднимать микро-продукты – то ставьте
---
🚀 Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Нашел htop для сетевых соединений - назвается snitch.
Открываешь и сразу понятно:
• кто слушает порт
• какой PID
• какой процесс
• какие соединения висят в established
• куда сервис вообще ходит
• можно прибить прямо из интерфейса
Также можно фильтровать TCP/UDP, отдельно LISTEN, отдельно ESTABLISHED, искать, сортировать.
Ставится "изи-пизи":
brew install snitch
или
go install github.com/karol-broda/snitch@latest
Забрать тут: https://github.com/karol-broda/snitch
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11😁2 1
Информации стало слишком много и нужно что-то с этим делать. Сколько у вас там сохранных статей и видео, которые вы скорее всего никогда не прочитаете и не посмотрите?
Вот у меня такая же печаль. Я вижу очень большую проблему в структурировании данных которых мне нужны как для работы, так и для повседневной жизни.
И проблема даже не в том, что мы плохие и ленивые - дело в контексте. Мы думаем да - это классная статья, я сохраню и потом прочитаю. Но когда настает время прочитать появляется другая классная статья. А через какое-то время еще и еще… А ваш контекст уже переключился на что-то другое и вот в вашей коллекции еще один артифакт.
А что по поводу внезапных идей? Мы идем по улице и БАЦ к вам приходит какая то мысль: это может быть какое улучшение, новый сервис или вы поняли как решить проблему, которую не могли решить уже несколько дней. Хочется куда записать… В голосовухи? В телегу в Saved Messages который итак уже скоро разорвет от хаоса внутри? Короче, это боль. Я умею структурировать данные, я просто не хочу больше это делать. Мне надело быть “оператором ЭВМ” (в 90-е была такая профессия кстати).
И вчера вечером я немного завис над созданием Telegram-бота в роли персонального мультиагентного асситента с памятью о всех переписках и данных которые в него попадут. Я хочу мини-монстрика, в который кормишь просто любую инфу, узкопрофильные вопросы (например по автомобилю, бизнесу, ветеринарии для кошки и тд), свои календари, внутренню базу знаний и оно автоматом все структурирует. Пока цель MVP просто кидаю текст, голос, ссылку или документ в pdf формате в бота и потом могу обращаться через бота к этим данным, например также отправив голосовуху: “Напомни мою идею про то как починить прод =)”. А еще сразу хочу, чтобы если мог попросить ответить голосом, на случай если я за рулем, то оно слало голосовуху.
Почему не взять готовые инструменты? Не хочу. Да, вот так тупо. Мне интерсно поковыряться в векторных базках и построить что-то сложное на базе n8n. В итоге поставил selfhosted n8n + supabase на тестовую вмку где-то в Нидерландах, что бы накрутить MVP и сразу получил в бубен по утилизации =)).
Ну и вопрос к вам - вы как у себя решаете эту проблему структурирования информации и сколько оно отнимает у вас времени и сил?
---
Telegram | Github | YouTube | Twitter
Вот у меня такая же печаль. Я вижу очень большую проблему в структурировании данных которых мне нужны как для работы, так и для повседневной жизни.
И проблема даже не в том, что мы плохие и ленивые - дело в контексте. Мы думаем да - это классная статья, я сохраню и потом прочитаю. Но когда настает время прочитать появляется другая классная статья. А через какое-то время еще и еще… А ваш контекст уже переключился на что-то другое и вот в вашей коллекции еще один артифакт.
А что по поводу внезапных идей? Мы идем по улице и БАЦ к вам приходит какая то мысль: это может быть какое улучшение, новый сервис или вы поняли как решить проблему, которую не могли решить уже несколько дней. Хочется куда записать… В голосовухи? В телегу в Saved Messages который итак уже скоро разорвет от хаоса внутри? Короче, это боль. Я умею структурировать данные, я просто не хочу больше это делать. Мне надело быть “оператором ЭВМ” (в 90-е была такая профессия кстати).
И вчера вечером я немного завис над созданием Telegram-бота в роли персонального мультиагентного асситента с памятью о всех переписках и данных которые в него попадут. Я хочу мини-монстрика, в который кормишь просто любую инфу, узкопрофильные вопросы (например по автомобилю, бизнесу, ветеринарии для кошки и тд), свои календари, внутренню базу знаний и оно автоматом все структурирует. Пока цель MVP просто кидаю текст, голос, ссылку или документ в pdf формате в бота и потом могу обращаться через бота к этим данным, например также отправив голосовуху: “Напомни мою идею про то как починить прод =)”. А еще сразу хочу, чтобы если мог попросить ответить голосом, на случай если я за рулем, то оно слало голосовуху.
Почему не взять готовые инструменты? Не хочу. Да, вот так тупо. Мне интерсно поковыряться в векторных базках и построить что-то сложное на базе n8n. В итоге поставил selfhosted n8n + supabase на тестовую вмку где-то в Нидерландах, что бы накрутить MVP и сразу получил в бубен по утилизации =)).
Ну и вопрос к вам - вы как у себя решаете эту проблему структурирования информации и сколько оно отнимает у вас времени и сил?
---
Telegram | Github | YouTube | Twitter
🔥16❤🔥3😁2
В продолжении вчерашнего поста про идею создать себе AI-ассистента на базе telegram+ n8n…Решил немного поделиться с вами к чему я пришел и где я продолбался.
👏 Скажу сразу у меня получилось собрать MVP. Из плюсов – оно работает и у меня уже есть какой-то базовый ассистент. Я могу в него голосом говорить, фотки документов отправлять (кстати надо добавить туда юриста) через телегу, могу сохранять ссылки, создавать события в календаре, есть финансовый консультант и даже DBA/Sysadmin/Sre и сетевик в одном лице =) И это ОФИГЕТЬ КАК УДОБНО!
Первым делом я выпилил selfhosted supabase (нафиг он нужон то был?!) и воткнул обычный postgres + vector extension. И теперь моей виртуалочке не так больно, а то load avarage в 178 это было жоска. Ну и прикрутил туда cloudbeaver, чтобы в базку ходить и запросики выполнять. Избыточно, но просто давно хотел посмотреть на веб-версию dbeaver.
✍️ Дальше нарисовал схемку бд со слоями памяти:
• conversations (рабочая память) – всё что я говорил и что отвечал ассистент. Используется для контекста текущего и прошлых разговоров. С вектором embedding можно семантически искать релевантные прошлые сообщения.
• user_rules(правила пользователя) – это для оркестратора. Если ассистенту сказали “Запомни, меня надо называть МОЙ ПОВЕЛИТЕЛЬ”, то он будет так обращаться. Еще для примера можно сказать “Запомни, всегда отвечай кратко”. Суть вы поняли – через эту штуку можно корректировать поведение.
• agent_memories(память конкретных агентов) – это отдельный слой, который ты спрашиваешь. Каждый агент (путешественник, финансист, айтишник и т.д.) хранит свои наблюдения о пользователе – например, психолог запомнит "у пользователя тревожность по поводу работы”.
По итогу был о накручено некоторое количество ворклошек в n8n. К счастью тут мы ограничены только нашей фантазей, так как агенты со специализацией это по сути копипаста. И мы можем уже на их основе добавлять новых агентов-специалистов.
☔️ Ну а теперь где я продолбался. И это (барабанная дробь …) single-hop архитектура. Я протупил в самом начале и теперь оркестратор выбирает одного агента и на этом цепочка заканчивается. Таким образом агенты изолированы – ни один из них не может вызвать другого.
Разберем на реальном примере: "Найди когда нам надо на прививку коту и создай запись в календаре". Orchestrator может выбрать только одного. Если выберет Ветеринара – тот ответит датой, но не создаст событие. Если выберет Календарь – у него нет знаний о прививках. А это явно не то что хочется получить в конце.
Система полностью stateless, нет multi-turn диалога. Если я попрошу создать в календаре событие – агент просто это сделает. Он не проверяет, свободно ли 15:00. По хорошему надо добавить (добавить List Events перед Create) и агент должен сказать: "В 15:00 занято, создать всё равно?". Принять следующее сообщение "да" / "нет" / "тогда в 16:00" в контексте этого вопроса и действовать от этого. Что бы это решить надо pending_actions табличку чтобы контекст не терялся. Ну и прикрутить какой то таймаут для контекста.
Короче, получается как в известном меме: “Миша, всё … – давай по новой” (с)
PS И ребят, если вам интересно что в итоге получится – пролайкате пост😕 , мне хочется понять, что небольшой перекос в продуктовые эксперименты вам тоже ок.
---
Telegram | Github | YouTube | Twitter
Первым делом я выпилил selfhosted supabase (нафиг он нужон то был?!) и воткнул обычный postgres + vector extension. И теперь моей виртуалочке не так больно, а то load avarage в 178 это было жоска. Ну и прикрутил туда cloudbeaver, чтобы в базку ходить и запросики выполнять. Избыточно, но просто давно хотел посмотреть на веб-версию dbeaver.
• conversations (рабочая память) – всё что я говорил и что отвечал ассистент. Используется для контекста текущего и прошлых разговоров. С вектором embedding можно семантически искать релевантные прошлые сообщения.
• user_rules(правила пользователя) – это для оркестратора. Если ассистенту сказали “Запомни, меня надо называть МОЙ ПОВЕЛИТЕЛЬ”, то он будет так обращаться. Еще для примера можно сказать “Запомни, всегда отвечай кратко”. Суть вы поняли – через эту штуку можно корректировать поведение.
• agent_memories(память конкретных агентов) – это отдельный слой, который ты спрашиваешь. Каждый агент (путешественник, финансист, айтишник и т.д.) хранит свои наблюдения о пользователе – например, психолог запомнит "у пользователя тревожность по поводу работы”.
По итогу был о накручено некоторое количество ворклошек в n8n. К счастью тут мы ограничены только нашей фантазей, так как агенты со специализацией это по сути копипаста. И мы можем уже на их основе добавлять новых агентов-специалистов.
Разберем на реальном примере: "Найди когда нам надо на прививку коту и создай запись в календаре". Orchestrator может выбрать только одного. Если выберет Ветеринара – тот ответит датой, но не создаст событие. Если выберет Календарь – у него нет знаний о прививках. А это явно не то что хочется получить в конце.
Система полностью stateless, нет multi-turn диалога. Если я попрошу создать в календаре событие – агент просто это сделает. Он не проверяет, свободно ли 15:00. По хорошему надо добавить (добавить List Events перед Create) и агент должен сказать: "В 15:00 занято, создать всё равно?". Принять следующее сообщение "да" / "нет" / "тогда в 16:00" в контексте этого вопроса и действовать от этого. Что бы это решить надо pending_actions табличку чтобы контекст не терялся. Ну и прикрутить какой то таймаут для контекста.
Короче, получается как в известном меме: “Миша, всё … – давай по новой” (с)
PS И ребят, если вам интересно что в итоге получится – пролайкате пост
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43😁4
Ребята, решил я недавно поиграться с Dokploy в рамках экспериментов n8n и AI-ассистента. Ну и пока настраивал, заодно решил показать вам ZeroTier.
ZeroTier – это сервис, который позволяет объединить устройства через интернет так, будто они находятся в одной локальной сети.
На самом деле очень крутая штука, тем более что в рамках free-тарифа можно добавить до 10 устройств. Таким образом у нас будет крутая overlay-сеть и мы можем изи-пизи объединить все наши VPS, ноутбуки и телефоны. И самое главное, что будет не важно, что они сидят за NAT. А вся настройка отнимет у вас минут 10:
1. Регаемся на сайте https://www.zerotier.com и прыгаем в личный кабинет.
2. Там создаем новую сеть. Cохраняем себе Network ID. Он понадобиться чтобы к сети присоединиться. У меня это 3b19b3a716137783.
3. Идем на страницу загрузки клиентов https://www.zerotier.com/download. Копируем команду установки и ставим на VPS сервер:
curl -s https://install.zerotier.com | sudo bash
4. Теперь подключимся сразу к новой сети pets. После выполнения получите 200 join OK.
sudo zerotier-cli join 3b19b3a716137783
5. Переходим в админку в нашу сеть pets и авторизуем клиента.
6. Теперь я добавлю локальную машинку. Качаю клиента под свою ОС чтобы оказаться в приватной сети с VPS. Там ввожу Network ID для подключения и делаю апрув в админке.
7. Zerotire нам выдаст рандомный ойпешник в приватной сети. Давайте слегка это исправим. Нырнем в админке в устройство 8b26a132b7 (это VPS) и пропишем в Managed IPs красивый ойпешник 10.75.142.1.
На этом базовая настройка завершена. Устройства будут видеть друг друга в рамках приватной сети 10.75.142.0/24.
Но для большей безопасности и удобства (иначе зачем это всё?) надо настроить firewall. У меня стоит Dokploy, поэтому я хочу сделать открытыми порты 80 и 443. А всё остальное будет открыто только в сети ZeroTier. (ens3 - это внешний интерфейс на VPS, zt+ - это интерфейсы ZeroTier)
8. Подключимся к VPS 10.75.142.1 – ЭТО ВАЖНО и забекапим текущие правила на всякий.
iptables-save > /root/iptables.backup.$(date +%F_%H%M).rules
9. Закрываемся от мира. Обратите внимание – после применения этих правил доступа к ssh по внешнему интерфейсу не будет. Но так и задумано!
# Сначала базовые allow (в начало)
iptables -I INPUT 1 -i zt+ -j ACCEPT
iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 3 -i lo -j ACCEPT
# Публично только 80/443 через ens3
iptables -I INPUT 4 -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -j ACCEPT
# Всё остальное входящее — DROP
iptables -P INPUT DROP
iptables -F DOCKER-USER
# Разрешаем ответы
iptables -A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# ZeroTier полный доступ
iptables -A DOCKER-USER -i zt+ -j ACCEPT
iptables -A DOCKER-USER -o zt+ -j ACCEPT
# Контейнерам можно инициировать соединения наружу
iptables -A DOCKER-USER -i docker0 -j ACCEPT
# Снаружи (ens3) только 80/443
iptables -A DOCKER-USER -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER -i ens3 -p tcp --dport 443 -j ACCEPT
# Остальное снаружи в docker — DROP
iptables -A DOCKER-USER -i ens3 -j DROP
iptables -A DOCKER-USER -j RETURN
Установим iptables-persistent и сохраним правила, чтобы не отрыгнуло после ребута
apt-get update && apt-get install -y iptables-persistent && netfilter-persistent save
В итоге мы получаем приватную сеть с нашими девайсами, которые видят друг друга напрямую. А для внешнего интерфейса открыт только 80 и 443 – в моем случае это Traefik в docker. И теперь на VPS если я сделаю гадость вот так:
docker run -d --name my-redis -p 6379:6379 redis:latest
То порт 6379 будет доступен только в приватной сети:
$ nmap 138.124.75.165 -p6379 -PN
PORT STATE SERVICE
6379/tcp filtered redis
$ nmap 10.75.142.1 -p6379
PORT STATE SERVICE
6379/tcp open redis
ZeroTier подходит и для более сложных кейсов. Но это уже другая история...
А статью со скриншотами можно почитать тут.
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Иногда кажется, что сообщество просто постепенно переписывает весь GUI в терминал 🙂
В продолжении цикла постов про крутые TUI-тулзов сегодня на очереди инструмент termshark. Это по сути Wireshark в терминале.
Что умеет:
• открывать pcap-файлы
• сниффить интерфейсы в реальном времени
• использовать display filters из Wireshark
• смотреть TCP/UDP стримы
• анализировать network conversations по протоколам
• копировать диапазоны пакетов прямо из терминала
Работает это всё через tshark, так что под капотом тот же Wireshark-движок. Особенно удобно, когда ты сидишь на удалённом сервере, а рядом лежит pcap на пару десятков гигабайт, и идея тащить его к себе через scp выглядит сомнительно.
Просто скармливаешь pcap и спокойно разбираешь трафик прямо по SSH:
termshark -r dump.pcap
https://github.com/gcla/termshark
---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁2 1