Что понадобится (60 секунд)
Одно: тариф cdn.com.tr с контейнерной платформой — она есть в каждом стандартном тарифе. Установите CLI однострочником ниже и войдите. Работает одинаково на Linux, macOS и Windows; если предпочитаете пакетный менеджер — есть репозитории APT/YUM, Homebrew и Docker-образ.
$ curl -fsSL https://cdn.com.tr/downloads/cdnctl/install.sh | sh
$ cdnctl login --email you@company.com
Шаг 1 — cdnctl init: пусть папка представится сама
Выполните init внутри каталога проекта. Он определяет стек и порт, записывает небольшой манифест cdnctl.yaml и добавляет раздел о деплое в AGENTS.md, чтобы ваш ИИ-агент тоже усвоил процесс. Заодно он проверяет аккаунт: если контейнерной платформы нет, он печатает точную ссылку на покупку — а с флагом --wait просто ждёт, пока оплата завершится в браузере, и продолжает сам.
$ cdnctl init
Proje : gorev-takip (node/express, port 3000)
Agent : claude-code (claude on PATH), cursor
Paket : ✓ Large (max 5 app)
Karne : 2 HATA, 2 uyarı — ayrıntı: cdnctl check
Yazıldı : cdnctl.yaml, AGENTS.md
→ Önce `cdnctl check` hatalarını düzeltin (deploy sonrası site açılmaz).
Шаг 2 — cdnctl check: исправьте, пока это дёшево
check — это локальный линтер готовности к деплою. Ошибки (они сломали бы живой сайт) останавливают деплой; предупреждения — нет. Исправления обычно в одну строку: bind на 0.0.0.0 вместо 127.0.0.1, вынести захардкоженный токен в --secret, добавить GET /health, возвращающий 200, читать порт из переменной окружения PORT.
$ cdnctl check
[ERROR] bind-localhost (server.js:61)
The app binds to 127.0.0.1 — unreachable inside a container.
→ Bind to 0.0.0.0 (just drop the host argument).
[ERROR] secret-in-code (server.js:10)
A hard-coded secret (API key/token/password).
→ Move it to --secret KEY=VALUE; read it via process.env.
[WARNING] sqlite-single-pod
SQLite loses data on restart / multiple replicas.
→ Mount a persistent disk or switch to a managed database.
[WARNING] no-healthcheck
No /health route — the platform can’t tell your app is alive.
Шаг 3 — cdnctl deploy: папка на входе, URL на выходе
deploy архивирует папку (node_modules и .git никуда не едут), загружает её, собирает в песочнице платформы и выпускает релиз. Строки прогресса означают ровно то, что в них написано; когда вы видите LIVE, URL уже отвечает по HTTPS. Обновления — та же команда: новая сборка заменяет старую только после того, как поднялась.
$ cdnctl deploy
→ archiving source (gorev-takip)
→ uploading (0.1 MB)
→ starting build (Kaniko, isolated sandbox)
build: running
build: success (41 s)
→ creating the app
→ assigning a subdomain
→ first deploy
→ waiting for the app to come up
✓ LIVE: https://ca…….cdn.com.tr
Ещё нет тарифа? Рукопожатие через браузер
Если init не находит контейнерную платформу в вашем аккаунте, он отправляет вас на страницу покупки с контекстом — страница показывает баннер, подтверждающий, что вас прислал cdnctl, и отмечает рекомендуемый тариф. Оплатите в браузере как обычно; страница подтверждения предложит вернуться в терминал, и cdnctl (с --wait — или просто перезапустите init) автоматически подхватит процесс. Никакого копирования ключей, никакой настройки.
Лимиты и честный мелкий шрифт
Загрузка исходников ограничена 128 МБ — этого с запасом хватает, когда node_modules остаётся дома. Типичный build занимает около минуты. Если приложению нужно хранить файлы, запросите постоянный диск при деплое или используйте объектное хранилище; если оно использует SQLite — подумайте об управляемой базе данных: check будет напоминать вам почему. А если build упал, cdnctl печатает лог сборки прямо в терминал; самая частая причина при первом запуске — Dockerfile, копирующий node_modules с вашей машины (добавьте его в .dockerignore).
Частые вопросы
Могу ли я подключить собственный домен?
Да — приложение сразу получает рабочий поддомен, а свой домен вы можете подключить потом из панели или через CLI.
Где мои логи?
cdnctl container apps show и вкладка «Здоровье» в панели показывают статус; логи сборки cdnctl deploy печатает при неудаче, а runtime-логи живут в панели.
Могу ли я запустить больше одного приложения?
Да; квоту на приложения задаёт ваш тариф. Каждая папка проекта деплоится как отдельное приложение со своим URL.
Код пишет мой ИИ-агент — может ли он и деплоить?
Да. init уже обучает его командам через AGENTS.md; выдайте ему deploy-only токен (cdnctl deploy-token create), чтобы он мог публиковать, никогда не держа в руках пароль от вашего аккаунта.