Loading...

Línea de comandos

Referencia de cdnctl

Referencia completa de cdnctl (v0.12.x). Todos los comandos generan salida en JSON. El token de autenticación se almacena en ~/.cdnctl/config.json o se lee de las variables de entorno CDNCTL_TOKEN y CDNCTL_ENDPOINT.

Comandos destructivos — cualquier comando cuyo nombre contenga delete o revoke requiere un flag --yes explícito. Sin él, el comando termina con un error y no realiza ningún cambio.
← Ayuda de la plataforma

Instalación y actualización

cdnctl se distribuye como un binario estático para Linux, macOS y Windows (amd64/arm64). No requiere PHP, Python, Node.js ni kubectl.

install — package managers

# macOS and Linux (Homebrew)
brew install mediatriple/tap/cdnctl

# Debian / Ubuntu (signed APT repository)
curl -fsSL https://cdn.com.tr/downloads/cdn-com-tr.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/cdn-com-tr.gpg
echo "deb [signed-by=/usr/share/keyrings/cdn-com-tr.gpg] \
https://cdn.com.tr/downloads/deb stable main" \
  | sudo tee /etc/apt/sources.list.d/cdn-com-tr.list
sudo apt-get update && sudo apt-get install cdnctl

# RHEL / Fedora / Rocky (signed YUM repository)
sudo tee /etc/yum.repos.d/cdn-com-tr.repo >/dev/null <<'EOF'
[cdn-com-tr]
name=cdn.com.tr
baseurl=https://cdn.com.tr/downloads/rpm
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://cdn.com.tr/downloads/cdn-com-tr.gpg
EOF
sudo dnf install cdnctl

# Go toolchain
go install github.com/mediatriple/cdnctl@latest

Installed through a package manager, cdnctl upgrades with that package manager (brew upgrade cdnctl, apt-get install --only-upgrade cdnctl, dnf upgrade cdnctl) and cdnctl update deliberately steps aside, so it never overwrites a file dpkg, rpm or Homebrew owns.

install — script or direct download

curl -fsSL https://cdn.com.tr/downloads/cdnctl/install.sh | sh

# pin a specific version
CDNCTL_VERSION=0.17.2 curl -fsSL https://cdn.com.tr/downloads/cdnctl/install.sh | sh

Descarga la última versión para tu plataforma, la verifica con las sumas de comprobación publicadas e instala el binario.

Archives for linux (amd64/arm64), macOS (amd64/arm64) and Windows (amd64), each with a SHA256 checksums file, are published at /downloads/cdnctl/ and on the GitHub releases page. cdnctl is open source: github.com/mediatriple/cdnctl (MIT).

update

cdnctl update --check
cdnctl update --yes
cdnctl update --version <version> --yes

Autoactualiza el binario instalado desde el canal de lanzamiento público. El archivo descargado se verifica con el archivo de suma de comprobación publicado antes de reemplazar el binario.

OpciónDescripción
--checkopcionalSolo informa si existe una versión más reciente; no cambia nada
--yesopcionalAplica la actualización sin pedir confirmación
--versionopcionalActualiza (o revierte) a una versión específica en lugar de la más reciente
--bin-diropcionalDirectorio de instalación cuando la ruta del binario actual no admite escritura. Valor de respaldo predeterminado: $HOME/.local/bin. Variable de entorno: CDNCTL_BIN_DIR

Autenticación y configuración

login

cdnctl login [--password-login] [--email <email>] [--password <password>] [--endpoint <url>]

Inicia sesión y guarda un token en ~/.cdnctl/config.json. De forma predeterminada se abre un navegador y tu cuenta aprueba esta terminal, así que no escribes ninguna contraseña en la CLI; añade --password-login para entrar con correo y contraseña (también es lo que ocurre automáticamente cuando no hay terminal, p. ej. en CI). Se hace una vez por máquina; el token se reutiliza en los comandos siguientes.

OpciónDescripción
--password-loginopcionalIniciar sesión con correo y contraseña en lugar del navegador (se elige solo cuando no hay terminal, p. ej. CI)
--emailopcionalDirección de correo electrónico de la cuenta
--passwordopcionalContraseña de la cuenta
--endpointopcionalURL base de la API. Por defecto: https://cdn.com.tr

configure

cdnctl configure [--endpoint <url>] [--token <token>]

Establece manualmente el endpoint o el token sin iniciar sesión. Útil para entornos de CI o automatización basada en tokens.

OpciónDescripción
--endpointopcionalURL base de la API
--tokenopcionalToken Bearer. Alternativamente, defina la variable de entorno CDNCTL_TOKEN
Variables de entorno: CDNCTL_TOKEN y CDNCTL_ENDPOINT tienen prioridad sobre el archivo de configuración y son útiles para pipelines de CI donde escribir en disco no es ideal.

Cuentas

accounts list

cdnctl accounts list

Lista todas las cuentas CDN accesibles para el usuario autenticado (JSON completo). El campo uuid se usa como --account en todos los demás comandos.

accounts ls

cdnctl accounts ls

Una versión breve y legible de la lista — una línea por cuenta con solo el uuid, el dominio y el tipo. Útil para encontrar el uuid que quieras guardar como predeterminado.

accounts use / current / clear

cdnctl accounts use <uuid>
cdnctl accounts current
cdnctl accounts clear

Guarda una cuenta predeterminada una vez para no tener que pasar --account <uuid> en cada comando. Después de accounts use, los comandos limitados a una cuenta usan automáticamente la cuenta guardada (imprimen (using saved account <uuid>) para que sepas cuál es); pasa --account en cualquier momento para anularla. current la muestra y clear la olvida.

Acceso a archivos (sube y gestiona tus archivos)

Sube, lista y elimina archivos en tu sitio WordPress gestionado directamente desde la línea de comandos — sin FTP y sin límite de tamaño de subida. Úsalo en lugar de la subida por navegador si alguna vez encuentras 413 Request Entity Too Large. Las rutas son relativas al wp-content de tu sitio, por lo que puedes acceder a uploads/, plugins/, themes/, etc. Solo verás los archivos de tu propia cuenta.

Set your account once

cdnctl accounts use <uuid>

Para que los comandos de archivos que aparecen a continuación no necesiten --account cada vez. (Ejecuta cdnctl accounts ls para encontrar tu uuid.)

List files — files ls

cdnctl files ls                       # lists wp-content (uploads, plugins, themes, …)
cdnctl files ls --path uploads
cdnctl files ls --path uploads/2026

Sin --path, lista la raíz de wp-content.

Upload files — cp

cdnctl cp ./photo.jpg /uploads/photo.jpg
cdnctl cp ./backup.zip /uploads/backup.zip
cdnctl cp ./my-plugin.php /plugins/my-plugin/my-plugin.php

# upload a whole folder as one archive (structure is preserved):
cdnctl cp -r ./my-folder /uploads/my-folder

Añade -r para subir una carpeta entera. Viaja como un único archivo, no fichero a fichero, así que incluso miles de ficheros tardan segundos; la estructura de carpetas se recrea bajo el destino, carpetas vacías incluidas, y cada fichero se comprueba con su SHA-256 en el servidor antes de colocarlo. Los ficheros existentes no se sobrescriben salvo que añadas --force. También puedes indicar la cuenta en línea como <uuid>:/uploads/photo.jpg en lugar de guardar una por defecto.

OpciónDescripción
-rSube un directorio de forma recursiva.
--forceSobrescribe los archivos que ya existen.

Download files — cp

cdnctl cp :/uploads/photo.jpg ./                      # into the current folder
cdnctl cp :/plugins/my-plugin/my-plugin.php ./backup.php
cdnctl cp <account_uuid>:/uploads/photo.jpg ./          # a specific account

# download a whole folder recursively (its contents land in ./backup):
cdnctl cp -r :/uploads/2026 ./backup

# the same single-file download as an explicit sub-command:
cdnctl files get --path /uploads/photo.jpg --out ./photo.jpg

Escribe primero la ruta remota, con dos puntos delante — el mismo orden que usa scp. : sola significa tu cuenta por defecto; escribe <account_uuid>:ruta para otra. El fichero llega a la carpeta que indiques (o con el nombre que le des). Con -r una carpeta remota baja como un único archivo a la carpeta local; -r con la ruta vacía (<account_uuid>:) trae todo el almacenamiento. Cada descarga se comprueba por tamaño y SHA-256 antes de escribir nada; un fichero local existente solo se reemplaza con --force. Un fichero suelto (sin -r) puede tener hasta 10 MB.

Keep a folder in sync — sync

# upload what changed in ./my-theme (rsync-style, one direction):
cdnctl sync ./my-theme :/themes/my-theme

# download what changed on the server:
cdnctl sync :/uploads ./uploads-backup

# mirror, deleting what the source no longer has — look at the plan first:
cdnctl sync --delete --dry-run ./my-theme :/themes/my-theme
cdnctl sync --delete --exclude '*.log' ./my-theme :/themes/my-theme

# compare by SHA-256 instead of size and modification time:
cdnctl sync -c :/uploads ./uploads-backup

Funciona como rsync, en una sola dirección: ORIGEN y DESTINO, exactamente uno de ellos remoto. Solo se mueve lo que difiere — por tamaño y fecha de modificación, o por SHA-256 con -c — y las fechas de modificación se conservan, así que una segunda ejecución no mueve nada. --delete borra además lo que el origen ya no tiene (nunca la carpeta misma ni los nombres excluidos, y nada si algo falló en la ejecución); --dry-run muestra el plan (+ nuevo, ~ cambiado, - borrado, ! omitido) sin cambiar nada; --exclude deja fuera nombres (*.log, /cache/). La barra final no importa: el contenido de ORIGEN siempre va a DESTINO. Los enlaces simbólicos se informan y se dejan como están.

Create a folder — files mkdir

cdnctl files mkdir --path /uploads/2026/07

Delete a file — files rm

cdnctl files rm --path /uploads/photo.jpg --yes

Requiere --yes. Solo se pueden eliminar archivos (los directorios se rechazan).

Container Apps

container apps list

cdnctl container apps list --account <uuid>

Lista todas las apps de contenedor de la cuenta.

OpciónDescripción
--accountobligatorioUUID de la cuenta

container apps create

cdnctl container apps create \
  --account <uuid> \
  --name <name> \
  --image <registry/image> \
  [--tag <tag>] \
  [--port <port>] \
  [--healthcheck <path>] \
  [--healthcheck-type http|tcp|none] \
  [--metrics-port <port>] \
  [--metrics-path <path>] \
  [--replicas <n>] \
  [--plan <code>] \
  [--domain <domain>] \
  [--env-json '{"KEY":"value"}'] \
  [--secrets-json '{"SECRET":"value"}'] \
  [--registry-credential <uuid>] \
  [--persistent-mount-path <path>] \
  [--persistent-storage-gb <n>]

Crea un nuevo registro de app de contenedor y su primera revisión. No la despliega; ejecuta deploy después de crearla.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--nameobligatorioNombre de la app (compatible con slug)
--imageobligatorioRuta de la imagen del contenedor, p. ej. registry.example.com/acme/api
--tagopcionalEtiqueta de la imagen. Predeterminado: cadena vacía
--portopcionalPuerto del contenedor en el que escucha la app. Predeterminado: 8080
--healthcheckopcionalRuta HTTP de verificación de estado. Predeterminado: /health
--healthcheck-typeopcionalTipo de verificación de estado: http, tcp o none
--metrics-portopcionalPuerto que expone las métricas de Prometheus
--metrics-pathopcionalRuta que expone las métricas de Prometheus, p. ej. /metrics
--replicasopcionalNúmero de réplicas. Predeterminado: 1
--planopcionalCódigo del plan de recursos. Predeterminado: starter
--domainopcionalDominio personalizado para asociar
--env-jsonopcionalObjeto JSON de variables de entorno. Los valores son visibles en las respuestas GET.
--secrets-jsonopcionalObjeto JSON de secretos. Los valores se cifran y nunca se devuelven después de la creación.
--registry-credentialopcionalUUID de una credencial de registro para imágenes privadas
--persistent-mount-pathopcionalRuta de montaje del volumen persistente, p. ej. /app/data
--persistent-storage-gbopcionalTamaño del volumen persistente en GB
Secrets: Los valores pasados mediante --secrets-json se almacenan cifrados y no se devuelven en ninguna respuesta GET. Guárdelos antes de ejecutar este comando.

container apps update

cdnctl container apps update \
  --account <uuid> \
  --app <uuid> \
  [--image <registry/image>] \
  [--tag <tag>] \
  [--port <port>] \
  [--replicas <n>] \
  [--healthcheck <path>] \
  [--healthcheck-type http|tcp|none] \
  [--metrics-port <port>] \
  [--metrics-path <path>] \
  [--domain <domain>] \
  [--env-json '{"KEY":"value"}'] \
  [--secrets-json '{"SECRET":"value"}'] \
  [--registry-credential <uuid>] \
  [--persistent-mount-path <path>]

Actualiza la configuración de la app. Solo se modifican las opciones (flags) que pases. Ejecuta deploy después de actualizar para publicar la nueva revisión.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--imageopcionalNueva ruta de la imagen
--tagopcionalNueva etiqueta de la imagen
--portopcionalPuerto del contenedor
--replicasopcionalNúmero de réplicas
--healthcheckopcionalRuta de verificación de estado
--healthcheck-typeopcionalTipo de verificación de estado: http, tcp o none
--metrics-portopcionalPuerto que expone las métricas de Prometheus
--metrics-pathopcionalRuta que expone las métricas de Prometheus
--domainopcionalDominio para asociar. Pase una cadena vacía para eliminarlo.
--env-jsonopcionalReemplaza todas las variables de entorno con este objeto JSON
--secrets-jsonopcionalReemplaza todos los secretos con este objeto JSON. Los valores nunca se devuelven.
--registry-credentialopcionalUUID de la credencial de registro. Pase una cadena vacía para eliminarla.
--persistent-mount-pathopcionalRuta de montaje persistente. Pase una cadena vacía para deshabilitarla.

container apps deploy

cdnctl container apps deploy --account <uuid> --app <uuid>

Publica la configuración actual como una nueva revisión. Usa wait después para bloquear hasta que el despliegue alcance un estado objetivo.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container apps expose

cdnctl container apps expose --account <uuid> --app <uuid>

Genera un subdominio permanente e inmutable <uid>.cdn.com.tr para la app. El subdominio nunca cambia aunque se actualice un dominio personalizado.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container apps restart

cdnctl container apps restart --account <uuid> --app <uuid>

Realiza un reinicio progresivo (rolling restart) de todas las réplicas en ejecución sin crear una nueva revisión.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container apps scale

cdnctl container apps scale --account <uuid> --app <uuid> --replicas <n>

Cambia el número de réplicas de inmediato sin crear una nueva revisión. Pasa 0 para escalar la app a cero.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--replicasobligatorioNúmero de réplicas objetivo (use 0 para suspender la app)

container apps show

cdnctl container apps show --account <uuid> --app <uuid>

Devuelve la configuración completa de la app, incluida la lista de revisiones. Usa los UUID de revisión de esta salida con rollback.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container apps rollback

cdnctl container apps rollback --account <uuid> --app <uuid> --revision <revision_uuid>

Vuelve a desplegar una revisión anterior. Usa show para listar los UUID de revisión disponibles.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--revisionobligatorioUUID de la revisión a la que revertir (obtenido de show)

container apps operations

cdnctl container apps operations --account <uuid> --app <uuid>

Lista todas las operaciones de la plataforma registradas para la app, como despliegues, reinicios y eventos de escalado.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container apps status

cdnctl container apps status --account <uuid> --app <uuid>

Devuelve el estado de ejecución actual y el resultado de la última operación de la app.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container apps wait

cdnctl container apps wait \
  --account <uuid> \
  --app <uuid> \
  --status <target> \
  [--timeout <seconds>] \
  [--interval <seconds>]

Sondea el estado de la app hasta que alcanza --status o expira el tiempo de espera. Sale con 0 en caso de éxito y 1 en caso de fallo o tiempo de espera agotado. En caso de fallo, incluye automáticamente la salida de diagnose.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--statusobligatorioCadena de estado objetivo, p. ej. running
--timeoutopcionalSegundos máximos de espera. Predeterminado: 300
--intervalopcionalIntervalo de sondeo en segundos. Predeterminado: 5

container apps logs

cdnctl container apps logs --account <uuid> --app <uuid> [--tail <n>]

Devuelve las líneas recientes del registro del contenedor.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--tailopcionalNúmero de líneas de registro a devolver. Predeterminado: 100

container apps diagnose

cdnctl container apps diagnose --account <uuid> --app <uuid> [--tail <n>]

Devuelve una instantánea combinada de estado y registro. wait lo usa automáticamente en caso de fallo. Ejecútalo primero cuando una app esté bloqueada o falle.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--tailopcionalNúmero de líneas de registro a incluir. Predeterminado: 120

container apps delete

cdnctl container apps delete --account <uuid> --app <uuid> --yes

Elimina permanentemente la app y todas sus revisiones. Esta operación es irreversible.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--yesobligatorioConfirmación explícita requerida para operaciones destructivas

Preflight de contenedores

Ejecuta preflight antes de crear apps para verificar que la cuenta cumple todos los requisitos previos de la plataforma (cuotas, políticas de red, acceso al registro, etc.).

container preflight

cdnctl container preflight --account <uuid>

Comprueba que la cuenta esté lista para ejecutar cargas de trabajo en contenedores y devuelve una lista de los problemas encontrados.

OpciónDescripción
--accountobligatorioUUID de la cuenta

Credenciales de registro

Las credenciales de registro están limitadas a la cuenta y pueden reutilizarse entre apps. La contraseña se almacena cifrada y nunca se devuelve después de la creación.

container registry-credentials list

cdnctl container registry-credentials list --account <uuid>
OpciónDescripción
--accountobligatorioUUID de la cuenta

container registry-credentials create

cdnctl container registry-credentials create \
  --account <uuid> \
  --name <name> \
  --password <token> \
  [--registry-url <url>] \
  [--username <user>]
OpciónDescripción
--accountobligatorioUUID de la cuenta
--nameobligatorioNombre descriptivo para esta credencial
--passwordobligatorioContraseña del registro o token de acceso
--registry-urlopcionalURL del registro. Predeterminado: https://index.docker.io/v1/
--usernameopcionalNombre de usuario del registro

container registry-credentials delete

cdnctl container registry-credentials delete \
  --account <uuid> \
  --credential <credential_uuid> \
  --yes

Elimina permanentemente una credencial de registro. Las apps que hagan referencia a esta credencial no podrán descargar imágenes en el próximo despliegue.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--credentialobligatorioUUID de la credencial obtenido de registry-credentials list
--yesobligatorioConfirmación explícita requerida para operaciones destructivas

Complementos gestionados

Los add-ons se crean y conectan a la app automáticamente. Las credenciales se inyectan como variables de entorno, sin necesidad de introducir manualmente el host, el puerto o la contraseña. Ejecuta deploy después de habilitar o deshabilitar un add-on.

container addons list

cdnctl container addons list --account <uuid> --app <uuid>

Lista todos los add-ons actualmente asociados a la app.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container addons enable-database

cdnctl container addons enable-database \
  --account <uuid> \
  --app <uuid> \
  [--plan <code>] \
  [--env-prefix <prefix>] \
  [--storage-mb <n>] \
  [--url-scheme <scheme>]
OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--planopcionalCódigo del plan de recursos. Predeterminado: starter
--env-prefixopcionalPrefijo de variable de entorno para las credenciales inyectadas. Predeterminado: DB
--storage-mbopcionalTamaño de almacenamiento en MB
--url-schemeopcionalEsquema de URL de la base de datos para la variable DATABASE_URL, p. ej. mysql+pymysql. Predeterminado: mysql

container addons disable-database

cdnctl container addons disable-database --account <uuid> --app <uuid>
OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container addons enable-redis

cdnctl container addons enable-redis \
  --account <uuid> \
  --app <uuid> \
  [--plan <code>] \
  [--env-prefix <prefix>]
OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--planopcionalCódigo del plan de recursos. Predeterminado: starter
--env-prefixopcionalPrefijo de variable de entorno. Predeterminado: REDIS

container addons disable-redis

cdnctl container addons disable-redis --account <uuid> --app <uuid>
OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container addons enable-postgres

cdnctl container addons enable-postgres \
  --account <uuid> \
  --app <uuid> \
  [--plan <code>] \
  [--env-prefix <prefix>] \
  [--storage-mb <n>]
OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--planopcionalCódigo del plan de recursos. Predeterminado: starter
--env-prefixopcionalPrefijo de variable de entorno para las credenciales inyectadas. Predeterminado: DATABASE
--storage-mbopcionalTamaño de almacenamiento en MB. Predeterminado: 10240

container addons disable-postgres

cdnctl container addons disable-postgres \
  --account <uuid> \
  --app <uuid> \
  [--delete-data --confirmation <app_name>]

Deshabilita el add-on de Postgres. Por defecto, los datos se conservan. Pasa --delete-data junto con --confirmation para destruir permanentemente todos los datos.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--delete-dataopcionalDestruye permanentemente todos los datos de Postgres
--confirmationopcionalNombre de la app para confirmar la eliminación de datos cuando se establece --delete-data

container addons enable-nats

cdnctl container addons enable-nats \
  --account <uuid> \
  --app <uuid> \
  [--plan <code>] \
  [--env-prefix <prefix>] \
  [--storage-mb <n>]
OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--planopcionalCódigo del plan de recursos. Predeterminado: starter
--env-prefixopcionalPrefijo de variable de entorno para las credenciales inyectadas. Predeterminado: NATS
--storage-mbopcionalTamaño de almacenamiento de JetStream en MB. Predeterminado: 5120

container addons disable-nats

cdnctl container addons disable-nats \
  --account <uuid> \
  --app <uuid> \
  [--delete-data]

Deshabilita el add-on de NATS. Pasa --delete-data para destruir permanentemente todos los datos de JetStream.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--delete-dataopcionalDestruye permanentemente todos los datos de NATS JetStream

Importación de Compose

Importa un docker-compose.yml existente como apps de contenedor gestionadas. Los servicios con una imagen preconstruida se convierten en apps; los servicios Redis, MySQL/MariaDB, Postgres y NATS se convierten en add-ons gestionados asociados a las apps que dependen de ellos. Ejecuta siempre preview primero: muestra el plan resultante, las advertencias, los servicios no compatibles y si la importación se ajusta a tu cuota de apps, sin crear nada.

container compose preview

cdnctl container compose preview --account <uuid> --file docker-compose.yml

Analiza el archivo compose en el servidor y devuelve el plan de importación: apps que se crearán, asignaciones de add-ons, clasificación de claves de entorno/secretos, advertencias, servicios no compatibles y una verificación de derechos (entitlement). No crea nada. Los valores de los secretos nunca se devuelven, solo los nombres de las claves.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--fileobligatorioRuta al archivo compose (máx. 256 KB)

container compose apply

cdnctl container compose apply --account <uuid> --file docker-compose.yml --yes

Aplica la importación: crea las apps en orden de dependencia y habilita los add-ons asignados. Es todo o nada: si el nombre de alguna app entra en conflicto con una app existente, o algún servicio no es compatible (por ejemplo, usa build:), no se crea nada. Despliega cada app creada posteriormente con container apps deploy.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--fileobligatorioRuta al archivo compose (máx. 256 KB)
--yesobligatorioConfirma la creación de recursos
No soportado en v1: servicios que usan build: (en su lugar, suba una imagen precompilada), sobrescrituras de command/entrypoint (incorpórelas en la imagen), env_file, secrets de compose basados en archivo, y más de un montaje persistente por servicio. Los números de puerto del lado del host se ignoran — la exposición pública usa el dominio de la plataforma y el flujo apps expose.

Importaciones

Las importaciones deben completarse antes de que el despliegue abra el enrutamiento público. Usa apps status o apps wait para verificar el estado una vez finalizada una importación.

container imports list

cdnctl container imports list --account <uuid> --app <uuid>

Lista todas las importaciones y su estado actual para la app.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container imports database

cdnctl container imports database \
  --account <uuid> \
  --app <uuid> \
  --file <path/to/dump.sql.gz>

Sube y pone en cola un volcado SQL comprimido con gzip para importarlo en la base de datos gestionada.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--fileobligatorioRuta local al archivo .sql.gz

container imports files

cdnctl container imports files \
  --account <uuid> \
  --app <uuid> \
  --file <path/to/archive.tar.gz> \
  [--target-path <path>]

Sube y extrae un archivo tar.gz en el volumen persistente.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--fileobligatorioRuta local al archivo .tar.gz
--target-pathopcionalRuta de destino dentro del contenedor. Predeterminado: /app/data

container imports cancel

cdnctl container imports cancel \
  --account <uuid> \
  --app <uuid> \
  --import <import_uuid>

Cancela una importación en cola o en curso. No tiene efecto si la importación ya se ha completado.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--importobligatorioUUID de la importación obtenido de imports list

Tareas programadas

Las tareas (jobs) son llamadas HTTP realizadas según una programación cron a un endpoint dentro de la app. Créalas deshabilitadas, verifícalas con run y luego habilítalas.

container jobs list

cdnctl container jobs list --account <uuid> --app <uuid>
OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app

container jobs create

cdnctl container jobs create \
  --account <uuid> \
  --app <uuid> \
  --name <name> \
  --schedule "<cron expression>" \
  --path </endpoint/path> \
  [--method <POST|GET>] \
  [--secret-header-name <header>] \
  [--secret-source <ENV_VAR>] \
  [--enabled]
OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--nameobligatorioNombre de la tarea
--scheduleobligatorioExpresión cron, p. ej. */30 * * * *
--pathobligatorioRuta HTTP a llamar, p. ej. /jobs/run
--methodopcionalMétodo HTTP. Predeterminado: POST
--secret-header-nameopcionalNombre de la cabecera en la que enviar el token, p. ej. X-Token
--secret-sourceopcionalNombre del secreto de la app o variable de entorno cuyo valor se envía como valor de la cabecera
--enabledopcionalCrea la tarea habilitada. Omítalo para crearla deshabilitada (recomendado para la configuración inicial)

container jobs run

cdnctl container jobs run \
  --account <uuid> \
  --app <uuid> \
  --job <job_uuid> \
  [--wait] \
  [--timeout <seconds>] \
  [--interval <seconds>]

Desencadena una ejecución única e inmediata de la tarea. Usa --wait para bloquear hasta que la ejecución finalice o falle.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--jobobligatorioUUID de la tarea obtenido de jobs list
--waitopcionalBloquea hasta que finalice la ejecución
--timeoutopcionalSegundos máximos de espera cuando se establece --wait. Predeterminado: 180
--intervalopcionalIntervalo de sondeo en segundos. Predeterminado: 5

container jobs delete

cdnctl container jobs delete \
  --account <uuid> \
  --app <uuid> \
  --job <job_uuid> \
  --yes

Elimina permanentemente la tarea programada.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--jobobligatorioUUID de la tarea obtenido de jobs list
--yesobligatorioConfirmación explícita requerida para operaciones destructivas

Object Storage

Usa cdnctl para el plano de control: creación de buckets, claves de acceso y enlaces. Para leer y escribir objetos, usa cualquier cliente compatible con S3 apuntando a https://s3.cdn.com.tr. Consulta la guía Object Storage with AWS CLI.

object-storage buckets list

cdnctl object-storage buckets list --account <uuid>
OpciónDescripción
--accountobligatorioUUID de la cuenta

object-storage buckets create

cdnctl object-storage buckets create \
  --account <uuid> \
  --name <bucket-name> \
  [--visibility private|public]
OpciónDescripción
--accountobligatorioUUID de la cuenta
--nameobligatorioNombre del bucket (único globalmente dentro de la plataforma)
--visibilityopcionalprivate o public. Predeterminado: private

object-storage buckets usage

cdnctl object-storage buckets usage --account <uuid> --bucket <bucket_uuid>

Devuelve las estadísticas actuales de uso de almacenamiento del bucket.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--bucketobligatorioUUID del bucket obtenido de buckets list

object-storage buckets delete

cdnctl object-storage buckets delete --account <uuid> --bucket <bucket_uuid> --yes

Elimina permanentemente el bucket y todos los objetos que contiene. Esta operación es irreversible.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--bucketobligatorioUUID del bucket obtenido de buckets list
--yesobligatorioConfirmación explícita requerida para operaciones destructivas

object-storage access-keys create

cdnctl object-storage access-keys create \
  --account <uuid> \
  [--bucket <uuid>] \
  [--name <name>]

Crea una clave de acceso compatible con S3. El campo secret_key de la respuesta se muestra una vez y nunca se vuelve a devolver. Cópialo antes de cerrar la terminal.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--bucketopcionalUUID del bucket al que se limita la clave
--nameopcionalNombre descriptivo para la clave

object-storage access-keys rotate

cdnctl object-storage access-keys rotate --account <uuid> --key <key_uuid>

Genera un nuevo secreto para la clave de acceso manteniendo el mismo UUID de clave y el mismo ámbito de bucket. El nuevo secret_key se devuelve una vez y nunca más. Actualiza los clientes antes de rotarlo en producción.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--keyobligatorioUUID de la clave de acceso obtenido de access-keys create

object-storage access-keys revoke

cdnctl object-storage access-keys revoke --account <uuid> --key <key_uuid> --yes

Revoca y elimina permanentemente la clave de acceso. Los clientes que sigan usando esta clave recibirán errores de autenticación de inmediato.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--keyobligatorioUUID de la clave de acceso a revocar
--yesobligatorioConfirmación explícita requerida para operaciones destructivas

object-storage bindings create

cdnctl object-storage bindings create \
  --account <uuid> \
  --app <uuid> \
  --bucket <uuid> \
  [--access-key <uuid>] \
  [--env-prefix <prefix>]

Enlaza un bucket a una app. Las credenciales S3 y el endpoint se inyectan como variables de entorno en el próximo despliegue.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--bucketobligatorioUUID del bucket
--access-keyopcionalUUID de la clave de acceso que se usará para el enlace
--env-prefixopcionalPrefijo de variable de entorno. Predeterminado: S3

object-storage bindings delete

cdnctl object-storage bindings delete \
  --account <uuid> \
  --app <uuid> \
  --binding <binding_uuid> \
  --yes

Elimina el enlace del bucket de la app. El bucket y la clave de acceso no se ven afectados; solo se elimina la inyección de variables de entorno en el próximo despliegue.

OpciónDescripción
--accountobligatorioUUID de la cuenta
--appobligatorioUUID de la app
--bindingobligatorioUUID del enlace obtenido de bindings list o de la respuesta de app show
--yesobligatorioConfirmación explícita requerida para operaciones destructivas

Operaciones CDN: purga, WAF y registros de acceso

Para sitios entregados por la CDN: purgue rutas en caché, lea lo que bloqueó el firewall y descargue o busque los registros de acceso que recibe su cuenta. Active los registros de acceso en el panel (Registros de acceso) antes de que logs pull y logs grep puedan encontrar algo.

purge

cdnctl purge --account <uuid> --path /sitemap.xml [--path /other] [--type exact|prefix|variants] [--save]
cdnctl purge --account <uuid> --paths "/a,/b,/c" [--type prefix]
OpciónDescripción
--accountobligatorioUUID de la cuenta.
--pathopcionalRuta a purgar, p. ej. /sitemap.xml. Repita la opción para más rutas.
--pathsopcionalVarias rutas en una lista separada por comas.
--typeopcionalexact (por defecto): solo esa URL. prefix: la ruta y todo lo que cuelga de ella. variants: todas las variantes guardadas de la clave de caché.
--saveopcionalGuarda además las rutas como una purga que puede volver a ejecutar desde el panel.

purge all

cdnctl purge all --account <uuid> --yes
cdnctl purge all status --account <uuid>

Vacía toda la caché edge de la cuenta; las siguientes solicitudes van a su origen. purge all status indica si la última purga completa terminó en todos los edges.

OpciónDescripción
--accountobligatorioUUID de la cuenta.
--yesobligatorioObligatorio: purge all vacía toda la caché de la cuenta.

waf logs

cdnctl waf logs [--account <uuid>] [--range 1h|1d|7d|30d] [--format table|json]

Lo que el WAF detectó en el intervalo: reglas, países, IP de clientes y códigos de respuesta — las mismas cifras que la página WAF del panel.

OpciónDescripción
--accountopcionalUUID de la cuenta. Por defecto, la guardada con cdnctl accounts use.
--rangeopcionalIntervalo: 1h (por defecto), 1d, 7d o 30d.
--formatopcionaltable (por defecto) o json.

waf show

cdnctl waf show <ref> [--account <uuid>] [--format table|json]

Una solicitud bloqueada en detalle. <ref> es el Reference ID de la página de bloqueo que vio su visitante (32 caracteres), o al menos sus 12 primeros caracteres, como los muestra la tabla del panel. Busca en los últimos 30 días de los sitios de esta cuenta e imprime la solicitud, cada regla que coincidió con los datos coincidentes y un diagnóstico — por ejemplo, si una subida se bloqueó solo porque superaba la parte del cuerpo que inspecciona el WAF. Termina con el código 1 si no hay coincidencias.

OpciónDescripción
--accountopcionalUUID de la cuenta. Por defecto, la guardada con cdnctl accounts use.
--formatopcionaltable (por defecto) o json.

logs status / logs list

cdnctl logs status [--account <uuid>]
cdnctl logs list [--account <uuid>] [--day YYYY-MM-DD] [--format table|json]

logs status muestra si la entrega está activa, si las IP se enmascaran y cuántos días se conservan los archivos. logs list lista los archivos de un día UTC — uno por edge cada cinco minutos.

OpciónDescripción
--accountopcionalUUID de la cuenta. Por defecto, la guardada con cdnctl accounts use.
--dayopcionalDía UTC, YYYY-MM-DD. Por defecto: hoy (UTC).
--formatopcionaltable (por defecto) o json.

logs pull

cdnctl logs pull [--account <uuid>] [--day YYYY-MM-DD] [--out <dir>]

Descarga todos los archivos de un día UTC en una carpeta. Al repetirlo solo trae los nuevos; esa carpeta es la caché que usa logs grep.

OpciónDescripción
--accountopcionalUUID de la cuenta. Por defecto, la guardada con cdnctl accounts use.
--dayopcionalDía UTC, YYYY-MM-DD. Por defecto: hoy (UTC).
--outopcionalCarpeta de destino. Por defecto: cdntr-logs/<día>.

logs grep

cdnctl logs grep --from "2026-09-25 14:00" --to "2026-09-25 15:00" \
  --status 5xx --path /api/ --format table
cdnctl logs grep --from 14:00 --ip 203.0.113.0/24 --count

Busca un intervalo en su propio equipo: descarga solo los archivos de cinco minutos que se solapan con el intervalo (omitiendo los que ya están en caché) y filtra cada línea. Los filtros se combinan; sin filtro se imprime cada línea del intervalo. La salida son las líneas JSON en bruto, listas para jq.

OpciónDescripción
--fromobligatorioInicio del intervalo: 2026-09-25T14:00, "2026-09-25 14:00", 14:00 (hoy) o RFC 3339. Una hora sin zona es la hora local de su equipo.
--toopcionalFin del intervalo (excluido), mismos formatos. Por defecto: ahora.
--ipopcionalDirección del cliente o bloque CIDR, p. ej. 203.0.113.7 o 203.0.113.0/24.
--statusopcionalCódigo o clase de estado, separados por comas: 404, 5xx, 429,503.
--hostopcionalNombre de host exacto, p. ej. www.example.com.
--pathopcionalTexto que debe contener la ruta, p. ej. /api/.
--methodopcionalMétodo HTTP, p. ej. POST.
--cacheopcionalResultado de caché: HIT, MISS, EXPIRED, STALE, BYPASS…
--countryopcionalCódigo de país de dos letras del cliente, p. ej. TR.
--textopcionalCualquier texto que deba contener la línea (user agent, referer…).
--formatopcionaljson (por defecto, una línea por solicitud) o table.
--countopcionalImprime solo el número de líneas coincidentes.
--cache-diropcionalCarpeta de caché local. Por defecto: cdntr-logs, compartida con logs pull.