Руководство платформы
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-агентов