Loading...

Примеры использования

Перенос приложения Docker и Kubernetes в Managed Container App

Практическое руководство по миграции существующего Docker-контейнера, развёртывания Kubernetes или бэкенда мобильного приложения в CDN.com.tr Managed Container App с Managed Redis, управляемой базой данных, Object Storage, запланированными задачами, доменом, SSL, CDN и WAF.

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

Процесс не требует kubectl, SSH, команд импорта artisan или прямых изменений базы данных. Внутренние инструменты остаются только на стороне проверки и отладки CDN.com.tr.

Рабочий процесс через интерфейс панели

1

Создать или выбрать аккаунт CDN

Сначала войдите в CDN.com.tr. Если у клиента нет аккаунта CDN для этого приложения, создайте его в CDN Accounts или мастере настройки, затем выберите его перед открытием Platforms.

  • Мастер настройки создаёт структуру аккаунта CDN и связь с пакетом.
  • Сам перенос Container App продолжается из Platforms после создания аккаунта.
  • Используйте заполнитель или служебный домен, например api.example.com, когда конечный домен будет подключён позже.
2

Подтвердить права управляемой платформы

Убедитесь, что права Managed Container включают Container App, Redis, DB, Object Storage, постоянное хранилище и запланированные задачи перед созданием приложения.

  • Если распределение Redis или DB равно 0, остановитесь и назначьте пакет с возможностью миграции перед импортом данных.
  • Используйте планы Standard или выше для приложений, которые запускают несколько worker-процессов или инициализируют большую базу данных при запуске.
  • Публичная маршрутизация открывается через CDN edge reverse proxy только после успешных проверок DNS, SSL и работоспособности.
3

Запустить мастер миграции

Откройте процесс создания Container App из Platforms и введите данные приложения как миграцию существующего Docker/Kubernetes приложения. Выберите существующую точку доставки для домена или оставьте пользовательский домен пустым, пока DNS не будет готов.

  • Image: registry.example.com/acme/mobile-backend
  • Tag: 1.0.0
  • Port: 8080
  • Health check: /health
4

Добавить учётные данные реестра

Создайте токен только для чтения из Docker Hub или частного реестра, затем введите его в Registry Credential. Он используется только для получения image, не инъектируется в приложение как env или secret.

5

Ввести значения переменных окружения

Введите несекретные настройки runtime в формате KEY=VALUE.

  • PYTHONUNBUFFERED=1
  • PYTHONPATH=/app
  • MEDIA_ROOT=/app/data/media
  • THUMBS_ROOT=/app/data/thumbs
  • IMAGE_CDN_BASE_URL=https://api.example.com
  • APP_URL=https://api.example.com
  • LOG_LEVEL=INFO
6

Ввести секреты

Введите значения OpenAI, Meta, WhatsApp, WooCommerce, TikTok, поставщика доставки и токена синхронизации доставки в замаскированные поля Secret. Эти значения не возвращаются впоследствии в ответах GET.

7

Включить Managed Redis

Включите Managed Redis. Не вводите host, port или пароль; система привязывает REDIS_URL к приложению как env/secret.

8

Создать Managed DB и импортировать дамп

Создайте Managed Database, затем загрузите дамп .sql или .sql.gz из исходной системы. Публичная маршрутизация не открывается до завершения импорта. Если импорт завершился ошибкой, отмените запись неудачного импорта перед повторной загрузкой исправленного дампа.

9

Импортировать архив постоянных файлов

Включите постоянное хранилище для /app/data, загрузите исходный архив media/data как .tar.gz и сохраните путь целевого монтирования /app/data. Если импорт архива завершился ошибкой, отмените запись неудачного импорта перед повторной попыткой или развёртыванием.

10

Создать запланированную задачу

Сначала создайте order-shipping-sync отключённым, запустите вручную, затем включите расписание после проверки.

  • Schedule: */30 * * * *
  • Method: POST
  • Path: /orders/shipping-sync/run?limit=200&min_stale_minutes=120
  • Secret header: X-Order-Shipping-Sync-Token
  • Secret source: ORDER_SHIPPING_SYNC_TOKEN
11

Проверить, развернуть и верифицировать

Проверьте image, домен, Redis, DB, хранилище, секреты и запланированные задачи. Запустите Deploy, затем отслеживайте временную шкалу операций, статус и журналы.

Откуда берутся учётные данные и файлы импорта

Источники учётных данных

  • Токен API CDN.com.tr: создайте его из Authorization / API Tokens; он виден только один раз.
  • Токен реестра Docker: создайте токен только для чтения у провайдера реестра.
  • Ключ OpenAI: создайте его на странице ключей API в дашборде OpenAI; ротируйте, если старый ключ недоступен для просмотра.
  • Токены Meta, WhatsApp и TikTok: получите их с соответствующего портала разработчиков и добавьте домен приложения, например api.example.com, как callback/domain при необходимости.
  • Ключ/secret WooCommerce: создайте из WordPress admin, WooCommerce, Settings, Advanced, REST API.

Файлы импорта

  • Дамп базы данных: экспортируйте с помощью mysqldump, phpMyAdmin, RDS export или текущей панели хостинга.
  • Постоянный архив: подготовьте папки upload/media/data как .tar.gz.
  • Токен синхронизации доставки: сгенерируйте новый случайный секрет; используйте то же значение в секрете приложения и заголовке запланированной задачи.
  • Производственные секреты не должны записываться в документы, журналы или тикеты.

Распространённые блокировки миграции

  • Redis или DB limit exceeded означает, что пакет аккаунта не готов к этой миграции; не вставляйте управляемые учётные данные в видимые значения env в качестве обходного пути.
  • HTTP 413 при импорте DB/файла означает, что ограничение загрузки web/PHP всё ещё ниже размера архива, даже если валидация API разрешает большие файлы.
  • Загрузки на стороне клиента также требуют достаточного размера файла в пакете CDN, поскольку конфигурация edge использует его как nginx client_max_body_size.
  • ErrImagePull обычно означает, что учётные данные реестра отсутствовали, не были выбраны или были недействительны. Выберите сохранённые учётные данные только для чтения и повторно разверните.
  • Exit code 137 означает, что приложению, вероятно, не хватило памяти. Начните с более крупного плана или уменьшите количество worker-процессов для первого развёртывания.
  • waiting_dns означает, что имя хоста ещё не является готовой точкой доставки CDN. Добавьте домен в Content Delivery Points и завершите DNS/SSL перед ожиданием успешных проверок работоспособности.
  • При дымовых тестах S3, если put-object работает, но head-object завершается ошибкой, проверьте владельца bucket/key и маршрут S3 passthrough CDN.

Рабочий процесс через терминал с cdnctl и AWS CLI

Используйте cdnctl как основной терминальный рабочий процесс. Прямые вызовы REST — только для проверок эквивалентности API или устранения неполадок, а AWS CLI — только для проверки совместимого с S3 Object Storage.

Основной рабочий процесс cdnctl

cdnctl update --check
cdnctl login --email <customer@example.com> --password <password>
cdnctl accounts list
cdnctl container registry-credentials create --account <account_uuid> --name docker --registry-url https://index.docker.io/v1/ --username <user> --password <token>
cdnctl container apps create --account <account_uuid> --name mobile-backend --image registry.example.com/acme/mobile-backend --tag 1.0.0 --port 8080 --healthcheck /health --domain api.example.com --persistent-mount-path /app/data --persistent-storage-gb 5
cdnctl object-storage buckets create --account <account_uuid> --name app-media
cdnctl object-storage access-keys create --account <account_uuid> --bucket <bucket_uuid>
cdnctl object-storage bindings create --account <account_uuid> --app <app_uuid> --bucket <bucket_uuid> --access-key <key_uuid> --env-prefix S3
cdnctl container imports database --account <account_uuid> --app <app_uuid> --file app.sql.gz
cdnctl container imports files --account <account_uuid> --app <app_uuid> --file app-data.tar.gz --target-path /app/data
cdnctl container jobs create --account <account_uuid> --app <app_uuid> --name order-shipping-sync --schedule "*/30 * * * *" --method POST --path "/orders/shipping-sync/run?limit=200&min_stale_minutes=120" --secret-header-name X-Order-Shipping-Sync-Token --secret-source ORDER_SHIPPING_SYNC_TOKEN
cdnctl container apps deploy --account <account_uuid> --app <app_uuid>
cdnctl container apps wait --account <account_uuid> --app <app_uuid> --status running --timeout 300
cdnctl container apps status --account <account_uuid> --app <app_uuid>
cdnctl container apps logs --account <account_uuid> --app <app_uuid> --tail 100

Верификация с AWS CLI и публичным маршрутом

curl -fsS https://api.example.com/health
export AWS_REQUEST_CHECKSUM_CALCULATION=when_required
export AWS_RESPONSE_CHECKSUM_VALIDATION=when_required
aws --endpoint-url https://s3.cdn.com.tr s3api list-buckets
aws --endpoint-url https://s3.cdn.com.tr s3api put-object --bucket <bucket> --key smoke.txt --body ./smoke.txt
aws --endpoint-url https://s3.cdn.com.tr s3api head-object --bucket <bucket> --key smoke.txt