tuqo

Тяжёлый сайт с фото: как обновлять без перезаливки

Тяжёлый сайт публикуется не архивом, а по файлам: npx @tuqo/cli deploy ./dist --site <id> сначала спрашивает у сервера, каких файлов ещё нет, и грузит только их. Поэтому первая публикация каталога на 300 фотографий идёт долго, а вторая — когда вы поменяли одну цену в тексте — занимает секунды: ни один снимок повторно не уезжает. Лимита на размер тела запроса тут нет вовсе, в отличие от загрузки архивом.

Почему архивом не выходит

Архив уходит целиком, даже если поменялась одна строка. Плюс жёсткие потолки:

Путь публикацииПотолок
Папкой в панелидо 2000 файлов, примерно 36 МБ
Архивом tar.gz/zip в панели50 МБ
deploy_site через MCP или REST50 МБ (архив в base64)
CLI (@tuqo/cli)до 2000 файлов, до 50 МБ на файл, суммарно — в пределах памяти тарифа

Сайт фотографа на 400 снимков в 50 МБ не помещается почти никогда. А если помещается — всё равно каждая правка текста гонит десятки мегабайт заново.

Как это устроено

CLI — тонкая обёртка над публичным REST-API манифест-деплоя, три шага:

  1. POST /api/v1/sites/{id}/deploys/check — отправляем список {path, sha256} всех файлов сайта, сервер отвечает, каких блобов у него ещё нет;
  2. PUT /api/v1/blobs/{sha256} — загружаем только недостающие файлы, поштучно, сырыми байтами;
  3. POST /api/v1/sites/{id}/deploys/manifest — публикуем манифест; готовые блобы копируются в артефакты сайта на стороне хранилища.

Дедуп идёт по sha256 в пределах проекта: одна и та же фотография, встретившаяся в двух сайтах или в двадцатом деплое подряд, хранится и грузится один раз. Байты в память платформы при этом не поднимаются — копирование идёт внутри S3.

Шаг 1. Ключ проекта

Панель → проект → API-ключи → создать. Для деплоя достаточно прав editor. Открытый ключ вида tqk_<prefix>_<secret> показывается один раз — потом только перевыпуск; в базе лежит только хеш.

Раздел «API-ключи» проекта: создание ключа и показ его один раз

Передавайте ключ переменной окружения 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 или на вашей машине.

Документация CLI → · Тарифы и объём памяти →