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.
delete o revoke requiere un flag --yes explícito. Sin él, el comando termina con un error y no realiza ningún cambio.
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ón | Descripción | |
|---|---|---|
| --check | opcional | Solo informa si existe una versión más reciente; no cambia nada |
| --yes | opcional | Aplica la actualización sin pedir confirmación |
| --version | opcional | Actualiza (o revierte) a una versión específica en lugar de la más reciente |
| --bin-dir | opcional | Directorio 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ón | Descripción | |
|---|---|---|
| --password-login | opcional | Iniciar sesión con correo y contraseña en lugar del navegador (se elige solo cuando no hay terminal, p. ej. CI) |
| opcional | Dirección de correo electrónico de la cuenta | |
| --password | opcional | Contraseña de la cuenta |
| --endpoint | opcional | URL 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ón | Descripción | |
|---|---|---|
| --endpoint | opcional | URL base de la API |
| --token | opcional | Token Bearer. Alternativamente, defina la variable de entorno CDNCTL_TOKEN |
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ón | Descripción | |
|---|---|---|
-r | Sube un directorio de forma recursiva. | |
--force | Sobrescribe 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --name | obligatorio | Nombre de la app (compatible con slug) |
| --image | obligatorio | Ruta de la imagen del contenedor, p. ej. registry.example.com/acme/api |
| --tag | opcional | Etiqueta de la imagen. Predeterminado: cadena vacía |
| --port | opcional | Puerto del contenedor en el que escucha la app. Predeterminado: 8080 |
| --healthcheck | opcional | Ruta HTTP de verificación de estado. Predeterminado: /health |
| --healthcheck-type | opcional | Tipo de verificación de estado: http, tcp o none |
| --metrics-port | opcional | Puerto que expone las métricas de Prometheus |
| --metrics-path | opcional | Ruta que expone las métricas de Prometheus, p. ej. /metrics |
| --replicas | opcional | Número de réplicas. Predeterminado: 1 |
| --plan | opcional | Código del plan de recursos. Predeterminado: starter |
| --domain | opcional | Dominio personalizado para asociar |
| --env-json | opcional | Objeto JSON de variables de entorno. Los valores son visibles en las respuestas GET. |
| --secrets-json | opcional | Objeto JSON de secretos. Los valores se cifran y nunca se devuelven después de la creación. |
| --registry-credential | opcional | UUID de una credencial de registro para imágenes privadas |
| --persistent-mount-path | opcional | Ruta de montaje del volumen persistente, p. ej. /app/data |
| --persistent-storage-gb | opcional | Tamaño del volumen persistente en GB |
--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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --image | opcional | Nueva ruta de la imagen |
| --tag | opcional | Nueva etiqueta de la imagen |
| --port | opcional | Puerto del contenedor |
| --replicas | opcional | Número de réplicas |
| --healthcheck | opcional | Ruta de verificación de estado |
| --healthcheck-type | opcional | Tipo de verificación de estado: http, tcp o none |
| --metrics-port | opcional | Puerto que expone las métricas de Prometheus |
| --metrics-path | opcional | Ruta que expone las métricas de Prometheus |
| --domain | opcional | Dominio para asociar. Pase una cadena vacía para eliminarlo. |
| --env-json | opcional | Reemplaza todas las variables de entorno con este objeto JSON |
| --secrets-json | opcional | Reemplaza todos los secretos con este objeto JSON. Los valores nunca se devuelven. |
| --registry-credential | opcional | UUID de la credencial de registro. Pase una cadena vacía para eliminarla. |
| --persistent-mount-path | opcional | Ruta 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --replicas | obligatorio | Nú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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --revision | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --status | obligatorio | Cadena de estado objetivo, p. ej. running |
| --timeout | opcional | Segundos máximos de espera. Predeterminado: 300 |
| --interval | opcional | Intervalo 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --tail | opcional | Nú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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --tail | opcional | Nú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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --yes | obligatorio | Confirmació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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
container registry-credentials create
cdnctl container registry-credentials create \
--account <uuid> \
--name <name> \
--password <token> \
[--registry-url <url>] \
[--username <user>]
| Opción | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --name | obligatorio | Nombre descriptivo para esta credencial |
| --password | obligatorio | Contraseña del registro o token de acceso |
| --registry-url | opcional | URL del registro. Predeterminado: https://index.docker.io/v1/ |
| --username | opcional | Nombre 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --credential | obligatorio | UUID de la credencial obtenido de registry-credentials list |
| --yes | obligatorio | Confirmació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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --plan | opcional | Código del plan de recursos. Predeterminado: starter |
| --env-prefix | opcional | Prefijo de variable de entorno para las credenciales inyectadas. Predeterminado: DB |
| --storage-mb | opcional | Tamaño de almacenamiento en MB |
| --url-scheme | opcional | Esquema 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
container addons enable-redis
cdnctl container addons enable-redis \
--account <uuid> \
--app <uuid> \
[--plan <code>] \
[--env-prefix <prefix>]
| Opción | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --plan | opcional | Código del plan de recursos. Predeterminado: starter |
| --env-prefix | opcional | Prefijo de variable de entorno. Predeterminado: REDIS |
container addons disable-redis
cdnctl container addons disable-redis --account <uuid> --app <uuid>
| Opción | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --plan | opcional | Código del plan de recursos. Predeterminado: starter |
| --env-prefix | opcional | Prefijo de variable de entorno para las credenciales inyectadas. Predeterminado: DATABASE |
| --storage-mb | opcional | Tamañ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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --delete-data | opcional | Destruye permanentemente todos los datos de Postgres |
| --confirmation | opcional | Nombre 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --plan | opcional | Código del plan de recursos. Predeterminado: starter |
| --env-prefix | opcional | Prefijo de variable de entorno para las credenciales inyectadas. Predeterminado: NATS |
| --storage-mb | opcional | Tamañ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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --delete-data | opcional | Destruye 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --file | obligatorio | Ruta 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --file | obligatorio | Ruta al archivo compose (máx. 256 KB) |
| --yes | obligatorio | Confirma la creación de recursos |
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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --file | obligatorio | Ruta 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --file | obligatorio | Ruta local al archivo .tar.gz |
| --target-path | opcional | Ruta 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --import | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --name | obligatorio | Nombre de la tarea |
| --schedule | obligatorio | Expresión cron, p. ej. */30 * * * * |
| --path | obligatorio | Ruta HTTP a llamar, p. ej. /jobs/run |
| --method | opcional | Método HTTP. Predeterminado: POST |
| --secret-header-name | opcional | Nombre de la cabecera en la que enviar el token, p. ej. X-Token |
| --secret-source | opcional | Nombre del secreto de la app o variable de entorno cuyo valor se envía como valor de la cabecera |
| --enabled | opcional | Crea 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --job | obligatorio | UUID de la tarea obtenido de jobs list |
| --wait | opcional | Bloquea hasta que finalice la ejecución |
| --timeout | opcional | Segundos máximos de espera cuando se establece --wait. Predeterminado: 180 |
| --interval | opcional | Intervalo 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --job | obligatorio | UUID de la tarea obtenido de jobs list |
| --yes | obligatorio | Confirmació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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
object-storage buckets create
cdnctl object-storage buckets create \
--account <uuid> \
--name <bucket-name> \
[--visibility private|public]
| Opción | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --name | obligatorio | Nombre del bucket (único globalmente dentro de la plataforma) |
| --visibility | opcional | private 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --bucket | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --bucket | obligatorio | UUID del bucket obtenido de buckets list |
| --yes | obligatorio | Confirmació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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --bucket | opcional | UUID del bucket al que se limita la clave |
| --name | opcional | Nombre 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --key | obligatorio | UUID 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --key | obligatorio | UUID de la clave de acceso a revocar |
| --yes | obligatorio | Confirmació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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --bucket | obligatorio | UUID del bucket |
| --access-key | opcional | UUID de la clave de acceso que se usará para el enlace |
| --env-prefix | opcional | Prefijo 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta |
| --app | obligatorio | UUID de la app |
| --binding | obligatorio | UUID del enlace obtenido de bindings list o de la respuesta de app show |
| --yes | obligatorio | Confirmació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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta. |
| --path | opcional | Ruta a purgar, p. ej. /sitemap.xml. Repita la opción para más rutas. |
| --paths | opcional | Varias rutas en una lista separada por comas. |
| --type | opcional | exact (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é. |
| --save | opcional | Guarda 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ón | Descripción | |
|---|---|---|
| --account | obligatorio | UUID de la cuenta. |
| --yes | obligatorio | Obligatorio: 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ón | Descripción | |
|---|---|---|
| --account | opcional | UUID de la cuenta. Por defecto, la guardada con cdnctl accounts use. |
| --range | opcional | Intervalo: 1h (por defecto), 1d, 7d o 30d. |
| --format | opcional | table (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ón | Descripción | |
|---|---|---|
| --account | opcional | UUID de la cuenta. Por defecto, la guardada con cdnctl accounts use. |
| --format | opcional | table (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ón | Descripción | |
|---|---|---|
| --account | opcional | UUID de la cuenta. Por defecto, la guardada con cdnctl accounts use. |
| --day | opcional | Día UTC, YYYY-MM-DD. Por defecto: hoy (UTC). |
| --format | opcional | table (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ón | Descripción | |
|---|---|---|
| --account | opcional | UUID de la cuenta. Por defecto, la guardada con cdnctl accounts use. |
| --day | opcional | Día UTC, YYYY-MM-DD. Por defecto: hoy (UTC). |
| --out | opcional | Carpeta 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ón | Descripción | |
|---|---|---|
| --from | obligatorio | Inicio 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. |
| --to | opcional | Fin del intervalo (excluido), mismos formatos. Por defecto: ahora. |
| --ip | opcional | Dirección del cliente o bloque CIDR, p. ej. 203.0.113.7 o 203.0.113.0/24. |
| --status | opcional | Código o clase de estado, separados por comas: 404, 5xx, 429,503. |
| --host | opcional | Nombre de host exacto, p. ej. www.example.com. |
| --path | opcional | Texto que debe contener la ruta, p. ej. /api/. |
| --method | opcional | Método HTTP, p. ej. POST. |
| --cache | opcional | Resultado de caché: HIT, MISS, EXPIRED, STALE, BYPASS… |
| --country | opcional | Código de país de dos letras del cliente, p. ej. TR. |
| --text | opcional | Cualquier texto que deba contener la línea (user agent, referer…). |
| --format | opcional | json (por defecto, una línea por solicitud) o table. |
| --count | opcional | Imprime solo el número de líneas coincidentes. |
| --cache-dir | opcional | Carpeta de caché local. Por defecto: cdntr-logs, compartida con logs pull. |