# Modos de despliegue: ejecuta el motor en local o en la nube

Dos formas de ejecutar el motor: en local, en tu máquina, o en la nube de AfterPack con una clave Pro.

Source: https://www.afterpack.dev/es/docs/deployment-modes

Un modo de despliegue cambia dónde se hace el trabajo y qué toca tu código fuente. No cambia lo que hacen las transformaciones: la misma entrada y los mismos [ajustes](https://www.afterpack.dev/es/docs/config) producen la misma protección dondequiera que se ejecute el motor. AfterPack funciona en dos modos.

## Modo 1: Local (Free)

[`npx afterpack@latest <path>`](https://www.afterpack.dev/es/docs/cli#usage) ejecuta AfterPack de forma nativa en tu máquina, igual que cualquier [plugin de framework](https://www.afterpack.dev/es/docs/frameworks) sin una [`key`](https://www.afterpack.dev/es/docs/config#key) configurada. **Tu código fuente nunca sale de tu sistema de archivos.** Instalas, compilas y listo. Sin [cuenta](https://www.afterpack.dev/es/docs/accounts), sin clave, sin ida y vuelta por la red para la ofuscación en sí.

Es la vía por defecto y la que debería seguir casi cualquier build.

Dos ajustes exclusivos de Pro se comportan de otra forma aquí: los flags de refuerzo [`transforms.selfIntegrity.enabled`](https://www.afterpack.dev/es/docs/config#transforms-kind-enabled) y [`transforms.comparisonHardening.enabled`](https://www.afterpack.dev/es/docs/config#transforms-kind-enabled) no se aplican, y una [directiva `@afterpack`](https://www.afterpack.dev/es/docs/directives#free-builds) por región que aumenta la protección detiene el build. Consulta [Pro](https://www.afterpack.dev/es/docs/pro).

> **Una llamada de red que no es ofuscación**
>
> Un build que emite un [diagnóstico](https://www.afterpack.dev/es/docs/diagnostics) `error` o `critical` envía diagnósticos anónimos del build: código, severidad, versiones y recuentos agrupados por rangos, nunca código fuente. Un build limpio no envía nada. Desactívalo con [`AFTERPACK_telemetry_enabled=false`](https://www.afterpack.dev/es/docs/config#telemetry-enabled), o con [`telemetry.enabled`](https://www.afterpack.dev/es/docs/config#telemetry-enabled) en las opciones de tu plugin. Más detalles en [Privacidad y manejo de datos](https://www.afterpack.dev/es/docs/privacy).

## Modo 2: Nube de AfterPack (Pro)

El mismo paquete, más una [`key`](https://www.afterpack.dev/es/docs/config#key). Es una clave de configuración normal, que se puede establecer de las tres formas que cualquier otra: `--key=ap_v1_…` en la línea de comandos, [`AFTERPACK_key=ap_v1_…`](https://www.afterpack.dev/es/docs/config#key) en el entorno o `"key"` en `afterpack.json`. El flag tiene prioridad sobre el entorno, y el entorno sobre el archivo; [Configuración](https://www.afterpack.dev/es/docs/config) tiene la regla de precedencia completa.

> **Una clave va en el entorno, no en la línea de comandos**
>
> `--key=` existe para una ejecución local puntual. Una línea de comandos acaba en el historial del shell, en los logs de CI y en la salida de `ps`, así que usa [`AFTERPACK_key`](https://www.afterpack.dev/es/docs/config#key) para cualquier cosa compartida. No hay paso de inicio de sesión ni credencial aparte: la [clave del panel](https://www.afterpack.dev/es/docs/dashboard/api-keys) es todo lo que necesitas.

Cuando se resuelve una `key`, el motor agrupa tus archivos en lotes y llama a [`POST /v1/obfuscate/batch`](https://www.afterpack.dev/es/docs/cloud-api). La nube ejecuta el build del motor [Pro](https://www.afterpack.dev/es/docs/pro) y devuelve la salida ofuscada en streaming a medida que termina cada archivo; tu build escribe cada resultado según llega. El código fuente se procesa solo en memoria y no se conserva. Se almacena un único artefacto: el [Protection Map](https://www.afterpack.dev/es/docs/protection-map) de cada build, que alimenta el [panel](https://www.afterpack.dev/es/docs/dashboard/builds) y que puedes [desactivar por proyecto](https://www.afterpack.dev/es/docs/protection-map#turning-it-off). El contrato de comunicación completo está en la [referencia de la API en la nube](https://www.afterpack.dev/es/docs/cloud-api).

**Si la nube cae, falla de forma segura (fail closed).** Si la nube no es accesible (fallo de DNS, conexión rechazada, reintentos agotados ante un `5xx` o un tiempo de espera agotado en la petición), el build falla en lugar de recurrir a la salida del nivel Free. [Diagnósticos](https://www.afterpack.dev/es/docs/diagnostics#fail-closed-no-exceptions) define esa regla y los códigos de salida que la respaldan.

El cliente reintenta `503`/`504` con un calendario de 1 s / 4 s / 16 s (cuatro intentos en total) y respeta el `Retry-After` de un `429` exactamente una vez antes de rendirse. Cualquier otro estado no se reintenta y aparece como un fallo del build con el propio [código de diagnóstico](https://www.afterpack.dev/es/docs/diagnostics) de la API.

## Cómo elegir entre ellos

| Situación | Modo |
|---|---|
| Por defecto: cero fricción, nada sale de tu máquina | Modo 1 (Local) |
| Quieres que las [directivas por región](https://www.afterpack.dev/es/docs/directives) se apliquen de verdad | Modo 2 (Nube) |
| Quieres [Protection Maps](https://www.afterpack.dev/es/docs/protection-map) almacenados y el [historial de builds](https://www.afterpack.dev/es/docs/dashboard/builds) en el panel | Modo 2 (Nube) |
| Por cumplimiento normativo, el código fuente no puede salir de tu infraestructura | Modo 1 (Local) |

## Otras formas de despliegue

### Cloudflare Workers

El motor es lo bastante pequeño como para ejecutarse dentro de un Cloudflare Worker, y ahí es donde se ejecutan los builds en la nube: tu bundle se transforma en un isolate de Worker y se devuelve en milisegundos, y un archivo demasiado grande para un Worker pasa a un contenedor automáticamente. Puedes ejecutar AfterPack en tu propio Worker de la misma forma: consulta [Ejecutar AfterPack en un Cloudflare Worker](https://www.afterpack.dev/es/docs/workers).

Desde tu propio Worker, pasa tu clave Pro a la misma llamada a `obfuscate()` y el build se ejecuta en el Modo 2, en la nube de AfterPack: consulta [Pro, desde tu propio Worker](https://www.afterpack.dev/es/docs/workers#pro-from-your-own-worker).

### Código fuente que no puede salir de tu infraestructura

El Modo 1 ya resuelve esto: Free, local, sin llamada de red, nada que revisar. Para un despliegue Pro privado dentro de tu propia cuenta, consulta [Enterprise](https://www.afterpack.dev/es/docs/enterprise); no es algo que puedas activar hoy.

## Siguiente

- [Referencia de la API en la nube](https://www.afterpack.dev/es/docs/cloud-api): el contrato completo de petición/respuesta del Modo 2.
- [Pro](https://www.afterpack.dev/es/docs/pro): qué añade Pro sobre el motor local.
- [Privacidad y manejo de datos](https://www.afterpack.dev/es/docs/privacy): qué almacena cada modo y durante cuánto tiempo.
- [Niveles](https://www.afterpack.dev/es/docs/tiers): qué plan desbloquea el Modo 2 y qué mide.
- [Referencia de la CLI](https://www.afterpack.dev/es/docs/cli): el comando que impulsa el Modo 1.
- [Configuración](https://www.afterpack.dev/es/docs/config): cada clave, flag y variable, incluida [`key`](https://www.afterpack.dev/es/docs/config#key).
- [Modelo de amenaza](https://www.afterpack.dev/es/docs/threat-model): qué cambia, y qué no, cuando el motor se traslada.
