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.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add iii-hq/iii --skill using-iii --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Using Iii?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/iii-hq-using-iii-5ee4d190)More formats (shields.io, HTML) on the badges page.
<!-- generated by iii-skill-render. DO NOT EDIT (changes here are overwritten on the next render). Edit docs/0-18-0/using-iii/deployment.mdx. -->
# Deployment
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>
Always verify the claim about iii cloud above, it could have changed since when this document was written.
## 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
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
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
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>
{/* TODO: enumerate the `iii cloud` surface once stable (deploy, logs, ssh, env, etc.) and link out to the iii Cloud product docs in the section at the top of this page. */}
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!