> ## Documentation Index
> Fetch the complete documentation index at: https://motiadev-mintlify-e5ee0082.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy an iii engine and workers to production

> Run the iii engine and its workers in development, staging, and production, including iii Cloud deployments and the iii cloud CLI command group.

This page covers running the iii engine and its workers in a production environment. For local
development, see the [Quickstart](../quickstart) and the [Engine](./engine) page.

## iii Cloud deployments

The `iii cloud` subcommand group will manage hosted iii deployments. See [CLI](./cli) for the
command surface as it stabilizes.

<Note>iii's cloud will be available soon.</Note>

## Deploy with Docker

Generate the Docker assets with the CLI and bring them up with Compose. Use
`iii project init --docker` for a fresh project, or `iii project generate-docker` to add Docker
assets to an existing one:

```bash theme={null}
iii project generate-docker
```

Both forms emit three files at the project root: `Dockerfile`, `docker-compose.yml`, and `.env`.
Re-running the generator does not overwrite existing files, so edits you make to the templates
stick.

Start the stack:

```bash theme={null}
docker compose up -d
```

The generated `docker-compose.yml` exposes:

| Port  | Service                            |
| ----- | ---------------------------------- |
| 49134 | SDK WebSocket (worker connections) |
| 3111  | REST API                           |
| 3112  | Stream API                         |

The Dockerfile builds against `iiidev/iii:latest` (distroless, non-root). The compose file ships
commented-out Redis and RabbitMQ services that can be uncommented when workers need external
adapters.

## Configure a reverse proxy

The engine does not terminate TLS. Place a reverse proxy in front of it to handle TLS and route the
three transport surfaces (`/api/*`, `/stream/*`, `/ws`) to the right ports.

### Caddy

```
your-domain.com {
    handle /api/* {
        reverse_proxy 127.0.0.1:3111
    }
    handle /stream/* {
        reverse_proxy 127.0.0.1:3112
    }
    handle /ws {
        reverse_proxy 127.0.0.1:49134
    }
    handle {
        reverse_proxy 127.0.0.1:3111
    }
}
```

<Note>
  This is only an example configuration. Refer to the [Caddy
  documentation](https://caddyserver.com/docs/) for full configuration.
</Note>

### Nginx

```nginx theme={null}
server {
    listen 443 ssl;
    server_name your-domain.com;

    location /api/ {
        proxy_pass http://127.0.0.1:3111;
    }

    location /ws {
        proxy_pass http://127.0.0.1:49134;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /stream/ {
        proxy_pass http://127.0.0.1:3112;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location / {
        proxy_pass http://127.0.0.1:3111;
    }
}
```

<Note>
  This is only an example configuration. See the [Nginx documentation](https://nginx.org/en/docs/)
  for the full configuration such as SSL, header, and proxy options.
</Note>
