Ir al contenido

Buscar en la documentación

Busca en la documentación de Skiffly

CLI

Instala la CLI `skiffly`, inicia sesión, vincula un directorio y despliega. Los comandos siguen a la CLI de Railway siempre que Skiffly tenga un equivalente.

npm i -g skiffly          # o: pnpm add -g skiffly, o npx skiffly <command>
skiffly --help

Node.js 20+. La CLI es un único archivo autocontenido sin dependencias nativas; incorpora el servidor MCP y el runtime de configuración como código.

Iniciar sesión#

skiffly login                     # abre app.skiffly.dev/cli-login en el navegador; confirma ahí
skiffly login --browserless       # máquinas sin navegador: imprime la URL y el código de emparejamiento y espera la confirmación
skiffly login --token skiffly_…   # no interactivo: un token de espacio de trabajo de Configuración → Desarrollador
skiffly whoami
skiffly logout                    # revoca el token de cuenta en el servidor y lo olvida localmente

skiffly login funciona como railway login: la CLI abre el panel, confirmas el código de emparejamiento con la sesión iniciada y la CLI recibe un token de cuenta (skiffly_acct_…, válido por 90 días, todos tus espacios de trabajo). Las sesiones se listan y pueden revocarse en Configuración → Desarrollador → Sesiones de CLI y apps conectadas. El token se guarda en ~/.config/skiffly/config.json (modo 600). En CI define SKIFFLY_TOKEN=skiffly_… (un token de espacio de trabajo con el scope write); la variable de entorno tiene prioridad sobre el token guardado.

Vincular un directorio#

skiffly init                      # proyecto nuevo, vinculado a este directorio
skiffly link                      # elige un proyecto / entorno / servicio existente
skiffly link -p my-app -e staging -s web
skiffly status                    # qué está vinculado, más el estado y los dominios de cada servicio
skiffly unlink

Los vínculos se guardan por ruta en la configuración global y se encuentran desde los subdirectorios. SKIFFLY_PROJECT_ID, SKIFFLY_ENVIRONMENT_ID y SKIFFLY_SERVICE_ID tienen prioridad sobre el vínculo, y todo comando que necesite un destino acepta -p/--project, -e/--environment, -s/--service (id o nombre).

Desplegar#

skiffly up                        # sube el directorio actual, lo compila y transmite los logs
skiffly up ./apps/api             # sube otro directorio
skiffly up -d                     # se desconecta en cuanto el despliegue queda creado
skiffly up --git                  # despliega en cambio el HEAD pusheado de la rama actual desde GitHub
skiffly up --git --commit <sha>
skiffly redeploy                  # el último build otra vez, con la configuración actual
skiffly restart                   # reinicia los contenedores, sin build
skiffly deploy --image ghcr.io/acme/api:1.4 --name api --port 8080 -v LOG_LEVEL=info
skiffly deploy --template postgres
skiffly deployment list

skiffly up funciona como railway up: el directorio se empaqueta en un tarball (se omiten los archivos que coinciden con .gitignore y .skifflyignore, y .git siempre; máximo 100 MB comprimido), se sube al servicio vinculado y se compila con Railpack o con el Dockerfile del servicio; no hace falta commit ni push. El despliegue aparece en el panel como Subida desde CLI, y el servicio se crea si el proyecto no tiene ninguno (-y omite la pregunta). --git conserva el comportamiento anterior: el directorio debe ser un repositorio git cuyo origin esté conectado al servicio, y Skiffly compila el HEAD pusheado de la rama.

Importar desde Railway#

skiffly import --from-railway     # interactivo: token de Railway → proyecto → proyecto de Skiffly, con una tabla de resumen
skiffly import --from-railway --railway-token --railway-project <id> --project new --dry-run

Copia servicios (origen, comandos de build/inicio, health checks, cron, réplicas), variables con sus referencias ${{Service.VAR}}, volúmenes, dominios propios y proxies TCP a un proyecto de Skiffly, e imprime lo que todavía requiere un paso manual (registros DNS, datos de los volúmenes). Detalles: Migrar desde Railway.

Logs, shell, run#

skiffly logs -f                   # logs de runtime, en seguimiento
skiffly logs --build              # salida del build; --system para reinicios / OOM
skiffly logs -n 200 --filter "error"
skiffly ssh                       # /bin/sh en un contenedor en ejecución
skiffly ssh -s api -- ls -la /app # comando único, se propaga el código de salida
echo "select 1" | skiffly ssh -s postgres -T -- psql -U postgres
skiffly run -- pnpm dev           # ejecuta un comando local con las variables del servicio

Abrir un shell en un contenedor#

skiffly ssh (alias shell) abre un shell interactivo en la primera réplica en ejecución del servicio; --deployment <id> elige un despliegue, -T desactiva la pseudoterminal para usar tuberías. Las sesiones pasan por la API mediante WebSocket con tu token, quedan en el registro de auditoría, se limitan a cinco por usuario y se cierran tras 30 minutos de inactividad. Ver Seguridad.

Variables, dominios, volúmenes, proxies#

skiffly variables                 # --kv para KEY=value, --shared para las de todo el entorno
skiffly variables set KEY=value [--stdin KEY] [--skip-deploys]
skiffly variables delete KEY
skiffly domain                    # genera un dominio *.skiffly.cloud
skiffly domain app.example.com    # dominio propio, imprime CNAME + TXT
skiffly domain status app.example.com
skiffly volume add --mount-path /data --size 5
skiffly proxy add --port 5432     # proxy TCP público
skiffly connect [service]         # psql / mysql / redis-cli / mongosh a través de un proxy

Entornos y servicios#

skiffly environment               # cambiar de entorno
skiffly environment new staging --duplicate production
skiffly service                   # vincula un servicio; service list; service delete
skiffly open                      # el panel en el navegador (--print para la URL)

Configuración como código, facturación, docs, API directa#

skiffly config init | validate | plan | apply
skiffly billing                   # saldo, plan, uso actual (alias: usage)
skiffly templates [search]
skiffly docs deploy               # busca en la documentación incluida
skiffly api '{ me { login } }'    # GraphQL directo con el token de la CLI; -v '{"id":"…"}' para variables
skiffly mcp                       # servidor MCP por stdio; mcp install claude|cursor|codex

Salida y códigos de salida#

Todo comando de listado tiene --json. Códigos de salida: 0 ok, 1 error, 2 uso incorrecto o sin vínculo, 3 sin autenticar, 4 no encontrado, 5 prohibido o límite del plan, 6 red. SKIFFLY_DEBUG=1 imprime los stack traces.

La tabla completa de comandos está en la referencia de la CLI.