Loading...

Deploy · 7 мин чтения

cdnctl init → deploy: от папки проекта до живого URL

Это практическое дополнение к истории: каждая команда, которую вы действительно наберёте, с её реальным выводом — от установки CLI до момента, когда приложение отвечает на живом HTTPS-URL. Здесь ничего не требует git, container registry или опыта с Docker — единственные условия: папка проекта, которая запускается локально, и тариф с контейнерной платформой.

7 мин чтения Для начинающих Обновлено

cdnctl init → deploy: от папки проекта до живого URL

Что понадобится (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
$ 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
$ 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
$ 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

Ещё нет тарифа? Рукопожатие через браузер

cdnctl init → deploy: от папки проекта до живого URL — Ещё нет тарифа? Рукопожатие через браузер
Страница покупки, открытая по ссылке из cdnctl: баннер подтверждает передачу, рекомендуемый тариф отмечен.

Если 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), чтобы он мог публиковать, никогда не держа в руках пароль от вашего аккаунта.