Деплой из GitHub Actions и GitLab CI за три строки
Если сборка уже идёт в вашем CI, отдельный хостинговый пайплайн не нужен — хватает одной
строки после npm run build:
npx @tuqo/cli deploy ./dist --site $TUQO_SITE_ID --wait
Ключ лежит в секрете TUQO_API_KEY, идентификатор сайта — в переменной. Всё остальное
CLI делает сам: считает sha256 каждого файла, спрашивает у сервера, каких блобов ещё нет,
догружает только недостающие и публикует новую версию. Повторный деплой того же сайта
почти мгновенный — правка текста не гоняет фотографии заново.
Шаг 1. Ключ с правами editor
Панель → проект → «API-ключи» → создать ключ. Для деплоя достаточно уровня
editor (readonly не публикует, full нужен только для управления проектом). Открытый
ключ вида tqk_<prefix>_<secret> показывается один раз — скопируйте его сразу,
потом останется только перевыпуск.

Идентификатор сайта (site_id) виден на странице сайта в панели; его же возвращают
whoami и create_site в API.
Шаг 2. Секреты в репозитории
GitHub: Settings → Secrets and variables → Actions → New repository secret →
TUQO_API_KEY. Идентификатор сайта секретить незачем — заведите его на вкладке
Variables как TUQO_SITE_ID.
GitLab: Settings → CI/CD → Variables → Add variable. Ключу поставьте галочки Masked и Protected, чтобы он не попал в логи задания и не был виден в MR из форков.
Ключ в репозитории хранить нельзя. Если вы пользуетесь мультисайтовым tuqo.json, CLI
специально проверяет файл и откажется работать, увидев в нём поле key.
Шаг 3. GitHub Actions
name: Deploy to Tuqo
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npm ci && npm run build
- run: npx @tuqo/cli deploy ./dist --site ${{ vars.TUQO_SITE_ID }} --wait
env:
TUQO_API_KEY: ${{ secrets.TUQO_API_KEY }}
Шаг 3 (вариант). GitLab CI
deploy:
image: node:20
stage: deploy
only: [main]
script:
- npm ci && npm run build
- npx @tuqo/cli deploy ./dist --site "$TUQO_SITE_ID" --wait
# TUQO_API_KEY и TUQO_SITE_ID — в Settings → CI/CD → Variables (ключ — masked)
Флаг --wait дожидается публикации и печатает боевой адрес второй строкой, а при
неудаче возвращает exit 1 — задание в CI покраснеет, а не проскочит «зелёным» с
непубликованной версией. Логи и прогресс идут в stderr, поэтому stdout можно смело
подставлять в переменные:
URL=$(npx @tuqo/cli deploy ./dist --site "$TUQO_SITE_ID" --wait | tail -n1)
echo "Опубликовано: $URL"
Превью на pull request: —no-activate
Флаг --no-activate собирает версию, но не ставит её на боевой адрес — посетители
продолжают видеть прежнюю. На такую сборку выдаётся секретная ссылка, её удобно оставлять
комментарием к PR:
name: Preview
on: pull_request
jobs:
preview:
runs-on: ubuntu-latest
env:
TUQO_API_KEY: ${{ secrets.TUQO_API_KEY }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npm ci && npm run build
- id: dep
run: |
D=$(npx @tuqo/cli deploy ./dist --site ${{ vars.TUQO_SITE_ID }} --no-activate)
echo "url=$(npx @tuqo/cli preview "$D")" >> "$GITHUB_OUTPUT"
- run: echo "Превью — ${{ steps.dep.outputs.url }}"
Команда preview идемпотентна: повторный вызов вернёт ту же ссылку. Понравилось —
публикуете npx @tuqo/cli promote <deploy_id>; та же команда откатывает сайт на любую
хранимую версию. Ссылка предпросмотра не спрашивает пароль, даже если сайт закрыт, —
давайте её только тем, кому доверяете, а выключить можно в панели. Возможность доступна
с тарифа «Старт» (590 ₽/мес), подробности — на странице предпросмотра сборки.
Чем это отличается от Git CD
| CLI в вашем CI | Git CD | |
|---|---|---|
| Кто собирает | ваш раннер, ваши шаги | Tuqo: Node 20, npm ci && npm run build |
| Что нужно настроить | YAML + секрет с ключом | привязку репозитория в панели |
| Build-минуты тарифа | не тратятся | тратятся на каждую сборку |
| Тесты, линтеры, кодогенерация | любые | нет, только стандартная сборка |
| Вебхук | не нужен | создаётся автоматически |
Правило простое: нужны свои шаги перед сборкой — CLI из CI. Нужно просто «push → сайт в проде» — Git CD, там ни YAML, ни ключей не требуется. Подробнее — в гайде про автодеплой из Git и CI/CD без GitHub Actions.
Частые вопросы
Нужно ли ставить CLI в образ?
Нет. npx @tuqo/cli скачает пакет при первом запуске; нужен Node.js 18 или новее, сам
пакет — без зависимостей. В GitLab достаточно образа node:20.
Какие лимиты у одного деплоя?
До 2000 файлов и до 50 МБ на файл, суммарно — в пределах квоты хранилища тарифа. В корне
папки должен быть index.html. Файлы уходят поштучно, поэтому лимита на размер тела
запроса нет.
Можно ли выложить несколько сайтов из одного репозитория?
Да: положите в корень tuqo.json с картой каталогов и запускайте npx @tuqo/cli deploy
без аргументов — за один прогон уедут все сайты, по строке на каждый в stdout. Ключ
по-прежнему передавайте переменной окружения.
Сборка упала в CI, а на сайте что?
Ничего не изменилось: пока версия не опубликована, боевой адрес отдаёт предыдущую. При
--wait неуспешный деплой завершает команду кодом 1, так что пайплайн остановится сам.
Все команды и флаги CLI → · Предпросмотр сборки → · Автодеплой из Git →