Documentation

Install ARNIE.

ARNIE ships as certified container images from the Red Hat Ecosystem Catalog. Pull them, wire them together, and reach the interface. This guide walks the full deployment, start to finish.

Overview

ARNIE runs as three certified container images that work together:

ImageRolePort
arnie-ai-graniteBundled local model server (Granite via Ollama)11434
arnie-ai-backendThe RMCP engine — generates, governs, executes8085
arnie-ai-uiThe web interface8080

They run on any OCI-compatible container host — Podman or Docker. The examples below use podman; substitute docker if that's your runtime — the commands are identical.

Prerequisites

To run ARNIE and use its full capabilities, you'll want:

A container hostPodman or Docker, on a machine ARNIE's services can run on
A PostgreSQL databaseFor accounts, licensing, and usage — its connection string is passed to the backend
Ansible Automation PlatformExecutes ARNIE's approved playbooks (optional — connect in settings)
A GitHub repositoryStores approved changes as the source of truth (optional)
A clusterWhere approved changes are applied live (optional)

ARNIE is deployment-flexible — it runs standalone on a network, or inside a cluster. AAP, GitHub, and cluster connections are configured in the app's settings after install, and can be added when you need them.

1. Pull the images

Pull all three certified images from the registry:

1
podman pull docker.io/brandonjuimperbinvictus/arnie-ai-granite:1.0.0
podman pull docker.io/brandonjuimperbinvictus/arnie-ai-backend:1.0.5
podman pull docker.io/brandonjuimperbinvictus/arnie-ai-ui:1.0.7

The Granite image is large (~7 GB) — the IBM Granite model is baked in, so nothing is downloaded at runtime and inference stays entirely on your infrastructure. The first pull takes a while; it only happens once.

2. Create a network

Put the containers on a shared network so they can reach each other by name:

2
podman network create arnie-net

3. Run the Granite model server

Start Granite first — the backend connects to it for local inference:

3
podman run -d --name arnie-granite \
  --network arnie-net \
  docker.io/brandonjuimperbinvictus/arnie-ai-granite:1.0.0

Give it a few seconds to load the model, then confirm it's serving:

curl http://localhost:11434/api/tags

You should see granite3.1-dense:8b in the response.

4. Run the backend

Start the RMCP engine, pointing it at Granite and your database:

4
podman run -d --name arnie-backend \
  --network arnie-net \
  -e OLLAMA_BASE_URL=http://arnie-granite:11434 \
  -e DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DBNAME?sslmode=require" \
  -e ARNIE_JWT_SECRET="your-long-random-secret" \
  -p 8085:8085 \
  docker.io/brandonjuimperbinvictus/arnie-ai-backend:1.0.5

The environment variables:

OLLAMA_BASE_URLWhere the backend finds Granite — use the container name on the shared network
DATABASE_URLYour PostgreSQL connection string
ARNIE_JWT_SECRETA long random string used to sign auth tokens — keep it secret and consistent

Confirm it's healthy and connected to the model:

curl http://localhost:8085/health

The response reports the selected model and engine status.

5. Run the interface

Start the web interface on the same network:

5
podman run -d --name arnie-ui \
  --network arnie-net \
  -p 8090:8080 \
  docker.io/brandonjuimperbinvictus/arnie-ai-ui:1.0.7

6. Reach ARNIE

Open the interface in your browser at the host and port you mapped:

http://YOUR_HOST_IP:8090

On the machine itself, that's http://localhost:8090. From another machine on the network, use the host's IP address. Sign up, sign in, then connect your integrations (GitHub, AAP, cluster) from Settings — and make your first request in plain language.

One-command deploy

Prefer to bring everything up at once? Save this as compose.yaml and run podman compose up -d (or docker compose up -d):

services:
  granite:
    image: docker.io/brandonjuimperbinvictus/arnie-ai-granite:1.0.0
    container_name: arnie-granite
    networks: [arnie-net]

  backend:
    image: docker.io/brandonjuimperbinvictus/arnie-ai-backend:1.0.5
    container_name: arnie-backend
    depends_on: [granite]
    environment:
      OLLAMA_BASE_URL: http://arnie-granite:11434
      DATABASE_URL: "postgresql://USER:PASSWORD@HOST:PORT/DBNAME?sslmode=require"
      ARNIE_JWT_SECRET: "your-long-random-secret"
    ports: ["8085:8085"]
    networks: [arnie-net]

  ui:
    image: docker.io/brandonjuimperbinvictus/arnie-ai-ui:1.0.7
    container_name: arnie-ui
    depends_on: [backend]
    ports: ["8090:8080"]
    networks: [arnie-net]

networks:
  arnie-net:
    driver: bridge

Production & HTTPS

For anything beyond local use, put ARNIE behind a reverse proxy (nginx, Caddy, or your ingress) to give it a real domain and HTTPS. Point the proxy at the UI on port 8090 and the backend on 8085. A tool like Caddy will provision a Let's Encrypt certificate automatically for a domain you own.

Keep secrets out of images. The DATABASE_URL and ARNIE_JWT_SECRET are passed at run time as environment variables — never bake them into an image or commit them to source control.

Troubleshooting

The backend can't reach Granite

Inside a container, localhost refers to that container — not another one. The backend reaches Granite by its container name on the shared network, which is why OLLAMA_BASE_URL is http://arnie-granite:11434, not localhost. Make sure all three containers are on arnie-net.

Port already in use

If port 11434, 8085, or 8090 is taken (for example, a local Ollama already using 11434), map a different host port — e.g. -p 11435:11434 — and point the backend at the container name rather than the host port.

The interface loads but usage won't

The UI reads account and usage data through the backend and the billing service. Confirm the backend is healthy (/health returns OK) and that DATABASE_URL is correct and reachable from the backend container.

Sign-in doesn't appear (goes straight to the dashboard)

That's a cached session — you're already logged in. Open a private/incognito window to see the sign-in page, or clear the site's local storage.

Granite starts but the model isn't listed

The model server needs a few seconds to initialize after the container starts. Wait, then retry curl http://localhost:11434/api/tags. If it persists, check the container logs with podman logs arnie-granite.

Put an operator on the keyboard.

ARNIE is part of the BLCKBX platform — certified and live on the Red Hat Ecosystem Catalog. Let infrastructure run by conversation.