---
title: "Installation"
description: "Choose the DrowAI deployment model and prepare the host requirements before setup."
section: "Setup"
updated: 2026-07-10
tags: ["installation","setup","docker"]
source: "/user-guide/installation"
---

# Installation

Choose the DrowAI deployment model and prepare the host requirements before setup.

DrowAI has two supported Docker deployment models. Both use the same
architecture: **Management** owns the UI, API, database, and task coordination,
while a **Runner** starts the isolated Kali task containers and executes runtime
work.

The difference is where those services run.

<nav class="installation-paths" aria-label="Choose a deployment model">
  <a class="installation-path" href="/user-guide/standalone-installation">
    <strong>Standalone installation</strong>
    <span>Management and Runner on one Linux host</span>
  </a>
  <a class="installation-path" href="/user-guide/distributed-installation">
    <strong>Distributed installation</strong>
    <span>Management and Runner on separate Linux hosts</span>
  </a>
</nav>

> These deployment paths are intended for evaluation and testing. They are not
> a hardened, internet-facing production configuration.

## Before you begin

Each host needs:

- A supported Linux installation on `x86_64`/`amd64` or `arm64`/`aarch64`.
- Docker Engine with the Docker Compose v2 plugin.
- Permission to access the Docker daemon.
- Internet access while images and dependencies are downloaded.

Check Docker before continuing:

```bash
docker --version
docker compose version
docker info
```

The Management host also needs Git to download the DrowAI repository. A
Distributed Runner host does not need the full repository; it receives a
self-contained package from Management.

You do **not** create a `.env` file, database, JWT secret, encryption key, or
Runner token. DrowAI generates and stores deployment secrets during startup and
the browser setup wizard.

## Choose a path

Use **Standalone installation** when evaluating DrowAI on one Linux host.

Use **Distributed installation** when Management and Runner services should run
on separate Linux hosts.

Use **Installation troubleshooting** after a setup starts but the UI, Runner
registration, or Runner readiness does not behave as expected.
