Loading...

Руководство платформы

Source Deploy: как обычная папка становится работающим приложением

Справочник по деплою из папки в cdnctl: архитектура, поля cdnctl.yaml, ограничения и реально встреченные сбои с их решениями.

Вернуться к справке платформы

Архитектура: что происходит после cdnctl deploy

С вашей стороны не участвуют ни git-репозиторий, ни реестр контейнеров. Конвейер таков:

  • cdnctl упаковывает папку проекта в tar.gz (до 128 МБ) и загружает её в панель под вашим аккаунтом.
  • Панель выдаёт подписанный URL загрузки, действительный 30 минут — единственный способ, которым среда сборки может получить ваш код.
  • Изолированная песочница (Kaniko внутри пода под защитой gVisor) скачивает архив, распаковывает и собирает Dockerfile. Сборка обычно занимает около минуты.
  • Образ отправляется в приватное пространство реестра вашего аккаунта (registry.cdn.com.tr/<аккаунт>/<приложение>) — никогда в общий или публичный реестр.
  • Приложение создаётся или обновляется, открывается на своём поддомене с SSL и выкатывается. cdnctl ждёт и печатает живой URL.

cdnctl.yaml: важные поля

Этот файл пишет cdnctl init; вы его правите, cdnctl читает при каждом деплое.

  • name — имя приложения; при первом деплое также основа поддомена.
  • port — порт контейнера, который слушает ваш сервер (все интерфейсы, не localhost).
  • healthcheck — HTTP-путь, который проверяет платформа; деплой ждёт его прохождения.
  • method — auto, source, git или compose; source — описанный здесь путь из папки.
  • Сам манифест исключён из сканирования cdnctl check: его значения никогда не заглушат предупреждение о вашем коде.
# минимальный cdnctl.yaml
name: task-tracker
port: 3000
healthcheck: /health
method: source

Ограничения — честный мелкий шрифт

  • Архив исходников: максимум 128 МБ. Node-проекты легко помещаются после исключения node_modules (.dockerignore пишет init).
  • Время сборки: около минуты для типичных Node/Python приложений; тяжёлые нативные сборки дольше.
  • Шаблон Dockerfile знает Node, Python, PHP и статические сайты; для остального нужен Dockerfile, написанный вручную (deploy использует его как есть).
  • Оплата остаётся в панели: если у аккаунта нет пакета платформы, deploy останавливается со ссылкой на покупку, а cdnctl init --wait продолжает после оплаты.

Диагностика: сбои, которые мы реально встречали

Каждая строка — реальный сбой из живых запусков с решением, которое сработало.

  • Контейнер падает в цикле с ERR_DLOPEN_FAILED сразу после деплоя — в образе node_modules, скопированный с вашей машины (нативные модули собраны не для той платформы). Решение: добавьте node_modules в .dockerignore и дайте npm install отработать внутри сборки. cdnctl check ловит это до загрузки.
  • Build failed на первом деплое — читайте лог сборки, который печатает cdnctl deploy; после node_modules самая частая причина — зависимость, которая есть локально, но отсутствует в package.json/requirements.
  • Приложение в состоянии stopped после create — запустите cdnctl deploy ещё раз (0.18.0+ сам запускает выкатку; старым сборкам требовался явный deploy).
  • Сайт недоступен при успешной сборке — сервер слушает 127.0.0.1 или порт, отличный от cdnctl.yaml. Слушайте 0.0.0.0 и объявленный порт; привязку к localhost ловит check.
  • Healthcheck не проходит — путь возвращает не 200 или приложению нужно больше времени на старт; сперва проверьте путь локально.

Команды от начала до конца

cdnctl init          # определить проект, записать cdnctl.yaml + Dockerfile
cdnctl check         # локальная предполётная проверка: ошибки блокируют, предупреждения информируют
cdnctl deploy        # упаковать → загрузить → собрать → живой URL
cdnctl container apps logs --app <app_uuid> --tail 100   # логи выполнения
cdnctl deploy-token create --name "agent"   # ограниченный токен для AI-агентов