[{"data":1,"prerenderedAt":257},["ShallowReactive",2],{"\u002Fblog\u002Fsub-store-cloudflare\u002F:ru":3,"\u002Fblog\u002Fsub-store-cloudflare\u002F-surround:ru":152,"blog-all-posts:ru":153},{"id":4,"title":5,"author":6,"body":10,"date":135,"description":136,"extension":137,"image":138,"locale":139,"meta":140,"minRead":141,"navigation":142,"original":142,"path":143,"pinned":144,"seo":145,"source":138,"sourceUrl":138,"stem":146,"tags":147,"updated":138,"__hash__":151},"blog\u002Fblog\u002Fsub-store-cloudflare.ru.md","Я перенёс агрегацию прокси-подписок на Cloudflare",{"name":7,"avatar":8},"Chen Dahuang",{"src":9,"alt":7},"\u002Favatar.jpg",{"type":11,"value":12,"toc":127},"minimark",[13,17,28,33,36,39,52,55,58,62,65,86,89,93,96,99,107,114,118,121,124],[14,15,16],"p",{},"Я пользуюсь прокси-сервисами уже три-четыре года, а в какие-то моменты поднимал и собственные VPS-ноды. Всегда была одна занудная штука: три-пять подписок плюс несколько своих боксов разбросаны по клиенту, добавляешь их по одной, а правила маршрутизации приходится настраивать заново в каждом клиенте. Новое устройство, новый клиент или настройка кому-то из семьи — и ты прогоняешь весь ритуал снова.",[14,18,19,20,27],{},"Потом я подумал: незачем держать подписки по отдельности внутри клиентов. Собери их в одну ссылку, задай правила на стороне сервера — и пусть клиент просто подписывается. Чисто. Подход Sub-Store я использовал и раньше, но он крутится на собственном сервере, и уход за ним меня тяготил. Поэтому в этот раз я написал свою версию на Cloudflare — sub-store-cloudflare, открыл код на ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fgithub.com\u002Frealchendahuang\u002Fsub-store-cloudflare",[25],"nofollow","GitHub",".",[29,30,32],"h2",{"id":31},"она-на-самом-деле-делает-одну-вещь","Она на самом деле делает одну вещь",[14,34,35],{},"Смешивает несколько источников подписок в одну подписку.",[14,37,38],{},"Конкретно можно бросить внутрь пару вещей:",[40,41,42,46,49],"ul",{},[43,44,45],"li",{},"Ссылки на подписки от нескольких прокси-сервисов",[43,47,48],{},"Текст нод с твоего VPS (vless, trojan, ss, vmess — всё подходит)",[43,50,51],{},"Даже вставить временный кусок нод",[14,53,54],{},"Попав внутрь, Worker забирает их и дедуплицирует, фильтрует по заданным тобой правилам, а затем по необходимости переименовывает, добавляет флаги и резолвит домены. Всё выходит слитым в одну комбинированную подписку — клиент подписывается на эту единственную ссылку, и готово.",[14,56,57],{},"Правила живут на стороне сервера. В комплекте идут несколько распространённых шаблонов Mihomo — acl4ssr, белый\u002Fчёрный список Loyalsoldier, ai-streaming и тому подобное — с группами маршрутизации и наборами правил, настроенными в облаке. Кормишь подписку клиентам вроде mihomo\u002Fclash, surge, sing-box, shadowrocket — и скачивается уже готовая подписка со встроенными правилами маршрутизации: никакого ручного написания правил или поддержки URL набора правил на той стороне.",[29,59,61],{"id":60},"почему-именно-cloudflare","Почему именно Cloudflare",[14,63,64],{},"Причины прагматичные:",[40,66,67,74,80],{},[43,68,69,73],{},[70,71,72],"strong",{},"Без сервера."," Workers + D1, и бесплатной квоты хватает на личное использование — экономишь и деньги на сервер, и его обслуживание.",[43,75,76,79],{},[70,77,78],{},"Сам домен workers.dev — уже за пределами «стены»."," Твой клиент подключается и тянет подписку без проблем — никакой матрёшечной ерунды в духе «сервер за рубежом, но ноде всё равно нужен лестничный трафик, чтобы тянуть свою же подписку».",[43,81,82,85],{},[70,83,84],{},"После деплоя это веб-админка плюс endpoint для скачивания."," Поменял клиент на телефоне — всё равно можешь открыть веб-страницу и изменить конфиг.",[14,87,88],{},"Стек я намеренно держал маленьким: Worker + Static Assets + D1 + Worker Secrets. KV, R2, Durable Objects, Queue, Cron — всё это вне критического пути, чем меньше, тем лучше.",[29,90,92],{"id":91},"два-пути-развёртывания-осознанно","Два пути развёртывания — осознанно",[14,94,95],{},"Первый — для тех, кто просто хочет пользоваться: жми кнопку Deploy to Cloudflare в репозитории. Cloudflare сам тянет репозиторий, создаёт Worker и D1, просит у тебя два токена и по завершении выдаёт ссылку управления с токеном. Пошагово, без командной строки.",[14,97,98],{},"Второй — для меня самого и для тех, кто любит ковыряться: установка в один клик силами AI-агента.",[14,100,101,102,106],{},"В репозитории лежит агентный протокол (AGENTS.md + SKILL внутри агента). Ты вписываешь свои источники подписок, нужные комбинированные подписки и шаблоны правил в локальный конфиг-файл, запускаешь ",[103,104,105],"code",{},"pnpm run install:cloudflare"," — и агент проверяет твой логин в Cloudflare, создаёт базу, записывает секреты, мигрирует, деплоит, импортирует конфиг, верифицирует ссылки и в конце отдаёт тебе ссылку управления и ссылку для скачивания.",[14,108,109,110,113],{},"Свой собственный сервис я развернул именно так, поэтому рекомендую этот путь — меньше возни. При работе с Codex \u002F Claude Code просто скопируй промпт из ",[103,111,112],{},"agent\u002Finstall.prompt.md"," в репозитории.",[29,115,117],{"id":116},"для-кого-это","Для кого это",[14,119,120],{},"Если честно: если у тебя больше одного прокси-сервиса, плюс пара своих нод, и ты хочешь слить их в одну подписку для собственного пользования — это твой проект. Если тебе спокойно живётся с одним сервисом — тебе это реально не нужно.",[14,122,123],{},"Код полностью open source, AGPL. Фронтенд повторяет замысел оригинального Sub-Store; оригинал живёт в контейнере и покрывает более широкую экосистему клиентов. Моя версия — более стройная Cloudflare-native форма: проще изменять и деплоить напрямую, а не построчный клон.",[14,125,126],{},"Заинтересованные могут полистать репозиторий — README довольно полный, следуй шагам развёртывания.",{"title":128,"searchDepth":129,"depth":129,"links":130},"",2,[131,132,133,134],{"id":31,"depth":129,"text":32},{"id":60,"depth":129,"text":61},{"id":91,"depth":129,"text":92},{"id":116,"depth":129,"text":117},"2026-06-28","Объединяет несколько прокси-сервисов и собственные ноды в одну подписку, а правила маршрутизации настраиваются на стороне сервера — клиенту остаётся только подписаться.","md",null,"ru",{},4,true,"\u002Fblog\u002Fsub-store-cloudflare",false,{"title":5,"description":136},"blog\u002Fsub-store-cloudflare.ru",[148,149,150],"Cloudflare","Обход блокировок","Open-source проект","6KSBvAWbNgux6-VtlyClCSewxUEgs-DxQHUKF8p4wXQ",[138,138],[154,163,171,180,187,195,202,210,218,224,231,233,240,248],{"path":155,"title":156,"description":157,"date":158,"minRead":159,"tags":160},"\u002Fblog\u002Fagent-harness-selection","Помучившись с Pi Agent, OMP, Codex и ZCode: почему я в итоге выбрал OpenCode + OpenChamber","Ретроспектива выбора Agent Harness: три критерия — GUI-опыт, привязка к вендору и свобода доработки — отсеяли Pi Agent, OMP, Codex и ZCode, и в итоге я остановился на ядре OpenCode + интерфейсе OpenChamber.","2026-08-06",6,[161,162],"AI Agent","Выбор инструментов",{"path":164,"title":165,"description":166,"date":167,"minRead":159,"tags":168},"\u002Fblog\u002Fcloudflare-broke-stack","Лучшие практики инди-разработки 2026: „нищебродский“ стек Cloudflare „всё в одном“","Технологический стек инди-разработчика с нулевой стоимостью: код пишет Codex, версиями управляет GitHub, платежи принимает Stripe, фронтенд на TanStack Start, бэкенд на Hono + Workers, база данных D1, хранилище R2, кэш KV — и всё это крутится на Cloudflare.","2026-06-15",[148,169,170],"Инди-разработка","Технологический стек",{"path":172,"title":173,"description":174,"date":175,"minRead":159,"tags":176},"\u002Fblog\u002Fdeepseek-api-web-search","В API DeepSeek встроен веб-поиск — официальный поиск на халяву через Responses API","DeepSeek встроил веб-поиск прямо в API: вызываешь deepseek-v4-flash через интерфейс Responses и объявляешь инструмент web_search. Никакой интеграции со сторонним поисковиком, никакого ключа поискового API не нужно.","2026-08-05",[177,178,179],"DeepSeek","API","AI-инструменты",{"path":181,"title":182,"description":183,"date":175,"minRead":184,"tags":185},"\u002Fblog\u002Fdeepseek-v4-flash-review","DeepSeek V4 Flash — стабильный релиз, проверка на практике: дёшево, быстро, контекст 1M, встроенный поиск","Несколько дней погружался в стабильный релиз DeepSeek V4 Flash: невероятно дёшево, молниеносно быстро, контекст 1M, официальный встроенный веб-поиск, полностью открытый код. Единственная слабость — мультимодальность, но её можно закрыть связкой с другими моделями.",7,[177,186,179],"Обзор модели",{"path":188,"title":189,"description":190,"date":167,"minRead":191,"tags":192},"\u002Fblog\u002Ffree-cloudflare","Как бесплатным пользователям выжать Cloudflare досуха — на что реально хватает бесплатного тарифа?","Бесплатного тарифа Cloudflare хватает почти на всю личную интернет-инфраструктуру: DNS, CDN, Pages, Workers, KV, D1, R2, почта, Tunnel, AI Gateway и не только.",8,[148,193,194],"Бесплатный тариф","Деплой",{"path":196,"title":197,"description":198,"date":199,"minRead":191,"tags":200},"\u002Fblog\u002Fmodel-harness-decoupling","Собственный Harness производителя — не всегда лучший выбор: в эпоху открытых моделей модель и Harness выбирают раздельно","Пишешь на Claude — берёшь Claude Code? В эпоху открытых моделей этот инстинкт пора обновить. Преимущество первого производителя реально, но обучить хорошую модель и построить хороший Harness — две разные инженерные задачи. Эта статья объясняет, почему модель и Harness теперь можно выбирать по отдельности, и даёт карту позиционирования пяти Harness.","2026-09-09",[161,201,162],"Harness",{"path":203,"title":204,"description":205,"date":199,"minRead":191,"tags":206},"\u002Fblog\u002Fopencode-productive-stack","Стабильно, быстро, продуктивно, дёшево: полный отчёт по моему AI Coding-стеку","OpenCode + OpenChamber + две подписки DeepSeek V4 Flash: 15 проектов одновременно пишут код, а квота почти не двигается. Полная выкладка конфигурации — обрезка Context, многоуровневая память, автоматизация рабочего стола и урок «держись родной связки».",[207,208,209],"OpenCode","ИИ-программирование","Настройка",{"path":211,"title":212,"description":213,"date":214,"minRead":215,"tags":216},"\u002Fblog\u002Fproduct-faxin-principle","Принцип изначального намерения: почему инди-разработчику нужно учиться отпускать","Зачем ты начинаешь? Для кого ты начинаешь? Какую проблему на самом деле хочешь решить? Острота продукта — в том, что ты осмеливаешься отрезать.","2026-06-20",10,[217,169],"Продуктовое мышление",{"path":219,"title":220,"description":221,"date":214,"minRead":191,"tags":222},"\u002Fblog\u002Fproduct-pain-vs-itch","Не обольщайся, когда пользователи говорят «круто»: болевые точки против зуда","Словесное одобрение ничего не стоит. Единственный жёсткий критерий спроса — за что пользователь готов платить.",[217,223],"Оценка спроса",{"path":225,"title":226,"description":227,"date":158,"minRead":228,"tags":229},"\u002Fblog\u002Fqwen-vision-for-deepseek","Даём DeepSeek мультимодальность: подход Qwen-3.7-Flash vision","У DeepSeek V4 Flash нет мультимодальности — что делать с пониманием изображений? После обзора рынка самый выгодный по цене вариант сейчас — Qwen-3.7-Flash: распознавание одной картинки стоит почти ничего, и в паре с V4 Flash дыра закрывается.",5,[177,230,186],"Мультимодальность",{"path":143,"title":5,"description":136,"date":135,"minRead":141,"tags":232},[148,149,150],{"path":234,"title":235,"description":236,"date":199,"minRead":184,"tags":237},"\u002Fblog\u002Ftui-cognitive-bandwidth","TUI убивает вашу когнитивную пропускную способность: «гик-фильтру» в AI Coding пора разбиться","Куча AI Coding Agent наперебой выпускают TUI, заталкивают взаимодействие обратно в терминальную парадигму 80-х и называют это «иммерсивностью» и «уважением к программистам». Эта статья разбирает три механизма, которыми TUI системно снижает когнитивную пропускную способность, — и объясняет, почему Web UI — правильный ответ.",[208,238,239],"Дизайн взаимодействия","Эссе",{"path":241,"title":242,"description":243,"date":244,"minRead":159,"tags":245},"\u002Fblog\u002Fvalue-not-external","Спорить о том, есть ли у чего-то ценность, — само по себе бесполезно","Нашу ценность не определяет никто. В эпоху ИИ как человеку понимать себя?","2026-06-18",[246,247],"Размышления об ИИ","Гуманистическое эссе",{"path":249,"title":250,"description":251,"date":252,"minRead":253,"tags":254},"\u002Fblog\u002Fx-growth-1000-followers","Набрал 1000+ подписчиков чуть больше чем за день — вот что я делал","В июне я всерьёз занялся своим аккаунтом в X и за чуть более чем день набрал 1000+ подписчиков. Этот пост фиксирует, что я делал и какие получал отклики.","2026-06-16",12,[255,256],"Ведение X","Рост контента",1789752316630]