Тяжёлый сайт с фото: как обновлять без перезаливки
Тяжёлый сайт публикуется не архивом, а по файлам: npx @tuqo/cli deploy ./dist --site <id>
сначала спрашивает у сервера, каких файлов ещё нет, и грузит только их. Поэтому первая
публикация каталога на 300 фотографий идёт долго, а вторая — когда вы поменяли одну цену
в тексте — занимает секунды: ни один снимок повторно не уезжает. Лимита на размер тела
запроса тут нет вовсе, в отличие от загрузки архивом.
Почему архивом не выходит
Архив уходит целиком, даже если поменялась одна строка. Плюс жёсткие потолки:
| Путь публикации | Потолок |
|---|---|
| Папкой в панели | до 2000 файлов, примерно 36 МБ |
Архивом tar.gz/zip в панели | 50 МБ |
deploy_site через MCP или REST | 50 МБ (архив в base64) |
CLI (@tuqo/cli) | до 2000 файлов, до 50 МБ на файл, суммарно — в пределах памяти тарифа |
Сайт фотографа на 400 снимков в 50 МБ не помещается почти никогда. А если помещается — всё равно каждая правка текста гонит десятки мегабайт заново.
Как это устроено
CLI — тонкая обёртка над публичным REST-API манифест-деплоя, три шага:
POST /api/v1/sites/{id}/deploys/check— отправляем список{path, sha256}всех файлов сайта, сервер отвечает, каких блобов у него ещё нет;PUT /api/v1/blobs/{sha256}— загружаем только недостающие файлы, поштучно, сырыми байтами;POST /api/v1/sites/{id}/deploys/manifest— публикуем манифест; готовые блобы копируются в артефакты сайта на стороне хранилища.
Дедуп идёт по sha256 в пределах проекта: одна и та же фотография, встретившаяся в двух сайтах или в двадцатом деплое подряд, хранится и грузится один раз. Байты в память платформы при этом не поднимаются — копирование идёт внутри S3.
Шаг 1. Ключ проекта
Панель → проект → API-ключи → создать. Для деплоя достаточно прав editor. Открытый
ключ вида tqk_<prefix>_<secret> показывается один раз — потом только перевыпуск; в
базе лежит только хеш.

Передавайте ключ переменной окружения TUQO_API_KEY (алиас TUQO_KEY), а не флагом
--key: так он не попадёт в историю шелла и в ps. В tuqo.json ключа быть не должно —
CLI откажется работать, если найдёт его там.
Шаг 2. Деплой
TUQO_API_KEY=tqk_xxx_yyy npx @tuqo/cli deploy ./dist --site <site_id> --wait
Устанавливать ничего не нужно: npx скачает пакет при первом запуске, нужен Node.js 18+.
--wait дождётся публикации и напечатает боевой адрес, а в CI вернёт код 1, если сборка
упала. Полезные флаги и рецепты для GitHub Actions и GitLab CI — на странице CLI.
Хотите показать версию заказчику до публикации — соберите с --no-activate, получите
секретную ссылку командой preview и опубликуйте promote. Боевой адрес до этого момента
показывает прежнюю версию.
Шаг 3. Обновления
Меняете текст, запускаете ту же команду — и CLI снова спрашивает сервер, чего не хватает.
Ответ: «только index.html». Уходит один файл, фотографии остаются на месте. Повторный
деплой без изменений почти мгновенный.
Если сайт правит нейросеть
Агент в браузерном чате не имеет доступа к диску и гонит файлы через свой контекст — для медиа-сайта это дорого и медленно. Два приёма:
get_manifest(site_id)возвращает массив{path, sha256}файлов активной версии. Вdeploy_filesнеизменные файлы передаются ссылкой{path, sha256}— безcontent, то есть байты вообще не идут через контекст модели. Менять надо только те файлы, которые действительно меняются; набор при этом всегда полный, а не патч.- Агент с терминалом (Claude Code, Cursor) публикует тяжёлый сайт той же командой
npx @tuqo/cli deploy: байты читаются с диска и не расходуют токены на base64.
Сколько влезет
Суммарный объём ограничен памятью тарифа: бесплатный — 150 МБ, «Старт» — 1 ГБ, «Профи» — 3 ГБ, «Бизнес» — 7 ГБ, «Масштаб» — 15 ГБ, «Корпоративный» — 45 ГБ. Память можно докупить пакетами от 149 ₽/мес (+500 МБ, +1 ГБ, +3 ГБ, +10 ГБ). Учитывается объём хранимых версий, поэтому на тарифах с несколькими копиями галерея занимает место в нескольких деплоях — регулируется настройкой «Хранить копий» в настройках сайта. Цифры и опции — на странице Тарифы.
Частые вопросы
Чем CLI отличается от загрузки архива?
Архив уходит целиком при любой правке, CLI — только изменившимися файлами. Плюс нет лимита на размер тела запроса: файлы идут поштучно, до 50 МБ каждый.
Нужно ли что-то устанавливать?
Нет, npx @tuqo/cli скачает пакет при первом запуске. Нужен Node.js 18 или новее, пакет
без зависимостей.
Как уменьшить вес сайта?
Уменьшите картинки до реального размера на экране и не вклеивайте их в HTML строкой base64 — такая страница грузится целиком до первой отрисовки и не сжимается. Проверка «Картинки вклеены в HTML» покажет это после публикации, см. все 14 проверок.
А если репозиторий с сайтом уже на GitVerse или GitFlic?
Тогда проще без CLI: подключите Git CD, и Tuqo сам соберёт и опубликует сайт по push. CLI нужен, когда сборка идёт в вашем CI или на вашей машине.