# Режими розгортання: рушій локально або в хмарі

Два способи запускати рушій: локально на вашій машині або в хмарі AfterPack із ключем Pro.

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

Режим розгортання змінює те, де виконується робота і що має доступ до вашого вихідного коду. Він не змінює того, що роблять трансформації: той самий вхід і ті самі [налаштування](https://www.afterpack.dev/uk/docs/config) дають той самий захист, де б не працював рушій. AfterPack працює у двох режимах.

## Режим 1: Локальний (Free)

[`npx afterpack@latest <path>`](https://www.afterpack.dev/uk/docs/cli#usage) запускає AfterPack нативно на вашій машині, так само як і кожен [плагін для фреймворку](https://www.afterpack.dev/uk/docs/frameworks), у якому не налаштовано [`key`](https://www.afterpack.dev/uk/docs/config#key). **Ваш вихідний код ніколи не залишає вашу файлову систему.** Встановили, зібрали, готово. Жодного [облікового запису](https://www.afterpack.dev/uk/docs/accounts), жодного ключа, жодного мережевого запиту для самої обфускації.

Це шлях за замовчуванням, і саме ним варто йти майже кожній збірці.

Два параметри лише для Pro поводяться тут інакше: прапорці посилення [`transforms.selfIntegrity.enabled`](https://www.afterpack.dev/uk/docs/config#transforms-kind-enabled) і [`transforms.comparisonHardening.enabled`](https://www.afterpack.dev/uk/docs/config#transforms-kind-enabled) не застосовуються, а [директива `@afterpack`](https://www.afterpack.dev/uk/docs/directives#free-builds) для окремої ділянки, яка посилює захист, зупиняє збірку. Див. [Pro](https://www.afterpack.dev/uk/docs/pro).

> **Один мережевий виклик, який не є обфускацією**
>
> Збірка, яка видає [діагностику](https://www.afterpack.dev/uk/docs/diagnostics) рівня `error` або `critical`, надсилає анонімну діагностику збірки: код, рівень серйозності, версії, округлені за діапазонами лічильники, ніколи не вихідний код. Чиста збірка нічого не надсилає. Вимкніть це через [`AFTERPACK_telemetry_enabled=false`](https://www.afterpack.dev/uk/docs/config#telemetry-enabled) або [`telemetry.enabled`](https://www.afterpack.dev/uk/docs/config#telemetry-enabled) у параметрах плагіна. Подробиці в розділі [Конфіденційність і обробка даних](https://www.afterpack.dev/uk/docs/privacy).

## Режим 2: Хмара AfterPack (Pro)

Той самий пакет плюс [`key`](https://www.afterpack.dev/uk/docs/config#key). Це звичайний ключ конфігурації, який задається тими ж трьома способами, що й будь-який інший: `--key=ap_v1_…` у командному рядку, [`AFTERPACK_key=ap_v1_…`](https://www.afterpack.dev/uk/docs/config#key) у середовищі або `"key"` в `afterpack.json`. Прапорець має пріоритет над середовищем, а середовище над файлом; повне правило пріоритету описано на сторінці [Конфігурація](https://www.afterpack.dev/uk/docs/config).

> **Ключ має бути в середовищі, а не в командному рядку**
>
> `--key=` призначений для разового локального запуску. Командний рядок потрапляє в історію оболонки, журнали CI та вивід `ps`, тому для всього спільного використовуйте [`AFTERPACK_key`](https://www.afterpack.dev/uk/docs/config#key). Немає кроку входу й немає окремих облікових даних: [ключ із дашборду](https://www.afterpack.dev/uk/docs/dashboard/api-keys) — це все, що потрібно.

Коли `key` задано, рушій групує ваші файли в пакети й викликає [`POST /v1/obfuscate/batch`](https://www.afterpack.dev/uk/docs/cloud-api). Хмара запускає збірку рушія [Pro](https://www.afterpack.dev/uk/docs/pro) і потоково повертає обфускований результат у міру завершення кожного файлу; ваша збірка записує кожен результат, щойно він надходить. Вихідний код обробляється лише в пам'яті й не зберігається. Зберігається один артефакт: [Protection Map](https://www.afterpack.dev/uk/docs/protection-map) для кожної збірки, на якій працює [дашборд](https://www.afterpack.dev/uk/docs/dashboard/builds) і яку можна [вимкнути для проєкту](https://www.afterpack.dev/uk/docs/protection-map#turning-it-off). Повний контракт обміну описано в [довіднику Cloud API](https://www.afterpack.dev/uk/docs/cloud-api).

**Коли хмара недоступна, збірка завершується помилкою (fail closed).** Якщо хмара недосяжна (збій DNS, відмова в з'єднанні, вичерпано повторні спроби після `5xx` або тайм-аут запиту), збірка завершується помилкою, а не переходить на результат тарифу Free. Це правило і коди виходу за ним описано в розділі [Діагностика](https://www.afterpack.dev/uk/docs/diagnostics#fail-closed-no-exceptions).

Клієнт повторює запити після `503`/`504` за графіком 1 с / 4 с / 16 с (загалом чотири спроби) і рівно один раз враховує `Retry-After` у відповіді `429`, перш ніж здатися. Будь-який інший статус не повторюється і завершує збірку помилкою з власним [кодом діагностики](https://www.afterpack.dev/uk/docs/diagnostics) API.

## Як обрати

| Ситуація | Режим |
|---|---|
| За замовчуванням: без жодних зусиль, нічого не залишає вашу машину | Режим 1 (Локальний) |
| Ви хочете, щоб [директиви для ділянок](https://www.afterpack.dev/uk/docs/directives) справді застосовувалися | Режим 2 (Хмара) |
| Ви хочете зберігати [Protection Map](https://www.afterpack.dev/uk/docs/protection-map) та [історію збірок](https://www.afterpack.dev/uk/docs/dashboard/builds) у дашборді | Режим 2 (Хмара) |
| Вимоги відповідності забороняють вихідному коду залишати вашу інфраструктуру | Режим 1 (Локальний) |

## Інші варіанти розгортання

### Cloudflare Workers

Рушій достатньо малий, щоб працювати всередині Cloudflare Worker, і саме там виконуються хмарні збірки: ваш бандл трансформується в ізоляті Worker і повертається за мілісекунди, а файл, завеликий для Worker, автоматично переходить у контейнер. Так само ви можете запустити AfterPack у власному Worker: див. [Запуск AfterPack у Cloudflare Worker](https://www.afterpack.dev/uk/docs/workers).

З власного Worker передайте свій ключ Pro тому самому виклику `obfuscate()`, і збірка виконається в Режимі 2, у хмарі AfterPack: див. [Pro з вашого власного Worker](https://www.afterpack.dev/uk/docs/workers#pro-from-your-own-worker).

### Вихідний код, який не може залишати вашу інфраструктуру

Режим 1 уже вирішує це: Free, локально, без мережевих викликів, нічого перевіряти. Про приватне розгортання Pro у вашому власному обліковому записі див. [Enterprise](https://www.afterpack.dev/uk/docs/enterprise); сьогодні це не можна просто увімкнути.

## Далі

- [Довідник Cloud API](https://www.afterpack.dev/uk/docs/cloud-api): повний контракт запитів і відповідей для Режиму 2.
- [Pro](https://www.afterpack.dev/uk/docs/pro): що Pro додає до локального рушія.
- [Конфіденційність і обробка даних](https://www.afterpack.dev/uk/docs/privacy): що зберігає кожен режим і як довго.
- [Тарифи](https://www.afterpack.dev/uk/docs/tiers): який план відкриває Режим 2 і що він тарифікує.
- [Довідник CLI](https://www.afterpack.dev/uk/docs/cli): команда, яка запускає Режим 1.
- [Конфігурація](https://www.afterpack.dev/uk/docs/config): кожен ключ, прапорець і змінна, зокрема [`key`](https://www.afterpack.dev/uk/docs/config#key).
- [Модель загроз](https://www.afterpack.dev/uk/docs/threat-model): що змінюється, а що ні, коли рушій переноситься.
