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

# Deployment

> Running iii in development, staging, and production.

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={"theme":{"light":"catppuccin-latte","dark":"dark-plus"}}
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={"theme":{"light":"catppuccin-latte","dark":"dark-plus"}}
docker compose up -d
```

The generated `docker-compose.yml` exposes:

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

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={"theme":{"light":"catppuccin-latte","dark":"dark-plus"}}
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>
