🤖 Вторая часть курса по LangGraph готова!
Статья уже написана и оформлена как черновик на Хабре, сейчас проходит финальную вычитку. В рамках статьи мы превратим безжизненные графы в настоящих AI-агентов с интеллектом и памятью! Что будет в статье?
Теоретическая база (без занудства):
- Типы сообщений (AIMessage, HumanMessage и зачем это нужно)
- Контекстная память агентов
- Шаблонизаторы и парсеры
- Архитектура мультимодельных систем
Практические кейсы:
- Агенты с долговременной памятью (100+ сообщений)
- Гарантированное получение валидного JSON от нейросетей
- Интеграция нескольких LLM в одном графе
- Интеллектуальная маршрутизация сообщений
Создадим агента, который запоминает ваше имя и профессию, ведет осмысленный диалог и получает функционал, который изначально в графовую систему не закладывали!
Пока ждете выхода:
📝 Первая часть: Архитектура: графы, узлы и состояния
💻 Исходный код второй части: GitHub
📅 Публикация: 20 сентября (суббота)
Ждете продолжение?👀
Статья уже написана и оформлена как черновик на Хабре, сейчас проходит финальную вычитку. В рамках статьи мы превратим безжизненные графы в настоящих AI-агентов с интеллектом и памятью! Что будет в статье?
Теоретическая база (без занудства):
- Типы сообщений (AIMessage, HumanMessage и зачем это нужно)
- Контекстная память агентов
- Шаблонизаторы и парсеры
- Архитектура мультимодельных систем
Практические кейсы:
- Агенты с долговременной памятью (100+ сообщений)
- Гарантированное получение валидного JSON от нейросетей
- Интеграция нескольких LLM в одном графе
- Интеллектуальная маршрутизация сообщений
Создадим агента, который запоминает ваше имя и профессию, ведет осмысленный диалог и получает функционал, который изначально в графовую систему не закладывали!
Пока ждете выхода:
📝 Первая часть: Архитектура: графы, узлы и состояния
💻 Исходный код второй части: GitHub
📅 Публикация: 20 сентября (суббота)
Ждете продолжение?
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥65❤29🎉7❤🔥3👀2🙉2😘1
🎉 Вторая часть курса по LangGraph уже доступна!
Статья "Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 2. Диалоговые агенты: память, сообщения и контекст" опубликована и готова к изучению!
В этой части мы превратили безжизненные графы в настоящих AI-агентов с интеллектом и памятью!
Что вы найдете в статье:
🧠 Теоретическая база (без занудства):
- Типы сообщений (AIMessage, HumanMessage и зачем это нужно)
- Контекстная память агентов
- Шаблонизаторы и парсеры
-Архитектура мультимодельных систем
⚡️ Практические кейсы:
- Агенты с долговременной памятью (100+ сообщений)
- Гарантированное получение валидного JSON от нейросетей
- Интеграция нескольких LLM в одном графе
- Интеллектуальная маршрутизация сообщений
Создадим агента, который запоминает ваше имя и профессию, ведет осмысленный диалог и получает функционал, который изначально в графовую систему не закладывали!
🔗 Читать статью: ЧИТАТЬ
📚 Полезные материалы:
📝 Первая часть: Архитектура: графы, узлы и состояния
💻 Исходный код: GitHub
🚀 А что дальше?
Уже собираю материал для третьей части! Там речь пойдет про Инструменты, действия, MCP - создадим агентов, которые умеют ДЕЛАТЬ, а не только говорить!
Понравилась статья? Делитесь впечатлениями! 👇
Статья "Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 2. Диалоговые агенты: память, сообщения и контекст" опубликована и готова к изучению!
В этой части мы превратили безжизненные графы в настоящих AI-агентов с интеллектом и памятью!
Что вы найдете в статье:
🧠 Теоретическая база (без занудства):
- Типы сообщений (AIMessage, HumanMessage и зачем это нужно)
- Контекстная память агентов
- Шаблонизаторы и парсеры
-Архитектура мультимодельных систем
⚡️ Практические кейсы:
- Агенты с долговременной памятью (100+ сообщений)
- Гарантированное получение валидного JSON от нейросетей
- Интеграция нескольких LLM в одном графе
- Интеллектуальная маршрутизация сообщений
Создадим агента, который запоминает ваше имя и профессию, ведет осмысленный диалог и получает функционал, который изначально в графовую систему не закладывали!
🔗 Читать статью: ЧИТАТЬ
📚 Полезные материалы:
📝 Первая часть: Архитектура: графы, узлы и состояния
💻 Исходный код: GitHub
🚀 А что дальше?
Уже собираю материал для третьей части! Там речь пойдет про Инструменты, действия, MCP - создадим агентов, которые умеют ДЕЛАТЬ, а не только говорить!
Понравилась статья? Делитесь впечатлениями! 👇
Хабр
Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 2. Диалоговые агенты: память, сообщения и контекст
Представьте себе AI-агента, который не просто выполняет изолированные задачи, а ведет осмысленный диалог, запоминает контекст разговора и принимает решения на основе накопленной информации....
3🔥66❤16👍13🎉2🎄1💘1
🚀 Начал активную подготовку 3-й части курса по LangGraph!
После более чем месячной паузы между первой и второй частью решил не затягивать с продолжением. Материал уже собираю, код пишу — третья часть выйдет намного быстрее!
Тема: "Реактивные агенты: инструменты, действия, MCP"
🎯 От слов к делам:
Во второй части мы создали умных болтунов с памятью и JSON-ответами. Но они всё ещё не могут НИЧЕГО ДЕЛАТЬ в реальном мире.
В третьей части исправляем это критическое ограничение!
⚡️ Что будет в статье:
🔧 Model Context Protocol (MCP) — стандарт для подключения любых инструментов
📁 Файловые операции — агент читает CSV, создаёт отчёты
🗄 Работа с БД — SQL-запросы через естественный язык
🚀 DevOps-автоматизация — от git-мониторинга до автодеплоя
🛡 Безопасность — как дать агентам силу, но сохранить контроль
Представьте диалог:
Пока кажется фантастикой? К концу статьи сами научитесь такое создавать!
📅 Планы по срокам:
Активно работаю над материалом, код уже тестирую. Третья часть выйдет в на следующей неделе (надеюсь), а не через месяц как в прошлый раз 😅
🔥 Будете ждать продолжение?
После более чем месячной паузы между первой и второй частью решил не затягивать с продолжением. Материал уже собираю, код пишу — третья часть выйдет намного быстрее!
Тема: "Реактивные агенты: инструменты, действия, MCP"
🎯 От слов к делам:
Во второй части мы создали умных болтунов с памятью и JSON-ответами. Но они всё ещё не могут НИЧЕГО ДЕЛАТЬ в реальном мире.
В третьей части исправляем это критическое ограничение!
⚡️ Что будет в статье:
🔧 Model Context Protocol (MCP) — стандарт для подключения любых инструментов
📁 Файловые операции — агент читает CSV, создаёт отчёты
🗄 Работа с БД — SQL-запросы через естественный язык
🚀 DevOps-автоматизация — от git-мониторинга до автодеплоя
🛡 Безопасность — как дать агентам силу, но сохранить контроль
Представьте диалог:
"Проанализируй продажи за месяц"
🔍 Подключаюсь к БД...
📊 Анализирую данные...
📈 Создаю отчёт в Excel...
"Готово! Отчёт сохранён в sales_report.xlsx"
Пока кажется фантастикой? К концу статьи сами научитесь такое создавать!
📅 Планы по срокам:
Активно работаю над материалом, код уже тестирую. Третья часть выйдет в на следующей неделе (надеюсь), а не через месяц как в прошлый раз 😅
🔥 Будете ждать продолжение?
4🔥89👍22❤18⚡3🎉2🤩2👏1🤝1🙊1
⚡️ Как быстро превратить CSV в JSON на Python
Часто данные прилетают в формате CSV, а работать удобнее в JSON. Решается в пару строк кода:
🔑 На что стоит обратить внимание:
* Кодировка: в России CSV-файлы часто в
* Разделитель: Excel любит
В итоге получаем аккуратный
Часто данные прилетают в формате CSV, а работать удобнее в JSON. Решается в пару строк кода:
import csv
import json
def csv_to_json(filename_in, filename_out):
with open(filename_in, "r", encoding="cp1251") as csvfile:
reader = csv.DictReader(csvfile, delimiter=";")
rows = list(reader)
with open(filename_out, "w", encoding="utf-8") as jsonfile:
json.dump(rows, jsonfile, ensure_ascii=False, indent=2)
# Пример:
csv_to_json("price.csv", "output.json")
🔑 На что стоит обратить внимание:
* Кодировка: в России CSV-файлы часто в
cp1251, а JSON лучше сохранять в utf-8.* Разделитель: Excel любит
; вместо привычной запятой ,. Если структура другая — не забудьте поменять delimiter.В итоге получаем аккуратный
output.json с красивыми отступами и без кракозябр. 🚀❤27👍12🔥8🕊1👻1🤝1🤪1💘1
🚀 Третья часть курса по LangGraph практически готова!
После умных болтунов с памятью и JSON-ответами настало время дать агентам «руки» — инструменты для реальных действий.
Черновик статьи уже на Хабре, финальная вычитка идёт, код написан и проверен ✨😉
Что будет в статье?
📚 Теоретическая база (коротко и по делу):
- Что такое инструменты (Tools) и зачем они нужны
- Model Context Protocol (MCP) — стандарт для подключения любых действий
- Архитектура «реактивных» агентов
🛠 Практика и кейсы:
* Агент, который умеет читать файлы, анализировать CSV и сохранять отчёты
* SQL-запросы к базе прямо из естественного языка
* Мультиагентные системы: несколько агентов-экспертов в одном графе
* Безопасность: как дать агентам силу, но сохранить контроль
Пример диалога из статьи:
👩 Пользователь: «Проанализируй продажи за месяц»
🤖 Агент: «Подключаюсь к БД → Анализирую → Создаю отчёт…»
📊 «Готово! Отчёт сохранён в sales\_report.xlsx»
Уже не болтун, а настоящий цифровой ассистент!
📅 Публикация: 27 сентября (суббота)
💻 Исходный код третьей части: GitHub
🔗 Связь с предыдущими частями:
1️⃣ Часть. Архитектура: графы, узлы и состояния
2️⃣ Часть. Диалоговые агенты: память, сообщения и контекст
🔥 Название статьи:
Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 3. Даём ИИ руки: работа с инструментами и MCP
Ждёте публикацию?👀
После умных болтунов с памятью и JSON-ответами настало время дать агентам «руки» — инструменты для реальных действий.
Черновик статьи уже на Хабре, финальная вычитка идёт, код написан и проверен ✨😉
Что будет в статье?
📚 Теоретическая база (коротко и по делу):
- Что такое инструменты (Tools) и зачем они нужны
- Model Context Protocol (MCP) — стандарт для подключения любых действий
- Архитектура «реактивных» агентов
🛠 Практика и кейсы:
* Агент, который умеет читать файлы, анализировать CSV и сохранять отчёты
* SQL-запросы к базе прямо из естественного языка
* Мультиагентные системы: несколько агентов-экспертов в одном графе
* Безопасность: как дать агентам силу, но сохранить контроль
Пример диалога из статьи:
👩 Пользователь: «Проанализируй продажи за месяц»
🤖 Агент: «Подключаюсь к БД → Анализирую → Создаю отчёт…»
📊 «Готово! Отчёт сохранён в sales\_report.xlsx»
Уже не болтун, а настоящий цифровой ассистент!
📅 Публикация: 27 сентября (суббота)
💻 Исходный код третьей части: GitHub
🔗 Связь с предыдущими частями:
🔥 Название статьи:
Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 3. Даём ИИ руки: работа с инструментами и MCP
Ждёте публикацию?
Please open Telegram to view this post
VIEW IN TELEGRAM
8❤43🔥33👍15🤩4🎉3👀3👌1💯1
Только что закончил финальную вычитку текста третьей части курса по LangGraph.
Уже завтра статья выйдет на Хабре 🙌
Будем давать ИИ «руки» — подключать инструменты и MCP, а агенты перестанут быть просто болтунами и начнут реально действовать ✨
А дальше будет ещё интереснее 👉 Часть 4 задумывается как полноценный проект на LangGraph.
Но пока я не определился, какой именно — хочу услышать ваши идеи.
Что было бы круче разобрать:
— ассистента для работы с документами?
— мультиагентный проект с несколькими экспертами?
— или что-то под DevOps/кодинг?
Пишите в комментах
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥46❤13👏3🎉2☃1🙏1👀1
🎉 Третья часть курса по LangGraph уже опубликована!
Статья «Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 3. Даём ИИ руки: работа с инструментами и MCP»👉 читать на Хабре
В этой части агенты перестают быть болтунами — они получают инструменты и MCP, учатся читать файлы, работать с БД, анализировать CSV, строить отчёты и даже объединяться в мультиагентные системы 💪
📚 Полезные ссылки:
1️⃣ Часть 1. Архитектура
2️⃣ Часть 2. Диалоговые агенты
3️⃣ Исходники третьей части (GitHub)
🔥 А что дальше?
Часть 4 задумывается как полноценный проект на LangGraph.
Я пока не определился с темой проекта — поэтому всё ещё жду ваши идеи:
— Ассистент для работы с документами (поиск, аннотации, резюме)?
— Мультиагентная система, где каждый агент — эксперт в своей области?
— DevOps-помощник: CI/CD, сборки, деплой прямо из графа?
— Data-аналитик: сбор данных из разных источников, отчёты и дашборды?
— Агент для работы с кодом: рефакторинг, тесты, генерация pull-request?
— Личный productivity-ассистент: планирование задач, интеграции с календарём и почтой?
— Или что-то совершенно необычное, о чём я даже не подумал?
💡 Делитесь в комментариях 👇 именно ваши хотелки могут попасть в четвёртую часть!
Статья «Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 3. Даём ИИ руки: работа с инструментами и MCP»
В этой части агенты перестают быть болтунами — они получают инструменты и MCP, учатся читать файлы, работать с БД, анализировать CSV, строить отчёты и даже объединяться в мультиагентные системы 💪
📚 Полезные ссылки:
1️⃣ Часть 1. Архитектура
2️⃣ Часть 2. Диалоговые агенты
3️⃣ Исходники третьей части (GitHub)
🔥 А что дальше?
Часть 4 задумывается как полноценный проект на LangGraph.
Я пока не определился с темой проекта — поэтому всё ещё жду ваши идеи:
— Ассистент для работы с документами (поиск, аннотации, резюме)?
— Мультиагентная система, где каждый агент — эксперт в своей области?
— DevOps-помощник: CI/CD, сборки, деплой прямо из графа?
— Data-аналитик: сбор данных из разных источников, отчёты и дашборды?
— Агент для работы с кодом: рефакторинг, тесты, генерация pull-request?
— Личный productivity-ассистент: планирование задач, интеграции с календарём и почтой?
— Или что-то совершенно необычное, о чём я даже не подумал?
💡 Делитесь в комментариях 👇 именно ваши хотелки могут попасть в четвёртую часть!
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 3. Даём ИИ руки: работа с инструментами и MCP
В предыдущих частях мы создали умных агентов с памятью и мультимодельными системами. Но есть проблема — они всё ещё умные болтуны . Критическое ограничение: агенты без рук Наши агенты могут...
🔥58👍16❤13🎉3❤🔥2🎄1😘1
This media is not supported in your browser
VIEW IN TELEGRAM
Помню те времена, когда ещё не было нейронок и именно Stack Overflow был нашей единственной надеждой.
Найдёшь то самое ключевое слово — и будто свет в конце туннеля. Покойся с миром, старый друг 😔
Найдёшь то самое ключевое слово — и будто свет в конце туннеля. Покойся с миром, старый друг 😔
1😁38😢23💯12❤9🙏4👎2🏆1👻1🦄1
Карьерный буст, робот в подарок и призовой фонд 7 500 000 рублей 🤖
Успей зарегистрироваться до 20 октября.
Все это ждет участников трека «Программирование роботов» на всероссийском ИТ-чемпионате МТС True Tech Champ 2025. Присоединяйся, если пишешь на С++, Go, Python, JS, Java, C# или другом языке.
Соревнования пройдут в командах от 2 до 4 человек в несколько этапов:
— Квалификация. Тебе предстоит запрограммировать робота на прохождение виртуального лабиринта.
— Полуфинал. Ты будешь дистанционно управлять роботом на офлайн-полигоне и наблюдать за его перемещениями в трансляции.
— Финал. За две недели до финала организаторы отправят тебе настоящего робота для кастомизации. Ты сможешь модифицировать его, чтобы он оказался быстрее других в многоуровневом офлайн-лабиринте и смог выбить соперников с платформы в шоу-битве.
Команды финалистов получат по одному роботу Waveshare Cobra Flex в подарок и сразятся за крупные денежные призы: 4 000 000 ₽ за первое место, 2 500 000 ₽ за второе и 1 000 000 ₽ за третье.
Еще ты сможешь:
— Получить практический опыт работы с инструментами, с помощью которых создают домашних и промышленных роботов.
— Прокачать компетенции, которые помогут развиваться в ИТ.
— Заявить о себе на всю Россию и ускорить свой профессиональный рост.
📍 Финал состоится 21 ноября в МТС Live Холл в Москве.
👉🏻 Регистрируйся на сайте до 20 октября.
Успей зарегистрироваться до 20 октября.
Все это ждет участников трека «Программирование роботов» на всероссийском ИТ-чемпионате МТС True Tech Champ 2025. Присоединяйся, если пишешь на С++, Go, Python, JS, Java, C# или другом языке.
Соревнования пройдут в командах от 2 до 4 человек в несколько этапов:
— Квалификация. Тебе предстоит запрограммировать робота на прохождение виртуального лабиринта.
— Полуфинал. Ты будешь дистанционно управлять роботом на офлайн-полигоне и наблюдать за его перемещениями в трансляции.
— Финал. За две недели до финала организаторы отправят тебе настоящего робота для кастомизации. Ты сможешь модифицировать его, чтобы он оказался быстрее других в многоуровневом офлайн-лабиринте и смог выбить соперников с платформы в шоу-битве.
Команды финалистов получат по одному роботу Waveshare Cobra Flex в подарок и сразятся за крупные денежные призы: 4 000 000 ₽ за первое место, 2 500 000 ₽ за второе и 1 000 000 ₽ за третье.
Еще ты сможешь:
— Получить практический опыт работы с инструментами, с помощью которых создают домашних и промышленных роботов.
— Прокачать компетенции, которые помогут развиваться в ИТ.
— Заявить о себе на всю Россию и ускорить свой профессиональный рост.
📍 Финал состоится 21 ноября в МТС Live Холл в Москве.
👉🏻 Регистрируйся на сайте до 20 октября.
👍9❤6🔥4🤡3🫡3👎1🥰1🤮1👌1💯1
Мой боевой набор MCP-серверов для работы с AI
Делюсь инструментами, которые реально меняют подход к разработке с нейросетями. Использую их и в личных проектах, и в связке с агентами вроде Claude Code или Cursor.
Что такое MCP и почему это важно
Model Context Protocol — это протокол, который даёт AI-ассистенту прямой доступ к вашим инструментам: файловой системе, базам данных, git-репозиториям и API. Вместо бесконечного копипаста нейросеть сама читает код, выполняет запросы к БД и коммитит изменения.
Пять серверов, которые я настраиваю в каждом проекте
1. Filesystem — фундамент работы
Зачем нужен: AI получает доступ к файлам проекта — может читать код, анализировать структуру, вносить изменения. Это базовый инструмент, без которого остальное не имеет смысла. Особенно актуальный инструмент в работе с собственными ии-проектами.
Совет: указывайте путь к корню конкретного проекта, а не к домашней директории. Это и безопаснее, и помогает AI сфокусироваться на релевантных файах.
2. Git — версионирование на автопилоте
Зачем нужен: AI может изучать историю коммитов, создавать ветки, делать коммиты. Особенно полезно для code review и анализа того, как менялся код со временем.
Требования: нужен Python и установленный uvx.
3. Postgres — работа с БД без головной боли
Зачем нужен: AI может выполнять SQL-запросы, анализировать схему базы данных, помогать с миграциями. Экономит массу времени на отладке запросов и оптимизации.
Важно:
- Флаг
- Никогда не коммитьте реальные пароли в конфиг — используйте переменные окружения
4. cURL — свобода работы с API
Зачем нужен: AI может делать HTTP-запросы к любым API. Тестирование эндпоинтов, интеграция с внешними сервисами — всё через простое текстовое описание задачи.
5. Context7 — актуальная документация библиотек
Зачем нужен: даёт AI доступ к актуальной документации популярных библиотек и фреймворков. Вместо того чтобы полагаться на устаревшие знания из обучающей выборки, нейросеть получает свежую информацию об API, best practices и изменениях в новых версиях. Особенно критично для быстро развивающихся экосистем вроде React, Next.js или FastAPI.
API-ключ: получить можно на Сontext7
Как это работает в реальной жизни
Мой типичный workflow выглядит так:
1. Filesystem + Git — AI читает код, вносит изменения, коммитит их с осмысленными сообщениями
2. Postgres — проверяю и оптимизирую SQL-запросы, анализирую данные
3. cURL — тестирую API endpoints прямо в диалоге с AI
4. Context7 — AI работает с актуальной документацией библиотек, не галлюцинирует устаревшие методы
Безопасность превыше всего
Несколько правил, которых я строго придерживаюсь:
- Никогда не давайте AI доступ к продакшн-базам данных
- Создавайте отдельного пользователя БД с минимально необходимыми правами
- Храните секреты и пароли в переменных окружения, а не в конфигах
- Всегда ревьюте действия AI, особенно git-коммиты и изменения в БД
Эти пять MCP-серверов покрывают около 90% моих задач при работе с AI в проектах. Настраиваются один раз, работают везде. AI получает все необходимые инструменты для реальной работы — не просто генерации кода, а полноценного участия в разработке.
Какие MCP-серверы используете вы? Поделитесь опытом в комментариях! 👇
Делюсь инструментами, которые реально меняют подход к разработке с нейросетями. Использую их и в личных проектах, и в связке с агентами вроде Claude Code или Cursor.
Что такое MCP и почему это важно
Model Context Protocol — это протокол, который даёт AI-ассистенту прямой доступ к вашим инструментам: файловой системе, базам данных, git-репозиториям и API. Вместо бесконечного копипаста нейросеть сама читает код, выполняет запросы к БД и коммитит изменения.
Пять серверов, которые я настраиваю в каждом проекте
1. Filesystem — фундамент работы
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/путь/к/вашему/проекту"
]
}Зачем нужен: AI получает доступ к файлам проекта — может читать код, анализировать структуру, вносить изменения. Это базовый инструмент, без которого остальное не имеет смысла. Особенно актуальный инструмент в работе с собственными ии-проектами.
Совет: указывайте путь к корню конкретного проекта, а не к домашней директории. Это и безопаснее, и помогает AI сфокусироваться на релевантных файах.
2. Git — версионирование на автопилоте
"git": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-server-git",
"--repository",
"/путь/к/вашему/проекту"
]
}Зачем нужен: AI может изучать историю коммитов, создавать ветки, делать коммиты. Особенно полезно для code review и анализа того, как менялся код со временем.
Требования: нужен Python и установленный uvx.
3. Postgres — работа с БД без головной боли
"postgres": {
"command": "uv",
"args": ["run", "postgres-mcp", "--access-mode=unrestricted"],
"env": {
"DATABASE_URI": "postgresql://user:password@localhost:5432/dbname"
}
}Зачем нужен: AI может выполнять SQL-запросы, анализировать схему базы данных, помогать с миграциями. Экономит массу времени на отладке запросов и оптимизации.
Важно:
- Флаг
--access-mode=unrestricted используйте только в dev-окружении- Никогда не коммитьте реальные пароли в конфиг — используйте переменные окружения
4. cURL — свобода работы с API
"curl": {
"command": "npx",
"args": ["-y", "@mcp-get-community/server-curl"]
}Зачем нужен: AI может делать HTTP-запросы к любым API. Тестирование эндпоинтов, интеграция с внешними сервисами — всё через простое текстовое описание задачи.
5. Context7 — актуальная документация библиотек
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"],
"env": {
"CONTEXT7_API_KEY": "ваш_api_ключ"
}
}Зачем нужен: даёт AI доступ к актуальной документации популярных библиотек и фреймворков. Вместо того чтобы полагаться на устаревшие знания из обучающей выборки, нейросеть получает свежую информацию об API, best practices и изменениях в новых версиях. Особенно критично для быстро развивающихся экосистем вроде React, Next.js или FastAPI.
API-ключ: получить можно на Сontext7
Как это работает в реальной жизни
Мой типичный workflow выглядит так:
1. Filesystem + Git — AI читает код, вносит изменения, коммитит их с осмысленными сообщениями
2. Postgres — проверяю и оптимизирую SQL-запросы, анализирую данные
3. cURL — тестирую API endpoints прямо в диалоге с AI
4. Context7 — AI работает с актуальной документацией библиотек, не галлюцинирует устаревшие методы
Безопасность превыше всего
Несколько правил, которых я строго придерживаюсь:
- Никогда не давайте AI доступ к продакшн-базам данных
- Создавайте отдельного пользователя БД с минимально необходимыми правами
- Храните секреты и пароли в переменных окружения, а не в конфигах
- Всегда ревьюте действия AI, особенно git-коммиты и изменения в БД
Эти пять MCP-серверов покрывают около 90% моих задач при работе с AI в проектах. Настраиваются один раз, работают везде. AI получает все необходимые инструменты для реальной работы — не просто генерации кода, а полноценного участия в разработке.
Какие MCP-серверы используете вы? Поделитесь опытом в комментариях! 👇
2👍55❤18🔥10🎉2🙏1🐳1🏆1😘1
Привет, друзья!
Хочу признаться: последние пару месяцев я немного выпал из привычного ритма. Сначала — работа над крупным государственным проектом, потом отпуск, а затем и небольшая болезнь. В итоге образовалась пауза, и я упустил момент, когда многие из вас активно росли и развивались внутри сообщества.
Но теперь я снова в строю! Уже в эти выходные выйду с новым материалом — и дальше постараюсь не исчезать надолго.
Спасибо, что остаётесь рядом и продолжаете двигаться вперёд❤️
Хочу признаться: последние пару месяцев я немного выпал из привычного ритма. Сначала — работа над крупным государственным проектом, потом отпуск, а затем и небольшая болезнь. В итоге образовалась пауза, и я упустил момент, когда многие из вас активно росли и развивались внутри сообщества.
Но теперь я снова в строю! Уже в эти выходные выйду с новым материалом — и дальше постараюсь не исчезать надолго.
Спасибо, что остаётесь рядом и продолжаете двигаться вперёд
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤77🔥30👍17👏4👌2🤡2😎2🥰1
Лайфхак: обходим CORS через прокси-бэкенд на Python 🐍
Недавно у меня был забавный случай. Работал с фронтендером над одним проектом, и он столкнулся с классической проблемой CORS. Вместо того чтобы разбираться с настройками, он просто поднял свой прокси-сервер на Node.js, который пробрасывает запросы к моему Python API. Проблема решена за 15 минут.
Я подумал — а почему бы не показать, как сделать то же самое на Python? Получится еще быстрее и элегантнее.
Что такое CORS и почему он мешает?
CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера. Он блокирует запросы с одного домена на другой.
Пример: Ваш фронтенд крутится на
Это сделано для защиты пользователей, но в разработке часто создает головную боль.
Решение: прокси-бэкенд
Идея простая: поднимаем свой легкий сервер, который:
1. Принимает запросы от фронта (один и тот же origin — никаких CORS)
2. Пробрасывает их на целевой API
3. Возвращает ответ обратно фронту
Для браузера это обычный запрос на свой сервер. Для API — запрос с бэкенда (где CORS не существует).
Реализация на FastAPI
Запуск:
Теперь ваш фронт делает запросы на
Вариант на Flask (для минималистов)
Когда это полезно?
✅ В разработке — когда нет доступа к настройкам целевого API
✅ Сторонние API — многие публичные API не поддерживают CORS
✅ Дополнительная логика — можно добавить кэширование, логирование, rate limiting
✅ Скрытие API ключей — не светите токены на фронте
✅ Когда хочется прикрутить стороннее API напрямую к своему фронту, а API не позволяет (например API Ozon Seller с недавнего времени)
Вот так простая проблема с CORS решается за 10 минут с помощью Python. А фронтендеры могут спокойно работать дальше, не копаясь в настройках😉
Кстати, если у вас есть интересные кейсы из практики — пишите в комментарии, разберем вместе!
Недавно у меня был забавный случай. Работал с фронтендером над одним проектом, и он столкнулся с классической проблемой CORS. Вместо того чтобы разбираться с настройками, он просто поднял свой прокси-сервер на Node.js, который пробрасывает запросы к моему Python API. Проблема решена за 15 минут.
Я подумал — а почему бы не показать, как сделать то же самое на Python? Получится еще быстрее и элегантнее.
Что такое CORS и почему он мешает?
CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера. Он блокирует запросы с одного домена на другой.
Пример: Ваш фронтенд крутится на
localhost:3000, а API находится на api.example.com. Браузер видит разные origins и блокирует запрос. В консоли вы видите знакомую ошибку:Access to fetch at 'https://api.example.com' from origin 'http://localhost:3000'
has been blocked by CORS policy
Это сделано для защиты пользователей, но в разработке часто создает головную боль.
Решение: прокси-бэкенд
Идея простая: поднимаем свой легкий сервер, который:
1. Принимает запросы от фронта (один и тот же origin — никаких CORS)
2. Пробрасывает их на целевой API
3. Возвращает ответ обратно фронту
Для браузера это обычный запрос на свой сервер. Для API — запрос с бэкенда (где CORS не существует).
Реализация на FastAPI
from fastapi import FastAPI, Request, Response
from fastapi.middleware.cors import CORSMiddleware
import httpx
app = FastAPI()
# Разрешаем CORS для фронта
app.add_middleware(
CORSMiddleware,
allow_origins=["http://localhost:3000"],
allow_methods=["*"],
allow_headers=["*"],
)
TARGET_API = "https://api.example.com"
@app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE", "PATCH"])
async def proxy(path: str, request: Request):
# Формируем URL целевого API
url = f"{TARGET_API}/{path}"
# Получаем тело запроса
body = await request.body()
# Пробрасываем запрос
async with httpx.AsyncClient() as client:
response = await client.request(
method=request.method,
url=url,
headers=dict(request.headers),
content=body,
params=request.query_params
)
# Возвращаем ответ фронту
return Response(
content=response.content,
status_code=response.status_code,
headers=dict(response.headers)
)
Запуск:
pip install fastapi httpx uvicorn
uvicorn main:app --reload --port 8000
Теперь ваш фронт делает запросы на
localhost:8000, а прокси пробрасывает их куда нужно.Вариант на Flask (для минималистов)
from flask import Flask, request, Response
from flask_cors import CORS
import requests
app = Flask(__name__)
CORS(app)
TARGET_API = "https://api.example.com"
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])
def proxy(path):
url = f"{TARGET_API}/{path}"
response = requests.request(
method=request.method,
url=url,
headers={k: v for k, v in request.headers if k != 'Host'},
data=request.get_data(),
params=request.args
)
return Response(
response.content,
status=response.status_code,
headers=dict(response.headers)
)
if __name__ == '__main__':
app.run(port=8000, debug=True)
Когда это полезно?
Вот так простая проблема с CORS решается за 10 минут с помощью Python. А фронтендеры могут спокойно работать дальше, не копаясь в настройках
Кстати, если у вас есть интересные кейсы из практики — пишите в комментарии, разберем вместе!
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥36👍15❤10⚡3🕊1🫡1
Возвращаюсь к практике с LangGraph! 🎯
Многие из вас ждали продолжения серии статей про LangChain и LangGraph — я не забыл о ней, просто последние пару месяцев совсем не было времени на публикации.
Сейчас возвращаюсь, и осталась последняя, самая практическая часть. Долго думал над форматом — хотелось найти что-то реально интересное, не просто очередной RAG-чатбот или скрипт для парсинга новостей.
И вот что решил сделать:
Телеграм-бот с детективной игрой, где вы — следователь, расследующий преступление. Агент на LangGraph генерирует уникальное дело: подозреваемые, улики, алиби, мотивы. Вы осматриваете локации, допрашиваете свидетелей, собираете доказательства. Все это в свободной форме — никаких готовых вариантов ответов, только живое общение с ИИ.
Что интересного покажу:
- ReAct агент в деле — как он логически рассуждает от лица разных персонажей
- Граф состояний — обработка разных типов действий игрока
- Сложный State менеджмент — агент помнит всю картину преступления, показания, улики
- Условную логику — персонажи меняют поведение в зависимости от ваших вопросов и улик
- Интеграцию с Telegram Bot API
Это будет полноценное приложение, которое можно запустить и поиграть. Весь код, естественно, будет в статье.
Готовлю материал, выйдет на следующей неделе. Кто ждал практики — она будет🔥
Многие из вас ждали продолжения серии статей про LangChain и LangGraph — я не забыл о ней, просто последние пару месяцев совсем не было времени на публикации.
Сейчас возвращаюсь, и осталась последняя, самая практическая часть. Долго думал над форматом — хотелось найти что-то реально интересное, не просто очередной RAG-чатбот или скрипт для парсинга новостей.
И вот что решил сделать:
Телеграм-бот с детективной игрой, где вы — следователь, расследующий преступление. Агент на LangGraph генерирует уникальное дело: подозреваемые, улики, алиби, мотивы. Вы осматриваете локации, допрашиваете свидетелей, собираете доказательства. Все это в свободной форме — никаких готовых вариантов ответов, только живое общение с ИИ.
Что интересного покажу:
- ReAct агент в деле — как он логически рассуждает от лица разных персонажей
- Граф состояний — обработка разных типов действий игрока
- Сложный State менеджмент — агент помнит всю картину преступления, показания, улики
- Условную логику — персонажи меняют поведение в зависимости от ваших вопросов и улик
- Интеграцию с Telegram Bot API
Это будет полноценное приложение, которое можно запустить и поиграть. Весь код, естественно, будет в статье.
Готовлю материал, выйдет на следующей неделе. Кто ждал практики — она будет
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥100👍22❤🔥9🤩3☃2💯2🙉1
Многие начинающие разработчики, которые уже пишут свои программы, рано или поздно приходят к понятию деплоя. К сожалению, часто в проектах, в которых нам приходится участвовать, нет DevOps-специалиста, поэтому ответственность за деплой ложится на нас.
Этот пост я хочу посвятить новичкам, у которых вызывает трепет задача запуска приложения на сервере.
Нужно понимать одну важную вещь: в абсолютном большинстве случаев вы будете работать с готовой операционной системой. Обычно это какой-то дистрибутив Linux (часто Ubuntu) или Windows Server, но с одним критическим отличием — там не будет графической оболочки. Мышкой некуда будет нажать.
В остальном же у вас не вызывает трепет взаимодействие с операционной системой, на которой вы работаете, верно? Вот и сервер — это та же самая операционная система, только без GUI. Файлы, процессы, сеть — все это работает точно так же.
Единственное, что меняется — способ взаимодействия. Вместо мышки у вас будет SSH и командная строка. Вместо двойного клика — команды типа python app.py или systemctl start myapp. Это не магия, это просто другой интерфейс для той же самой системы.
Так что не бойтесь серверов. Просто держите крышку открытой 😄
P.S. Рассказать в следующих постах про основные способы запуска Python приложений на VPS-сервере?
Этот пост я хочу посвятить новичкам, у которых вызывает трепет задача запуска приложения на сервере.
Нужно понимать одну важную вещь: в абсолютном большинстве случаев вы будете работать с готовой операционной системой. Обычно это какой-то дистрибутив Linux (часто Ubuntu) или Windows Server, но с одним критическим отличием — там не будет графической оболочки. Мышкой некуда будет нажать.
В остальном же у вас не вызывает трепет взаимодействие с операционной системой, на которой вы работаете, верно? Вот и сервер — это та же самая операционная система, только без GUI. Файлы, процессы, сеть — все это работает точно так же.
Единственное, что меняется — способ взаимодействия. Вместо мышки у вас будет SSH и командная строка. Вместо двойного клика — команды типа python app.py или systemctl start myapp. Это не магия, это просто другой интерфейс для той же самой системы.
Так что не бойтесь серверов. Просто держите крышку открытой 😄
P.S. Рассказать в следующих постах про основные способы запуска Python приложений на VPS-сервере?
👍111❤16❤🔥5🔥5😁4🐳1💯1💋1🙈1
🧩 Одно ядро авторизации и куча микросервисов на FastAPI
Простая и надёжная схема, которую можно масштабировать хоть до бесконечности
Сегодня расскажу, как вокруг одного ядра авторизации можно выстраивать десятки микросервисов — лёгких, быстрых и независимых. Вся магия держится на правильной работе с access и refresh токенами. На самом деле всё гораздо проще, чем кажется.
🔐 Как работает мини-бэкенд (микросервис)
Каждый микросервис получает в запросах заголовок:
И делает всего одну вещь — локально проверяет
- подпись валидна ✔️
-
- формат корректный ✔️
Если всё ок → выполняет свою бизнес-логику.
Если токен умер → просто отдаёт 401 Unauthorized.
Проверку можно делать и через ядро авторизации, но это дольше и имеет смысл только при повышенных требованиях к безопасности.
👉 На этом его роль заканчивается. Микросервис никогда не работает с refresh токенами, не хранит их и не обновляет.
🖥 Что делает фронтенд при ошибке 401
Вот здесь происходит самая приятная магия:
1. Фронт получает 401 → понимает “access токен умер”.
2. Достаёт у себя в хранилище
3. Идёт в Auth Service:
4. Получает свежую пару access + refresh.
5. Сохраняет.
6. Повторяет оригинальный запрос уже с новым access токеном.
7. Микросервис снова проверяет токен → всё работает.
Микросервисы остаются лёгкими, а ядро авторизации — централизованным и контролирующим.
👤 Как выглядит флоу регистрации / авторизации
1. Пользователь вводит почту.
2. Бэк проверяет:
– если пользователя нет → запускается сценарий регистрации (отправляется временный пароль);
– если есть → открывается форма ввода пароля.
3. При успешном входе бэк отдаёт фронту два токена:
-
-
В бою именно фронтенд хранит оба токена. Это важно.
🤝 Взаимодействие микросервисов с ядром
Микросервис:
- видит только
- проверяет его валидность
- при успехе получает из токена базовые данные пользователя
- при провале отдаёт 401
Если приходит новый пользователь — делается хук: микросервис принимает токен + почту и фиксирует у себя пользователя под своим айди. Из токена через валидатор извлекается айди пользователя и происходит фиксация пользователя в своей системе. Ключевая связка тут - свой айди + основной айдишник пользователя.
❓ Частые вопросы
Нужно ли хранить refresh_token в микросервисе?
Нет. Только фронт.
Что делать, если access токен истёк?
Вернуть 401. Фронт сам всё обновит.
Можно ли доверять данным из JWT?
Да, если подпись валидна — данные не были изменены.
🚀 Масштабируемость и лучшие практики
- Такая схема одинаково отлично работает и для веба, и для мобильных приложений.
- Можно добавлять авторизацию через Google / GitHub — механика почти та же: там тоже возвращаются access + refresh токены.
- При желании refresh токен можно убирать в защищённую cookie — это уже уровень “best practices 2.0”.
🔮 Немного про магию QR-кодов
То, что кажется “инопланетной технологией”, например авторизация через QR (как в VK), на самом деле очень просто:
QR-код содержит ссылку с параметрами (токены, коды, состояния).
Фронт её парсит → бэк это фиксирует → выдаются токены.
Никаких чудес — просто длинная URL-строка с зашитыми данными 😄
🧠 Итог
Вся система строится вокруг простого, но мощного принципа:
> Ядро авторизации выдаёт токены.
> Микросервисы проверяют access и ничего больше не знают.
> Фронтенд управляет жизненным циклом токенов.
Именно такая архитектура позволяет легко строить вокруг ядра десятки сервисов, не городя сложные и тяжёлые схемы.
P.S. Рассказать в одном из следующих постов почему refresh token нужно хранить в защищенной кукки сессии и как вообще это работает?
Простая и надёжная схема, которую можно масштабировать хоть до бесконечности
Сегодня расскажу, как вокруг одного ядра авторизации можно выстраивать десятки микросервисов — лёгких, быстрых и независимых. Вся магия держится на правильной работе с access и refresh токенами. На самом деле всё гораздо проще, чем кажется.
🔐 Как работает мини-бэкенд (микросервис)
Каждый микросервис получает в запросах заголовок:
Authorization: Bearer <access_token>
И делает всего одну вещь — локально проверяет
access_token через PyJWT:- подпись валидна ✔️
-
exp не истёк ✔️- формат корректный ✔️
Если всё ок → выполняет свою бизнес-логику.
Если токен умер → просто отдаёт 401 Unauthorized.
Проверку можно делать и через ядро авторизации, но это дольше и имеет смысл только при повышенных требованиях к безопасности.
👉 На этом его роль заканчивается. Микросервис никогда не работает с refresh токенами, не хранит их и не обновляет.
🖥 Что делает фронтенд при ошибке 401
Вот здесь происходит самая приятная магия:
1. Фронт получает 401 → понимает “access токен умер”.
2. Достаёт у себя в хранилище
refresh_token.3. Идёт в Auth Service:
POST /auth/refresh.4. Получает свежую пару access + refresh.
5. Сохраняет.
6. Повторяет оригинальный запрос уже с новым access токеном.
7. Микросервис снова проверяет токен → всё работает.
Микросервисы остаются лёгкими, а ядро авторизации — централизованным и контролирующим.
👤 Как выглядит флоу регистрации / авторизации
1. Пользователь вводит почту.
2. Бэк проверяет:
– если пользователя нет → запускается сценарий регистрации (отправляется временный пароль);
– если есть → открывается форма ввода пароля.
3. При успешном входе бэк отдаёт фронту два токена:
-
access (живёт ~15 минут)-
refresh (живёт, например, 3 дня)В бою именно фронтенд хранит оба токена. Это важно.
🤝 Взаимодействие микросервисов с ядром
Микросервис:
- видит только
access_token- проверяет его валидность
- при успехе получает из токена базовые данные пользователя
- при провале отдаёт 401
Если приходит новый пользователь — делается хук: микросервис принимает токен + почту и фиксирует у себя пользователя под своим айди. Из токена через валидатор извлекается айди пользователя и происходит фиксация пользователя в своей системе. Ключевая связка тут - свой айди + основной айдишник пользователя.
❓ Частые вопросы
Нужно ли хранить refresh_token в микросервисе?
Нет. Только фронт.
Что делать, если access токен истёк?
Вернуть 401. Фронт сам всё обновит.
Можно ли доверять данным из JWT?
Да, если подпись валидна — данные не были изменены.
🚀 Масштабируемость и лучшие практики
- Такая схема одинаково отлично работает и для веба, и для мобильных приложений.
- Можно добавлять авторизацию через Google / GitHub — механика почти та же: там тоже возвращаются access + refresh токены.
- При желании refresh токен можно убирать в защищённую cookie — это уже уровень “best practices 2.0”.
🔮 Немного про магию QR-кодов
То, что кажется “инопланетной технологией”, например авторизация через QR (как в VK), на самом деле очень просто:
QR-код содержит ссылку с параметрами (токены, коды, состояния).
Фронт её парсит → бэк это фиксирует → выдаются токены.
Никаких чудес — просто длинная URL-строка с зашитыми данными 😄
🧠 Итог
Вся система строится вокруг простого, но мощного принципа:
> Ядро авторизации выдаёт токены.
> Микросервисы проверяют access и ничего больше не знают.
> Фронтенд управляет жизненным циклом токенов.
Именно такая архитектура позволяет легко строить вокруг ядра десятки сервисов, не городя сложные и тяжёлые схемы.
P.S. Рассказать в одном из следующих постов почему refresh token нужно хранить в защищенной кукки сессии и как вообще это работает?
1👍69❤12❤🔥5🔥5🎉2😇1🤝1👾1
Как легко создать и накатить дамп базы данных PostgreSQL
Сегодня разберем простую, но важную тему — работа с дампами PostgreSQL. Это нужно для бэкапов, переноса данных между окружениями или клонирования prod в dev.
⚙️ Установка psql
Linux (Ubuntu/Debian):
macOS:
Windows:
1. Скачайте PostgreSQL с https://www.postgresql.org/download/windows/
2. При установке выберите "Command Line Tools"
3. Добавьте в PATH:
Проверка установки (все ОС):
☝️ Важно: версия
💾 Создание дампа (бэкап)
Linux/macOS:
Windows (CMD):
Windows (PowerShell):
Параметры команды:
-
-
-
-
📥 Заливка дампа (восстановление)
Linux/macOS:
Windows (CMD):
Windows (PowerShell):
🐳 Работа с Docker (универсально для всех ОС)
Если PostgreSQL крутится в Docker, команды одинаковые на всех платформах:
Или через docker-compose:
🔐 Лайфхак: файл для автоматической аутентификации
Linux/macOS:
Windows:
Создайте файл
Теперь команды работают без пароля на всех платформах!
🛠 Полезные опции pg_dump
⚠️ Типичные ошибки
❌ `pg_dump: error: server version mismatch`
→ Обновите postgresql-client до версии вашего сервера
❌ `psql: FATAL: password authentication failed`
→ Проверьте пароль или используйте PGPASSWORD / pgpass файл
❌ `permission denied`
→ Проверьте права на файл дампа
❌ `command not found` (Windows)
→ Добавьте путь к PostgreSQL в PATH
📝 Резюме
✔️ Установили
✔️ Создаем дамп:
✔️ Накатываем дамп:
✔️ Для Docker используем
✔️ Настраиваем
Просто, быстро, надежно — на любой платформе!🚀
Есть вопросы? Пишите в комментариях👇
Сегодня разберем простую, но важную тему — работа с дампами PostgreSQL. Это нужно для бэкапов, переноса данных между окружениями или клонирования prod в dev.
Linux (Ubuntu/Debian):
sudo apt update
sudo apt install postgresql-client
macOS:
brew install postgresql
Windows:
1. Скачайте PostgreSQL с https://www.postgresql.org/download/windows/
2. При установке выберите "Command Line Tools"
3. Добавьте в PATH:
C:\Program Files\PostgreSQL\16\binПроверка установки (все ОС):
psql --version
psql должна совпадать или быть новее версии вашего PostgreSQL сервера.💾 Создание дампа (бэкап)
Linux/macOS:
# Базовая команда
pg_dump -h localhost -p 5432 -U postgres -d mydb > dump.sql
# Без запроса пароля
PGPASSWORD=your_password pg_dump -h localhost -p 5432 -U postgres -d mydb > dump.sql
# С сжатием (для больших баз)
pg_dump -h localhost -p 5432 -U postgres -d mydb | gzip > dump.sql.gz
Windows (CMD):
REM Базовая команда
pg_dump -h localhost -p 5432 -U postgres -d mydb > dump.sql
REM Без запроса пароля
set PGPASSWORD=your_password
pg_dump -h localhost -p 5432 -U postgres -d mydb > dump.sql
Windows (PowerShell):
# Без запроса пароля
$env:PGPASSWORD="your_password"
pg_dump -h localhost -p 5432 -U postgres -d mydb > dump.sql
Параметры команды:
-
-h — хост (localhost или IP сервера)-
-p — порт (по умолчанию 5432)-
-U — пользователь-
-d — название базы данных📥 Заливка дампа (восстановление)
Linux/macOS:
# Из обычного дампа
psql -h localhost -p 5432 -U postgres -d mydb -f dump.sql
# Без запроса пароля
PGPASSWORD=your_password psql -h localhost -p 5432 -U postgres -d mydb -f dump.sql
# Из сжатого дампа
gunzip < dump.sql.gz | psql -h localhost -p 5432 -U postgres -d mydb
Windows (CMD):
REM Из обычного дампа
set PGPASSWORD=your_password
psql -h localhost -p 5432 -U postgres -d mydb -f dump.sql
Windows (PowerShell):
$env:PGPASSWORD="your_password"
psql -h localhost -p 5432 -U postgres -d mydb -f dump.sql
Если PostgreSQL крутится в Docker, команды одинаковые на всех платформах:
# Создание дампа
docker exec -t postgres_container pg_dump -U postgres -d mydb > dump.sql
# Заливка дампа
docker exec -i postgres_container psql -U postgres -d mydb < dump.sql
Или через docker-compose:
# Создание
docker-compose exec -T db pg_dump -U postgres -d mydb > dump.sql
# Заливка
docker-compose exec -T db psql -U postgres -d mydb < dump.sql
🔐 Лайфхак: файл для автоматической аутентификации
Linux/macOS:
# Создаем файл
nano ~/.pgpass
# Добавляем строку (формат: host:port:database:username:password)
localhost:5432:*:postgres:your_password
# Ставим права
chmod 600 ~/.pgpass
Windows:
Создайте файл
%APPDATA%\postgresql\pgpass.conf со строкой:localhost:5432:*:postgres:your_password
Теперь команды работают без пароля на всех платформах!
🛠 Полезные опции pg_dump
# Только структура (без данных)
pg_dump -s -h localhost -U postgres -d mydb > schema.sql
# Только данные (без структуры)
pg_dump -a -h localhost -U postgres -d mydb > data.sql
# Конкретная таблица
pg_dump -t users -h localhost -U postgres -d mydb > users.sql
# Исключить таблицу
pg_dump --exclude-table=logs -h localhost -U postgres -d mydb > dump.sql
# Verbose режим (показывает процесс)
pg_dump -v -h localhost -U postgres -d mydb > dump.sql
⚠️ Типичные ошибки
❌ `pg_dump: error: server version mismatch`
→ Обновите postgresql-client до версии вашего сервера
❌ `psql: FATAL: password authentication failed`
→ Проверьте пароль или используйте PGPASSWORD / pgpass файл
❌ `permission denied`
→ Проверьте права на файл дампа
❌ `command not found` (Windows)
→ Добавьте путь к PostgreSQL в PATH
📝 Резюме
postgresql-client (Linux/Mac) или PostgreSQL Tools (Windows)pg_dump ... > dump.sqlpsql ... -f dump.sqldocker exec (работает везде одинаково).pgpass / pgpass.conf для удобстваПросто, быстро, надежно — на любой платформе!
Есть вопросы? Пишите в комментариях👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥26🔥19❤12🫡2⚡1💋1🙉1
🎯 Как я перегнал 30 ГБ картинок через Google Drive, не имея SSH — и почему Python снова спас день
Иногда жизнь подкидывает нетривиальные задачи. Например: нужно сгенерировать ~100 000 изображений (≈30 ГБ) и доставить их на боевой VPS, до которого… нет прямого SSH-доступа.
VPN поднимать лень, корпоративная сеть всё режет, облачные сториджи не выделены.
Но есть Python, немного смекалки — и Google Drive c 10 ГБ свободного места.
Вот как это было 👇
🔥 Этап 1 — Генерация 100 000 баннеров
Надо было быстро нагенерить огромный массив картинок по CSV.
Pillow +
Локальная машина такую нагрузку просто не вывезла бы — а на удалённой всё прошло гладко.
🔥 Этап 2 — Как перенести 30 ГБ, когда SSH недоступен
И вот тут началось самое интересное.
Что имеем:
❌ прямой SSH заблокирован корпоративной сетью
❌ не хочется поднимать временный VPN/туннель
❌ не хочется разворачивать MinIO, S3 или ещё что-то тяжёлое под одноразовую задачу
✔️ есть Google Drive с 10 ГБ свободного места
✔️ и Python на VPS
Задача — доставить 30 ГБ на VPS, не превышая лимит доступного облака.
💡 Решение — многотомный ZIP + gdown
На Windows-сервере упаковал результаты в многотомный архив WinRAR:
Каждый том ≤10 ГБ — чтобы влазил в Google Drive.
🔥 Этап 3 — Python-скрипт на VPS, который «вытягивает» файлы из Google Drive
На VPS создал виртуальное окружение и установил gdown:
Мини-скрипт
🔥 Этап 4 — Гениальное по простоте: в облаке хранится только ОДИН файл
Дальше пошёл цикл:
1️⃣ заливаю на Google Drive
2️⃣ копирую share-ссылку
3️⃣ на VPS качаю том:
4️⃣ проверяю размер:
5️⃣ удаляю файл из Drive → освобождаю место → загружаю следующий том
Так все части многотомного архива оказываются на VPS, а в облаке в каждый момент времени лежит только один файл.
🔥 Этап 5 — Магия
Когда все тома были скачаны:
Дальше:
Nginx уже раздавал файлы как обычную статику — и вот у меня есть новый распределённый узел с 100 000 изображений, доступный глобально по прямым ссылкам.
⚡️ Итог
Что было нужно?
- Python
- gdown
- WinRAR
- Google Drive
- немного инженерной смекалки
Что получилось?
— 30 ГБ данных ушли на VPS через Drive без SSH, VPN и сложных настройкок
— Всего за один проход
— С полностью автоматизированным мини-скриптом
🎬 Мораль истории
Если у вас есть Python — значит, у вас есть способ решить почти любую инженерную задачу. Даже если корпоративная сеть пытается вам помешать😉
Иногда жизнь подкидывает нетривиальные задачи. Например: нужно сгенерировать ~100 000 изображений (≈30 ГБ) и доставить их на боевой VPS, до которого… нет прямого SSH-доступа.
VPN поднимать лень, корпоративная сеть всё режет, облачные сториджи не выделены.
Но есть Python, немного смекалки — и Google Drive c 10 ГБ свободного места.
Вот как это было 👇
🔥 Этап 1 — Генерация 100 000 баннеров
Надо было быстро нагенерить огромный массив картинок по CSV.
Pillow +
ThreadPoolExecutor → и мощный арендованный сервер выдаёт за ~20 минут набор изображений общим весом около 30 ГБ.Локальная машина такую нагрузку просто не вывезла бы — а на удалённой всё прошло гладко.
🔥 Этап 2 — Как перенести 30 ГБ, когда SSH недоступен
И вот тут началось самое интересное.
Что имеем:
❌ прямой SSH заблокирован корпоративной сетью
❌ не хочется поднимать временный VPN/туннель
❌ не хочется разворачивать MinIO, S3 или ещё что-то тяжёлое под одноразовую задачу
✔️ есть Google Drive с 10 ГБ свободного места
✔️ и Python на VPS
Задача — доставить 30 ГБ на VPS, не превышая лимит доступного облака.
💡 Решение — многотомный ZIP + gdown
На Windows-сервере упаковал результаты в многотомный архив WinRAR:
all_images.z01
all_images.z02
all_images.z03
...
all_images.zip
Каждый том ≤10 ГБ — чтобы влазил в Google Drive.
🔥 Этап 3 — Python-скрипт на VPS, который «вытягивает» файлы из Google Drive
На VPS создал виртуальное окружение и установил gdown:
python -m venv .venv
source .venv/bin/activate
pip install gdown
Мини-скрипт
gdrive_download.py:import sys
import gdown
def main():
if len(sys.argv) != 3:
print("Usage: python gdrive_download.py <share_url> <output_name>")
sys.exit(1)
url = sys.argv[1]
output = sys.argv[2]
gdown.download(url=url, output=output, fuzzy=True)
if __name__ == "__main__":
main()
fuzzy=True позволяет передавать обычную share-ссылку формата:https://drive.google.com/file/d/<ID>/view?usp=sharing
🔥 Этап 4 — Гениальное по простоте: в облаке хранится только ОДИН файл
Дальше пошёл цикл:
1️⃣ заливаю на Google Drive
all_images.z012️⃣ копирую share-ссылку
3️⃣ на VPS качаю том:
python gdrive_download.py "https://drive.google.com/file/d/FILE_ID/view?usp=sharing" all_images.z01
4️⃣ проверяю размер:
ls -lh all_images.z01
5️⃣ удаляю файл из Drive → освобождаю место → загружаю следующий том
Так все части многотомного архива оказываются на VPS, а в облаке в каждый момент времени лежит только один файл.
🔥 Этап 5 — Магия
unzip: один ZIP — вся директорияКогда все тома были скачаны:
unzip all_images.zip
unzip автоматически подтянул все .z0N части и развернул структуру.Дальше:
find extracted_folder -type f -name "*.jpg" -exec mv {} /var/www/photos/ \;Nginx уже раздавал файлы как обычную статику — и вот у меня есть новый распределённый узел с 100 000 изображений, доступный глобально по прямым ссылкам.
⚡️ Итог
Что было нужно?
- Python
- gdown
- WinRAR
- Google Drive
- немного инженерной смекалки
Что получилось?
— 30 ГБ данных ушли на VPS через Drive без SSH, VPN и сложных настройкок
— Всего за один проход
— С полностью автоматизированным мини-скриптом
🎬 Мораль истории
Если у вас есть Python — значит, у вас есть способ решить почти любую инженерную задачу. Даже если корпоративная сеть пытается вам помешать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍10❤8👏3👌2😍2⚡1🤔1🤗1
🐍 Что такое аргументы при запуске Python-скриптов и зачем они вообще нужны?
Когда мы запускаем Python-скрипт, нам часто нужно передать ему какие-то настройки: диапазоны, файлы, коэффициенты, флаги и т. д.
Чтобы не хардкодить всё прямо в коде, Python позволяет передавать параметры снаружи — через аргументы командной строки.
Проще говоря: вместо того чтобы переписывать переменные в
Например:
Такой подход даёт 3 плюса:
1. Гибкость — один и тот же скрипт работает в разных режимах.
2. Удобство — не надо лазить в код ради одного числа.
3. Автоматизация — идеально для cron, CI/CD и массовых операций.
📦 Практический пример
Вот как это делается с помощью библиотеки
Запуск:
Вывод:
Когда мы запускаем Python-скрипт, нам часто нужно передать ему какие-то настройки: диапазоны, файлы, коэффициенты, флаги и т. д.
Чтобы не хардкодить всё прямо в коде, Python позволяет передавать параметры снаружи — через аргументы командной строки.
Проще говоря: вместо того чтобы переписывать переменные в
.py файле, мы даём скрипту команды прямо при запуске.Например:
python script.py --name "Ozon" --delay 5 --enable-log
Такой подход даёт 3 плюса:
1. Гибкость — один и тот же скрипт работает в разных режимах.
2. Удобство — не надо лазить в код ради одного числа.
3. Автоматизация — идеально для cron, CI/CD и массовых операций.
📦 Практический пример
Вот как это делается с помощью библиотеки
argparse:import argparse
def parse_arguments():
parser = argparse.ArgumentParser(
description="Пример использования аргументов"
)
parser.add_argument(
"--start",
type=int,
required=True,
help="Начальный индекс"
)
parser.add_argument(
"--end",
type=int,
required=True,
help="Конечный индекс"
)
parser.add_argument(
"--markup",
type=float,
default=10.0,
help="Процент наценки"
)
return parser.parse_args()
if __name__ == "__main__":
args = parse_arguments()
print(f"Обрабатываю товары от {args.start} до {args.end} с наценкой {args.markup}%")
Запуск:
python update_prices.py --start 0 --end 17 --markup 15
Вывод:
Обрабатываю товары от 0 до 17 с наценкой 15%
👍28❤7🔥4🎉2👎1🐳1👨💻1🎃1