TL;DR: Vercel, Netlify, Cloudflare Pages — всё заблокировано или нестабильно из РФ. Российские альтернативы (Sweb, Beget, TimeWeb) — от 300₽/мес за то, что по сути — файлы в бакете. Оказалось, что Яндекс Cloud раздаёт Object Storage, DNS, SSL, Cloud Functions и аналитику бесплатно. Вся миграция заняла один день: настройка инфраструктуры — один промпт в Claude Code, 15 минут (плюс 6 часов ожидания DNS). Чтобы не читать 50 страниц документации, собрал два скилла для Claude Code — теперь он сам управляет инфраструктурой и аналитикой через yc CLI и Metrika API.
Проблема: сайт из России не открывается
Лендинг на Next.js 16, деплой на Vercel. Из Европы — летает. Из России — лотерея: то грузится за 3 секунды, то не грузится вообще. Vercel, Netlify, Cloudflare Pages — все хостят на зарубежных CDN, и доступ из РФ то есть, то нет.
Для сайта, который должен привлекать российских клиентов, это неприемлемо. Начал искать альтернативы.
Российские хостинги: дорого за простое
Первым делом — очевидные варианты:
Хостинг |
Минимальный тариф |
Что получаешь |
|---|---|---|
Sweb |
~300₽/мес |
Shared hosting, PHP, ограниченный SSD |
Beget |
~200₽/мес |
Shared hosting, панель управления |
TimeWeb |
~180₽/мес |
VPS с 1 vCPU |
REG.RU VPS |
~400₽/мес |
1 vCPU, 1GB RAM |
Для статического сайта (HTML/CSS/JS после npm run build) это всё избыточно. Не нужен PHP, не нужен vCPU, не нужна база данных. Нужен бакет с файлами и DNS.
Яндекс Cloud: бесплатно и по-взрослому
Начал копать Яндекс Cloud. Оказалось, что free tier покрывает всё, что нужно для статического сайта:
Ресурс |
Free tier |
|---|---|
Object Storage |
1 ГБ (сайт — ~15 МБ) |
Cloud Functions |
1 млн вызовов/мес |
DNS |
Бесплатно |
Certificate Manager (Let's Encrypt) |
Бесплатно |
API Gateway |
100К запросов/мес |
Итого: 0 ₽/мес. Единственная платёжка — домен (~800₽/год на reg.ru).
Но документация Яндекс Cloud — это 50+ страниц, разбросанных по разным разделам. Бакеты — в одном месте, DNS — в другом, сертификаты — в третьем. Чтобы не гуглить каждый раз, пошёл другим путём.
Скилл для Claude Code: Яндекс Cloud
Вместо того чтобы каждый раз искать нужную команду yc, собрал всю документацию в один скилл для Claude Code. Теперь вместо "открой docs.yandex.cloud → найди раздел Object Storage → скопируй пример curl → адаптируй" — говорю Claude Code что нужно, и он формирует правильные команды сам.
Что покрывает скилл:
Yandex Cloud Skill ├── Установка и аутентификация yc CLI ├── Object Storage │ ├── Создание бакетов, загрузка файлов │ ├── Настройка статического хостинга │ ├── ACL, presigned URLs, tagging │ └── MIME-типы (подводный камень — ниже) ├── DNS │ ├── Создание зон, ANAME/CNAME записи │ └── Миграция NS-серверов ├── Certificate Manager │ └── Let's Encrypt сертификаты (автообновление) ├── Cloud Functions (serverless) ├── IAM (сервис-аккаунты, роли, ключи) ├── Compute, VPC, Kubernetes, CDN... └── 30+ групп сервисов — полная справка
Пример: нужно создать бакет для статического сайта с HTTPS.
Без скилла — 4 страницы документации, 12 команд, 30 минут.
Со скиллом — одна фраза: "создай бакет vexai.ru для статического сайта с Let's Encrypt сертификатом и DNS". Claude Code сам выполняет:
yc storage bucket create --name vexai.ruВключает статический хостинг с
index.htmlи404.htmlСоздаёт DNS-зону и записи
Запрашивает сертификат через Certificate Manager
Генерирует сервис-аккаунт с ролью
storage.editorСоздаёт статические ключи для деплоя
Всё это реально произошло за один промпт. Без скилла Claude Code не знает специфику yc CLI — с ним знает каждую команду и каждый флаг.
Скилл для Claude Code: Яндекс Метрика
Вторая проблема: аналитика. Метрику подключить просто, но чтобы реально ей пользоваться — нужно знать API. У Метрики три отдельных API:
Management API — счётчики, цели, фильтры
Reporting API — отчёты, метрики, сегменты
Logs API — сырые данные по хитам и визитам
Второй скилл собирает всё это в одном месте:
Yandex Metrika Skill ├── Аутентификация (OAuth) ├── Management API │ ├── Счётчики (CRUD) │ ├── Цели (12 типов: URL, JS-event, телефон, email, чат...) │ ├── Фильтры и гранты │ └── Сегменты ├── Reporting API │ ├── Метрики (визиты, юзеры, отказы, глубина, время) │ ├── Измерения (источники, география, устройства, UTM) │ ├── Готовые пресеты отчётов │ └── Сравнение сегментов ├── Logs API (сырые данные) ├── JavaScript API │ ├── Отслеживание целей │ ├── SPA-навигация │ └── Параметры визитов └── Интеграция с Next.js ├── App Router + usePathname ├── Static export (нюансы) └── Готовый компонент YandexMetrika
Теперь вместо "открой api-metrika.yandex.net → собери curl с правильными параметрами" — говорю: "покажи визиты за последнюю неделю по источникам" или "создай цель на клик по кнопке Telegram". Claude Code формирует правильный API-запрос и выполняет его.
Как прошла миграция
Вся настройка инфраструктуры — от первого yc init до работающего сайта с HTTPS — делалась через Claude Code с этими скиллами. Вот реальная хронология:
Этап 1: Next.js → статический экспорт (5 минут)
Три строчки в next.config.ts:
const nextConfig: NextConfig = { output: "export", trailingSlash: true, images: { unoptimized: true }, };
Этап 2: Яндекс Cloud инфраструктура (через Claude Code + скилл)
Claude Code создал бакет, DNS-зону, сертификат, сервис-аккаунт — последовательно, правильными командами, с правильными ролями. Единственное место, где пришлось ждать — DNS-пропагация (~6 часов после смены NS на reg.ru).
Этап 3: Деплой-скрипт + Метрика + Вебмастер
Интеграция Метрики в Next.js — через клиентский компонент:
"use client"; import Script from "next/script"; export function YandexMetrika() { return ( <Script id="yandex-metrika" strategy="afterInteractive"> {` (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){ (m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); k=e.createElement(t);a=e.getElementsByTagName(t)[0]; k.async=1;k.src=r;a.parentNode.insertBefore(k,a) })(window,document,"script", "https://mc.yandex.ru/metrika/tag.js","ym"); ym(COUNTER_ID,"init",{ webvisor: true, clickmap: true, accurateTrackBounce: true, trackLinks: true }); `} </Script> ); }
Вебвизор (запись сессий), тепловые карты, точный расчёт отказов — всё бесплатно и из коробки.
Этап 4: Яндекс Вебмастер через API
Вебмастер можно настроить через UI, но интереснее через API — тем более что Claude Code уже знает OAuth-токен из Метрики.
Получаем user ID и список хостов:
curl -s -H "Authorization: OAuth $YM_TOKEN" \ "https://api.webmaster.yandex.net/v4/user" # → {"user_id": <YOUR_USER_ID>} curl -s -H "Authorization: OAuth $YM_TOKEN" \ "https://api.webmaster.yandex.net/v4/user/<YOUR_USER_ID>/hosts" # → два хоста: http:vexai.ru:80 и https:vexai.ru:443, оба verified
Добавляем sitemap:
curl -s -X POST \ -H "Authorization: OAuth $YM_TOKEN" \ -H "Content-Type: application/json" \ "https://api.webmaster.yandex.net/v4/user/<YOUR_USER_ID>/hosts/https:vexai.ru:443/user-added-sitemaps" \ -d '{"url": "https://vexai.ru/sitemap.xml"}' # → {"sitemap_id": "<id>"}
Отправляем все страницы на переобход:
for url in "https://vexai.ru/" "https://vexai.ru/blog/" \ "https://vexai.ru/blog/marketplace-ai-agent/" \ "https://vexai.ru/blog/rossijskie-ai-servisy-podvodnye-kamni/"; do curl -s -X POST \ -H "Authorization: OAuth $YM_TOKEN" \ -H "Content-Type: application/json" \ "https://api.webmaster.yandex.net/v4/user/USER_ID/hosts/https:vexai.ru:443/recrawl/queue" \ -d "{\"url\": \"$url\"}" done # Все 4 заявки обработаны, квота: 146/150
Итого: sitemap добавлен, все страницы в очереди на индексацию — без единого клика в интерфейсе Вебмастера.
Этап 5: Telegram-бот на Cloud Functions (бонус)
Заодно поднял Telegram-бота для сбора заявок — Python 3.12, Yandex Cloud Functions, Object Storage для состояний. Стоимость: 0₽ (free tier — 1 млн вызовов).
Подводный камень
MIME-типы в Object Storage [Критичность: высокая]
Яндекс Object Storage не определяет MIME-типы автоматически при загрузке через yc storage s3 cp. Результат: CSS грузится как application/octet-stream, браузер его игнорирует, сайт — белый экран.
Claude Code написал деплой-скрипт с явным маппингом:
upload() { local file="$1" local content_type="" case "$file" in *.html) content_type="text/html; charset=utf-8" ;; *.css) content_type="text/css; charset=utf-8" ;; *.js) content_type="application/javascript; charset=utf-8" ;; *.svg) content_type="image/svg+xml" ;; *.woff2) content_type="font/woff2" ;; *) content_type="application/octet-stream" ;; esac yc storage s3 cp "$file" "s3://${BUCKET}/$key" \ --content-type "$content_type" --quiet }
Без --content-type на каждый файл — сайт не работает. Нигде толком не описано в документации Object Storage.
Итого
Было (Vercel + зарубежные CDN) |
Стало (Яндекс Cloud) |
|
|---|---|---|
Доступность из РФ |
Нестабильно |
Стабильно |
Стоимость |
$0 (free tier) |
0 ₽ (free tier) |
SSL |
Автоматический |
Let's Encrypt (автообновление) |
Аналитика |
PostHog |
Яндекс Метрика (бесплатно) |
Serverless |
Vercel Functions |
Cloud Functions (1М вызовов бесплатно) |
Время деплоя |
|
|
Preview по PR |
Есть |
Нет |
Единственное, чего не хватает — preview-деплоев по PR, как в Vercel. Но для одного разработчика localhost:3000 хватает.
Скиллы — ключевая часть. Без них каждый шаг — это поход в документацию. С ними — Claude Code сам знает, какие yc-команды выполнить и какие API-запросы отправить в Метрику. Если работаешь с Claude Code и российской инфраструктурой — имеет смысл один раз собрать документацию в скилл и дальше не думать.
Vilos
Очень грустно читать об изоляции...слезы свободы просто текут по щекам....а самое грустное что это НЕ мир от нас отгородился, это наши люди своими собственными руками возвели стену что бы не смотрели "как там у них"....интересно вот как сами эти чиновники живут без ютуба, телеграма, вотсапа? Тремя буквами пользуются?
iamkisly
Наброс засчитан
/s
Vilos
Вот я не поленился и посмотрел, где вы живете. Окей, Краснодарский край - значит все "прелести" изоляции страны должны ощущать на своей шкуре.
Смотрим дальше... интересы и хабы на которые вы подписаны: .NET,Microsoft SQL, ASP.NET, WEB API,.NET Core, ASP.NET, Базы данных, C#, Google API, Microsoft SQL Server
Так вот с вашим сарказмом, вы в серьез считаете что вас не затронет проблема изоляции? Про добрую половину ваших интересов можете забыть...
Не в "набросе" дело - целому государству предстоит деградация в сфере высоких технологий, и не только; и от этого мучительно горько и печально.